testing some bigger transfer sizes removing some printing.
This commit is contained in:
parent
3326c2fb34
commit
c256ca6b66
|
|
@ -159,7 +159,7 @@ int dictionary_call( USBtransfer *transfer, uint8_t dictionary, uint8_t opcode,
|
||||||
check(rbuf[0] == SUCCESS, "retro programmer had error: %d, dict:%d, opcode:%d/%x, addr:%x, data:%x",rbuf[0], dictionary, opcode, opcode, addr, miscdata)
|
check(rbuf[0] == SUCCESS, "retro programmer had error: %d, dict:%d, opcode:%d/%x, addr:%x, data:%x",rbuf[0], dictionary, opcode, opcode, addr, miscdata)
|
||||||
} else {
|
} else {
|
||||||
//just print xfr cnt
|
//just print xfr cnt
|
||||||
printf(" xf: %d\n",xfr_cnt);
|
//printf(" xf: %d\n",xfr_cnt);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
//include prior to other file includes
|
//include prior to other file includes
|
||||||
//that way DEBUG can be turned on/off for this file alone
|
//that way DEBUG can be turned on/off for this file alone
|
||||||
//uncomment to DEBUG this file alone
|
//uncomment to DEBUG this file alone
|
||||||
#define DEBUG
|
//#define DEBUG
|
||||||
//"make debug" to get DEBUG msgs on entire program
|
//"make debug" to get DEBUG msgs on entire program
|
||||||
#include "dbg.h"
|
#include "dbg.h"
|
||||||
|
|
||||||
|
|
@ -19,10 +19,6 @@
|
||||||
#include "shared_errors.h"
|
#include "shared_errors.h"
|
||||||
#include "shared_dictionaries.h"
|
#include "shared_dictionaries.h"
|
||||||
|
|
||||||
//uncomment to DEBUG this file alone
|
|
||||||
#define DEBUG
|
|
||||||
//"make debug" to get DEBUG msgs on entire program
|
|
||||||
#include "dbg.h"
|
|
||||||
|
|
||||||
int dictionary_call( USBtransfer *transfer, uint8_t dictionary, uint8_t opcode, uint16_t addr, uint8_t miscdata, uint8_t endpoint, uint8_t *buffer, uint16_t length);
|
int dictionary_call( USBtransfer *transfer, uint8_t dictionary, uint8_t opcode, uint16_t addr, uint8_t miscdata, uint8_t endpoint, uint8_t *buffer, uint16_t length);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,70 +8,71 @@ int test_function( USBtransfer *transfer )
|
||||||
debug("reset butters");
|
debug("reset butters");
|
||||||
dictionary_call( transfer, BUFFER, RAW_BUFFER_RESET, 0, 0, USB_IN, NULL, 0);
|
dictionary_call( transfer, BUFFER, RAW_BUFFER_RESET, 0, 0, USB_IN, NULL, 0);
|
||||||
dictionary_call( transfer, BUFFER, RAW_BANK_STATUS, 0, 0, USB_IN, NULL, 0);
|
dictionary_call( transfer, BUFFER, RAW_BANK_STATUS, 0, 0, USB_IN, NULL, 0);
|
||||||
debug("allocate buff0 128B"); //id:basebank num32B banks
|
debug("allocate buff0 256B"); //id:basebank num32B banks
|
||||||
dictionary_call( transfer, BUFFER, ALLOCATE_BUFFER0, 0x1000, 4, USB_IN, NULL, 0);
|
dictionary_call( transfer, BUFFER, ALLOCATE_BUFFER0, 0x1000, 4, USB_IN, NULL, 0);
|
||||||
debug("allocate buff1 128B"); //id:basebank num32B banks
|
debug("allocate buff1 256B"); //id:basebank num32B banks
|
||||||
dictionary_call( transfer, BUFFER, ALLOCATE_BUFFER1, 0x2004, 4, USB_IN, NULL, 0);
|
dictionary_call( transfer, BUFFER, ALLOCATE_BUFFER1, 0x2004, 4, USB_IN, NULL, 0);
|
||||||
debug("status"); //id:basebank num32B banks
|
debug("status"); //id:basebank num32B banks
|
||||||
dictionary_call( transfer, BUFFER, RAW_BANK_STATUS, 0, 0, USB_IN, NULL, 0);
|
dictionary_call( transfer, BUFFER, RAW_BANK_STATUS, 0, 0, USB_IN, NULL, 0);
|
||||||
dictionary_call( transfer, BUFFER, RAW_BANK_STATUS, 4, 0, USB_IN, NULL, 0);
|
dictionary_call( transfer, BUFFER, RAW_BANK_STATUS, 4, 0, USB_IN, NULL, 0);
|
||||||
|
|
||||||
uint8_t load_in[128];
|
uint8_t load_in[256];
|
||||||
uint8_t load_out[128];
|
uint8_t load_out[256];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
load_in[0] = 0xEE;
|
load_in[0] = 0xEE;
|
||||||
//print load
|
//print load
|
||||||
printf("load_in data:");
|
printf("load_in data:");
|
||||||
for (i=0; i<128; i++) {
|
for (i=0; i<256; i++) {
|
||||||
printf(" %x",load_in[i]);
|
printf(" %x",load_in[i]);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
debug("read payload0 uninitialized");
|
debug("read payload0 uninitialized");
|
||||||
dictionary_call( transfer, BUFFER, BUFF_PAYLOAD0, 0, 0, USB_IN, load_in, 128);
|
dictionary_call( transfer, BUFFER, BUFF_PAYLOAD0, 0, 0, USB_IN, load_in, 254);
|
||||||
|
|
||||||
//print load
|
//print load
|
||||||
printf("load_in data:");
|
printf("load_in data:");
|
||||||
for (i=0; i<128; i++) {
|
for (i=0; i<256; i++) {
|
||||||
printf(" %x",load_in[i]);
|
printf(" %x",load_in[i]);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
//fill load with 0-127
|
//fill load with 0-127
|
||||||
for (i=0; i<128; i++) {
|
for (i=0; i<256; i++) {
|
||||||
load_out[i] = i;
|
load_out[i] = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
//print contents before sending
|
//print contents before sending
|
||||||
printf("load_out with data:");
|
printf("load_out with data:");
|
||||||
for (i=0; i<128; i++) {
|
for (i=0; i<256; i++) {
|
||||||
printf(" %x",load_out[i]);
|
printf(" %x",load_out[i]);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
debug("send payload0");
|
debug("send payload0");
|
||||||
dictionary_call( transfer, BUFFER, BUFF_PAYLOAD0, 0, 0, USB_OUT, load_out, 128);
|
dictionary_call( transfer, BUFFER, BUFF_PAYLOAD0, 0, 0, USB_OUT, load_out, 254);
|
||||||
|
|
||||||
debug("read payload0");
|
debug("read payload0");
|
||||||
dictionary_call( transfer, BUFFER, BUFF_PAYLOAD0, 0, 0, USB_IN, load_in, 128);
|
dictionary_call( transfer, BUFFER, BUFF_PAYLOAD0, 0, 0, USB_IN, load_in, 254);
|
||||||
|
|
||||||
//print load
|
//print load
|
||||||
printf("load_in data:");
|
printf("load_in data:");
|
||||||
for (i=0; i<128; i++) {
|
for (i=0; i<256; i++) {
|
||||||
printf(" %x",load_in[i]);
|
printf(" %x",load_in[i]);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
clock_t tstart, tstop;
|
clock_t tstart, tstop;
|
||||||
tstart = clock();
|
tstart = clock();
|
||||||
for ( i = (1024 * 4); i>0; i--) {
|
//for ( i = (1024 * 2); i>0; i--) {
|
||||||
dictionary_call( transfer, BUFFER, BUFF_PAYLOAD0, 0, 0, USB_OUT, load_out, 128);
|
for ( i = (1033 * 2); i>0; i--) {
|
||||||
|
dictionary_call( transfer, BUFFER, BUFF_PAYLOAD0, 0, 0, USB_IN, load_out, 254);
|
||||||
}
|
}
|
||||||
tstop = clock();
|
tstop = clock();
|
||||||
float timediff = ( (float)(tstop-tstart) / CLOCKS_PER_SEC);
|
float timediff = ( (float)(tstop-tstart) / CLOCKS_PER_SEC);
|
||||||
printf("total time: %fsec, speed: %fKBps", timediff, (512/timediff));
|
printf("total time: %fsec, speed: %fKBps", timediff, (512/timediff));
|
||||||
//128byte transfers currently clocking in around 21KBps
|
//256byte transfers currently clocking in around 21KBps
|
||||||
|
|
||||||
|
|
||||||
// dictionary_call( transfer, BUFFER, ALLOCATE_BUFFER2, 0x3508, 4);
|
// dictionary_call( transfer, BUFFER, ALLOCATE_BUFFER2, 0x3508, 4);
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,7 @@ void close_usb(libusb_context *context, libusb_device_handle *handle)
|
||||||
int usb_transfer( USBtransfer *transfer )
|
int usb_transfer( USBtransfer *transfer )
|
||||||
{
|
{
|
||||||
check( transfer->wLength <= MAX_VUSB, "Can't transfer more than %d bytes!", MAX_VUSB);
|
check( transfer->wLength <= MAX_VUSB, "Can't transfer more than %d bytes!", MAX_VUSB);
|
||||||
|
//check( transfer->wLength <= MAX_VUSB_LONGXFR, "Can't transfer more than %d bytes!", MAX_VUSB_LONGXFR);
|
||||||
|
|
||||||
if ( transfer->wLength != 0) {
|
if ( transfer->wLength != 0) {
|
||||||
check( transfer->data != NULL, "data buffer isn't initialized it's: %s", transfer->data);
|
check( transfer->data != NULL, "data buffer isn't initialized it's: %s", transfer->data);
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@
|
||||||
#define TIMEOUT_5_SEC 5000
|
#define TIMEOUT_5_SEC 5000
|
||||||
|
|
||||||
//Max transfer length
|
//Max transfer length
|
||||||
#define MAX_VUSB 245 //Max VUSB transfers without long transfers enabled
|
#define MAX_VUSB 254 //Max VUSB transfers without long transfers enabled
|
||||||
#define USB_NO_MSG 255 //designates transfer with no message
|
#define USB_NO_MSG 255 //designates transfer with no message
|
||||||
#define MAX_VUSB_LONGXFR 16384 //16KByte biggest value 16bit wLength can hold
|
#define MAX_VUSB_LONGXFR 16384 //16KByte biggest value 16bit wLength can hold
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,23 @@
|
||||||
// start programming mid usb transfer once it's full. Want to make effor to hide flash programming
|
// start programming mid usb transfer once it's full. Want to make effor to hide flash programming
|
||||||
// wait time behind usb transfer time.
|
// wait time behind usb transfer time.
|
||||||
|
|
||||||
|
// some speed testing:
|
||||||
|
// 128Byte OUT (write) transfers with long transfers DISABLED: 20.04sec/512KByte = 25.55KBps
|
||||||
|
// 128Byte OUT (write) transfers with long transfers ENABLED: 20.7 sec/512KByte = 24.7 KBps
|
||||||
|
// 256Byte OUT (write) transfers with long transfers ENABLED: 18.56sec/512KByte = 27.6 KBps
|
||||||
|
// 254Byte OUT (write) transfers with long transfers DISABLED: 17.9 sec/512KByte = 28.6 KBps (assuming 2 bytes stuffed in setup packet)
|
||||||
|
// 254Byte IN (read) with long xfr DISABLED, w/o usbFuncRd: 30.9 sec/512KByte = 16.5 KBps
|
||||||
|
// 254Byte IN (read) with long xfr DISABLED, w/usbFuncRd: 34.9 sec/512KByte = 14.7 KBps
|
||||||
|
//
|
||||||
|
// These tests did nothing with payload once it arrived, so these are practical maximums of V-usb.
|
||||||
|
// Conclusion:
|
||||||
|
// -enabling long transfers slows writes (and probably reads)
|
||||||
|
// -reads are much slower than writes.
|
||||||
|
// -enabling usbFunctionRead is slower compared to using usbFunctionSetup alone.
|
||||||
|
// -using 254B xfrs with 2 bytes stuffed in setup packet gives decent boost.
|
||||||
|
// this is primarily due to speed up of not having long transfers enabled.
|
||||||
|
// -not actually certain enabling long transfers will slow down reads, but it certainly does for writes.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue