Say you trigger a 884736 byte transfer, are you always receiving 884736 bytes in response to the transfer?
-> Not always, above a certain a Frame rate, for some frame fewer bytes are received by the host.
This means that your device is sending short packets i.e. a packet less than 512 bytes. When this happens it will end the transfer. This is why you're seeing less than 884736 bytes being reported in transfers.
The fact that you're seeing this screamer/streamer suggests that there is a issue with your hardware interface (slaveFIFO/GPIF) or your firmware (Win7 sends tokens faster than WinXP from what I've seen).
Can you please create a tech support case (MyAccount -> MyCases) with the details that we've deduced so far so that the issue can be analysed deeper.
dear bicool and Anand,
i think i have solved the problem, it seems that SetXferSize(len) is the main cause. FOR XP if i set len = VGASIZE(640*480*2) it can reach 30fps, but for win7 i find it must be set a smaller size(640*480) .and set time=2 to finish one frame transfer.So try to set a small size and to multi-transfer .this is my code for reference:
int time = 2;
for(i=0;i<time;i++)inContext[i] = USBDevice->BulkInEndPt->BeginDataXfer(pOut+i*len, len, &inOvLap[i]);
bRequest=USBDevice->BulkInEndPt->FinishDataXfer(pOut+i*len, len, &inOvLap[i],inContext[i]);
there is someting wrong with posting code .
but the key is setXfersize tosolve the problem
What is the issue you are seeing in posting code?