Jetson Xavier with Multiple USB3 Cameras

Hello,

I have my Jetson Xavier connected to 4 FLIR BlackFly S USB3 cameras via a StarTech PEXUSB3S44V PCIe card. The Xavier is connected to a wall outlet, and the PCIe card has external power connected to a wall outlet (this means that if I power off the Xavier without disconnecting the PCIe card power the cameras will stay powered ON). When I try to begin acquiring images, by running a script I wrote, I get the following output from dmesg -f:

dmesg -f
[  171.332333] usb 4-1: USB disconnect, device number 2
[  171.340338] usb 8-1: USB disconnect, device number 2
[  171.926816] usb 8-1: new SuperSpeed USB device number 3 using xhci_hcd
[  171.926834] usb 4-1: new SuperSpeed USB device number 3 using xhci_hcd
[  171.948390] usb usb7: usb_suspend_both: status 0
[  171.948430] usb usb3: usb_suspend_both: status 0
[  171.954794] usb 8-1: New USB device found, idVendor=1e10, idProduct=4000
[  171.954801] usb 8-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  171.954805] usb 8-1: Product: Blackfly S BFS-U3-16S2C
[  171.954808] usb 8-1: Manufacturer: FLIR
[  171.954811] usb 8-1: SerialNumber: 013187BD
[  171.954936] usb 4-1: New USB device found, idVendor=1e10, idProduct=4000
[  171.954941] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  171.954944] usb 4-1: Product: Blackfly S BFS-U3-16S2C
[  171.954947] usb 4-1: Manufacturer: FLIR
[  171.954951] usb 4-1: SerialNumber: 013154CD

Any ideas about what’s going on and how I could fix it? I’m guessing it may be a power issue and that the camera is losing connection/power briefly. I have tested this multiple times with two cameras and have not had any issues.

Thanks!

1 Like

You might try disabling USB autosuspend (there are a lot of USB devices which do not handle autosuspend well). Adding “usbcore.autosuspend=-1” to the kernel command line should be enough to test this with. For example, add this to the “/boot/extlinux/extlinux.conf” APPEND key/value pair:
APPEND ${cbootargs} usbcore.autosuspend=-1

If this works you could put it in the device tree “chosen->bootargs” node. However you add this, just verify it shows up in:
cat /proc/cpuinfo

Thanks. I have tried this and done some more testing, however, I still am getting the same error with 4 cameras. Testing with 3 cameras connected I have not notice any errors yet.

Just as @linuxdev says, we should apply with those changes.
Also, I mentioned the PCIE card need an external power plug, which pin you connect that? I don’t think Dev Kit has such port. So it may as your says power issue.

In order to identify whether it’s real power related, you also can use the usb to gigabit ethernet adapter. Usually these devices cost only 1w/device, since 3 cameras works, it should be able to afford 4 adapters(maybe 3 cameras + 1 adapter works as well). Although the bandwidth can’t compare with 4 cameras, but it may help to identify the issue.

Hi,
There are two type C ports and one type port on devkit. You may shift cameras to these ports. Thi sshould give more bandwidth to each camera.

Doing this seems to work, I haven’t had any issues with four cameras running since switching one camera to the USB C port. Thanks!
A bit disappointing that the PCIe card can’t seem to handle powering 4 cameras.

1 Like

@ConnorM Do the FLIR cameras show up as /dev/video* on your system? We have an issue that the cameras appear in FLIR’s spinview application but there’s no /dev/video device for them so we can’t use them with Deepstream SDK.

The cameras do not show up under /dev/video* for me. I believe this is because they are USB3 Vision class devices and can only be accessed using FLIR’s Spinnaker SDK. One thing to note is that as far as I know the cameras do not support video recording on ARM devices. The current solution is to capture/store images (.raw for high FPS) and then append them into a video.

Hi,
I have exactly the same problem. Genicam cameras obviously won’t show in /dev/video*.

Yes, I can see the camera in Spinnaker SDK, but that one does not see the “regular” cameras mounted in /dev/video*. Which is a problem as in my application I need to mix input from two cameras one of which is USB3 Vision and one isn’t. Any ideas how to cope with that?

Also yes, not being able to record video on ARM is a problem, I just noticed that as well. So the way you solved that was taking still pictures and then outputing them to a video? Hm, my problem is that I need to show the output on screen with as low latency as possible…

I stuck with the Spinnaker SDK for using the cameras. To get around not being able to directly record videos I stored raw images to the AGX and then just encoded videos. I asked FLIR and they said they did not have any plans to support video recording on ARM unfortunately.

Thanks for your response. I’m just wondering if the throughput of taking stills as you do (without saving them to local storage though) could be good enough to display them on screen in, say 60 FPS. Guess I’ll have to try…

I’ve tested up to 120FPS + saving to storage with no issues, I haven’t tested beyond that really. Good luck!

Massive thanks. Sounds promising…

If you have a raw image, you can easily feed it into the onboard H265 encoder in the Jetson. There are some video encoding samples in the media sample code directory.