testing some bigger transfer sizes removing some printing.

This commit is contained in:
Paul Molloy 2016-11-30 00:03:40 -06:00
parent 3326c2fb34
commit c256ca6b66
6 changed files with 37 additions and 22 deletions

View File

@ -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)
} else {
//just print xfr cnt
printf(" xf: %d\n",xfr_cnt);
//printf(" xf: %d\n",xfr_cnt);
}

View File

@ -11,7 +11,7 @@
//include prior to other file includes
//that way DEBUG can be turned on/off for this file alone
//uncomment to DEBUG this file alone
#define DEBUG
//#define DEBUG
//"make debug" to get DEBUG msgs on entire program
#include "dbg.h"
@ -19,10 +19,6 @@
#include "shared_errors.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);

View File

@ -8,70 +8,71 @@ int test_function( USBtransfer *transfer )
debug("reset butters");
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);
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);
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);
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, 4, 0, USB_IN, NULL, 0);
uint8_t load_in[128];
uint8_t load_out[128];
uint8_t load_in[256];
uint8_t load_out[256];
int i = 0;
load_in[0] = 0xEE;
//print load
printf("load_in data:");
for (i=0; i<128; i++) {
for (i=0; i<256; i++) {
printf(" %x",load_in[i]);
}
printf("\n");
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
printf("load_in data:");
for (i=0; i<128; i++) {
for (i=0; i<256; i++) {
printf(" %x",load_in[i]);
}
printf("\n");
//fill load with 0-127
for (i=0; i<128; i++) {
for (i=0; i<256; i++) {
load_out[i] = i;
}
//print contents before sending
printf("load_out with data:");
for (i=0; i<128; i++) {
for (i=0; i<256; i++) {
printf(" %x",load_out[i]);
}
printf("\n");
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");
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
printf("load_in data:");
for (i=0; i<128; i++) {
for (i=0; i<256; i++) {
printf(" %x",load_in[i]);
}
printf("\n");
clock_t tstart, tstop;
tstart = clock();
for ( i = (1024 * 4); i>0; i--) {
dictionary_call( transfer, BUFFER, BUFF_PAYLOAD0, 0, 0, USB_OUT, load_out, 128);
//for ( i = (1024 * 2); i>0; i--) {
for ( i = (1033 * 2); i>0; i--) {
dictionary_call( transfer, BUFFER, BUFF_PAYLOAD0, 0, 0, USB_IN, load_out, 254);
}
tstop = clock();
float timediff = ( (float)(tstop-tstart) / CLOCKS_PER_SEC);
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);

View File

@ -233,6 +233,7 @@ void close_usb(libusb_context *context, libusb_device_handle *handle)
int usb_transfer( USBtransfer *transfer )
{
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) {
check( transfer->data != NULL, "data buffer isn't initialized it's: %s", transfer->data);

View File

@ -43,7 +43,7 @@
#define TIMEOUT_5_SEC 5000
//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 MAX_VUSB_LONGXFR 16384 //16KByte biggest value 16bit wLength can hold

View File

@ -233,6 +233,23 @@
// start programming mid usb transfer once it's full. Want to make effor to hide flash programming
// 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