remove address setting and tweak upload speed

This commit is contained in:
David Voswinkel 2009-07-05 11:47:52 +02:00
parent 10d435d2f9
commit f1b89eee83
3 changed files with 32 additions and 35 deletions

Binary file not shown.

View File

@ -133,7 +133,6 @@ int main(int argc, char **argv)
uint8_t bank = 0;
uint8_t bank_cnt = 0;
uint32_t file_size = 0;
struct stat st;
FILE *fp;
usb_init();
@ -197,13 +196,22 @@ int main(int argc, char **argv)
addr_lo = addr & 0xffff;
addr_hi = (addr >> 16) & 0x00ff;
if (addr == 0x000000){
cnt = usb_control_msg(handle,
cnt = usb_control_msg(handle,
USB_TYPE_VENDOR | USB_RECIP_DEVICE |
USB_ENDPOINT_OUT, USB_BULK_UPLOAD_ADDR, addr_hi,
addr_lo, (char *) read_buffer + step,
SEND_BUFFER_SIZE, 5000);
} else {
cnt = usb_control_msg(handle,
USB_TYPE_VENDOR | USB_RECIP_DEVICE |
USB_ENDPOINT_OUT, USB_BULK_UPLOAD_NEXT, addr_hi,
addr_lo, (char *) read_buffer + step,
SEND_BUFFER_SIZE, 5000);
}
if (cnt < 0) {
fprintf(stderr, "USB error: %s\n", usb_strerror());
usb_close(handle);
@ -225,6 +233,11 @@ int main(int argc, char **argv)
}
}
bank = 0;
cnt = usb_control_msg(handle,
USB_TYPE_VENDOR | USB_RECIP_DEVICE |
USB_ENDPOINT_OUT, USB_BULK_UPLOAD_END, 0, 0, NULL,
0, 5000);
fseek(fp, 0, SEEK_SET);
while ((cnt = fread(read_buffer, READ_BUFFER_SIZE, 1, fp)) > 0) {

View File

@ -133,7 +133,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
rx_remaining = rq->wLength.word;
if (req_addr && req_addr % req_bank_size == 0) {
debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr= 0x%08lx time=%.4f\n",
debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr=0x%08lx time=%.4f\n",
req_bank, req_addr,timer_stop());
req_bank++;
timer_start();
@ -146,23 +146,19 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
*/
} else if (rq->bRequest == USB_BULK_UPLOAD_NEXT) {
if (req_state != REQ_STATUS_BULK_UPLOAD){
debug(DEBUG_USB,"USB_BULK_UPLOAD_NEXT: ERROR state is not REQ_STATUS_BULK_UPLOAD\n");
return 0;
}
if (rx_remaining) {
sync_errors++;
debug(DEBUG_USB,
"USB_BULK_UPLOAD_NEXT: Out of sync addr=0x%lx remain=%i packet=%i sync_error=%i\n",
req_addr, rx_remaining, rq->wLength.word, sync_errors);
ret_len = 0;
}
req_state = REQ_STATUS_BULK_UPLOAD;
req_addr = rq->wValue.word;
req_addr = req_addr << 16;
req_addr = req_addr | rq->wIndex.word;
//sram_bulk_write_start(req_addr);
rx_remaining = rq->wLength.word;
ret_len = USB_MAX_TRANS;
if (req_addr && req_addr % req_bank_size == 0) {
debug(DEBUG_USB,"USB_BULK_UPLOAD_NEXT: req_bank=0x%02x addr= 0x%08lx \n",
req_bank, req_addr);
debug(DEBUG_USB,"USB_BULK_UPLOAD_NEXT: req_bank=0x%02x addr= 0x%08lx time=%.4f\n",
req_bank, req_addr,timer_stop());
req_bank++;
timer_start();
}
ret_len = USB_MAX_TRANS;
/*
@ -192,7 +188,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
*/
} else if (rq->bRequest == USB_SNES_BOOT) {
req_state = REQ_STATUS_BOOT;
debug(DEBUG_USB,"USB_SNES_BOOT: ");
debug(DEBUG_USB,"USB_SNES_BOOT:\n");
ret_len = 0;
/*
* -------------------------------------------------------------------------
@ -353,33 +349,21 @@ int main(void)
dump_memory(0x7f00,0x8000);
printf("IRQ off\n");
snes_irq_lo();
snes_irq_off();
printf("IRQ off\n");
printf("Set Snes lowrom\n");
snes_lorom();
printf("Set Snes lowrom\n");
printf("Disable snes WR\n");
snes_wr_disable();
printf("Disable snes WR\n");
snes_bus_active();
printf("Activate Snes bus\n");
#if 0
i = 50;
while (--i) { /* fake USB disconnect for > 250 ms */
_delay_ms(100);
printf(".");
}
printf("\n");
avr_bus_active();
printf("Activate AVR bus\n");
crc_check_bulk_memory(0x000000, 0x80000);
#endif
while(1);
return 0;
}