Tool/software: Linux
Hi Expert,
In my customer scenario, AM3354 USB work as HOST, and the external USB client is a 4G module, from our study, when the application layer packet transfer size is larger than 512bytes, the USB controller driver divided the application packet by 512 to several small packet and feed it to USB transfer hardware to transfer, for example,1024bytes application transfer packet is divided as 512 bytes+512 bytes+0 and there are 3 transfer request in driver layer, and 1025 is divided as 512+512+1. In hardware level, the largest bulk transfer is 512bytes, so this is compatible with USB20 spec and AM335x USB controller spec.
In our test, we found in AM3354 side, if the receive packet is just multiple of 512bytes, for example 1024 bytes, 512+512+0, the last "0" packet receive transfer can not be finished successfully as Linux kernel last "0" URB request can not be respond in time, so the transfer will be hang there until time-out event occur,
If the receive packet is not multiple of 512 bytes, for example 1025bytes, 512+512+1, the last "1" packet transfer can be finished successfully and Linux kernel URB request can be respond in time.
we will update the Linux kernel version later.
Also we have already checked below e2e link:
http://e2e.ti.com/support/processors/f/791/t/359580?tisearch=e2equicksearch&keymatch=usb%20bulk,
But it looks like it just discussed about bulk data transfer size in USB20 spec not same as our case. Could you give some explain on this behavior and debug suggestion?
Thanks!
-Thomas