I have a device with ezusb fx2 and I controlled the device using ezusb driver version 1.30 I moved to cyUSB driver version 3.4.7.0 but the communication with device is slower.
With old driver, with a fix hardware configuration, I am able to reach 30Mb/s of data trasfer, simply upgrading the driver to the cyUSB I only reach 15Mb/s.
I don't use the cypress library, I use directly the driver, below a detail of the code I use in both cases, obviously I cannot believe the new driver is slower than the old, so what I am doing wrong?
Thanks in advance for your support.
Alberto
#define MAX_BLT_SIZE (60*1024)
BOOLEAN bResult;
ULONG nBytes, totBytes = 0, lun;
int np, i, resto;
#ifdef NEWDRIVER // cyUSB.sys
SINGLE_TRANSFER singleTransfer;
#else
BULK_TRANSFER_CONTROL bulkControl;
bulkControl.pipeNum = 2;
#endif
np = length / MAX_BLT_SIZE;
resto = length - np * MAX_BLT_SIZE;
if( resto > 0 ) np++;
for( i = 0; i < np; i++ ) {
if( i == np - 1 ) lun = resto;
else lun = MAX_BLT_SIZE;
#ifndef NEWDRIVER // exUSB.sys V. 1.3
bResult = DeviceIoControl(handle,
IOCTL_EZUSB_BULK_READ,
&bulkControl,
sizeof( BULK_TRANSFER_CONTROL ),
buffer + i*MAX_BLT_SIZE,
lun,
&nBytes,
NULL
);
#else // cyUSB.sys version 3.4.7
memset( &singleTransfer, 0, sizeof( singleTransfer));
singleTransfer.ucEndpointAddress= 0x86;
bResult= DeviceIoControl (handle,
IOCTL_ADAPT_SEND_NON_EP0_DIRECT,
&singleTransfer, sizeof( singleTransfer),
buffer + i*MAX_BLT_SIZE, lun,
&nBytes, NULL);
#endif
if( bResult == 0 ) break;
totBytes += nBytes;
if( nBytes < lun ) break;
}
if( bResult )
return totBytes;
else {
DWORD ErrorCode = GetLastError();
return -(LONG)ErrorCode;
}
|