05-15-2017 11:30 AM - edited 05-15-2017 11:31 AM
I have a set of different USB3 industrial cameras by different vendors that I'm trying to connect to a ZU3EG ES1 board. All cameras use the same protocol (USB3Vision), which transmits particularly long bulk transfers. When I try to access them from the PS, the bulk transfers are corrupted. Typically the transfers contain a random arrangement of chunks with valid pixel data from random image locations. When I access two cameras simultaneously, the bulk transfers for each camera contain chunks of pixel data from both cameras. So, I would guess that there's something going horribly wrong with the ring buffer inside the kernel USB driver.
All cameras work when I force them to use USB 2. USB 3.0 seems to work flawlessly with storage devices, even at high transfer rates. With some settings, the cameras only occasionally deliver corrupted data, while with other settings all data is corrupted. The code that I use for accessing the cameras is actually a piece of well-tested open source code.
In the Ultrascale+ USB driver wiki I have read the following:
For silicon 1.0 & 2.0 USB ip has HW bugs , we see intermidate resets during transfers. To get USB host/device to work properly we need to make sure below mentioned workarounds are added in fsbl
I have applied the recommended workarounds (HSRX disable bypass, USB2 phy suspend disable), but did not notice any differences. Are there any other known bugs that could cause this and are there known workarounds?
Thanks!
05-17-2017 06:01 AM
This seems to have been an issue with the kernel that I was using (was a patched Xilinx kernel). With the standard Petalinux kernel things work fine.
05-17-2017 06:01 AM
This seems to have been an issue with the kernel that I was using (was a patched Xilinx kernel). With the standard Petalinux kernel things work fine.