This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/AM3354: AM3354 USB fail when Bulk transfer size is multiple of 512 bytes

Part Number: AM3354

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