Point Grey USB3 cameras not working on some USB hubs

Hello,
I have a pair of Point Grey Blackfly cameras (BFLY-U3-13S2C-CS) connected to a USB3 powered hub connected to the USB3 port of a TX2 dev kit with the latest Jetpack loaded. The hub is a Sabrent 7 port HB-UMA7 which uses a pair of Genesys Logic USB3.1 4-port hubs, and takes power from a good 12V supply.
I’m testing the cameras both with the ROS pointgrey_camera_driver and with the spinview program included with the spinnaker SDK. If I use another hub both work. If I use this hub with a thinkpad running Ubuntu 16.04 both work. The other hubs I have are all somewhat bulkier than the Sabrent one and I’m somewhat limited on volume. dmesg shows all the devices being recognized as SuperSpeed with no errors except for one about being unable to enable U2 on the cameras, so I disabled USB3 LPM but that didn’t change anything. lsusb -v confirms the hub is reporting as self powered and capable of SuperSpeed, and shows both cameras supporting SuperSpeed as well. The hub port status spits out a bunch of items about lowspeed, but this happens on the working system as well. I have a USB keyboard, mouse, and RS485 converter all operating just fine on this hub as well.
What else can I look into or try to get this working or should I start cutting up another hub?

Thank you,
Nick

Not sure if I got correct info from your description since there are many terms and product name.

To make it simple, there are 2 usb3 cameras and you would like to use it in one hub powered by 12V supply. These two cameras working fine on other hub but not on the one powered by 12V.

Is it correct?

Does error only happen to one camera or to both? Sounds devices are both detected. If so, what is the exactly error? The devices cannot start capturing frames?

That is correct. Both devices are detected but I am not able to get frames from either camera with either of the manufacturer supplied SDKs.

If it is a case for camera, bandwidth may be the problem and we may need more detail.

Could you share what is the topology of your hub ,camera and tx2 with both working and non-working case?

Also, please tell if there are any other usb devices connected to hub or just two cameras.

Here is the output of lsusb -t in the non working configuration. The Miscellaneous Devices correspond to the 2 cameras, and the HID are the keyboard and mouse also on the hub.

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-tegra/3p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
            |__ Port 1: Dev 4, If 0, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 1: Dev 4, If 1, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 1: Dev 4, If 2, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 2: Dev 5, If 0, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 2: Dev 5, If 1, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 2: Dev 5, If 2, Class=Miscellaneous Device, Driver=, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci-tegra/4p, 480M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 4: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 3: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
            |__ Port 3: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
            |__ Port 4: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M

And here is lsusb -t in the working configuration

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-tegra/3p, 5000M
    |__ Port 1: Dev 6, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 1: Dev 7, If 0, Class=Hub, Driver=hub/4p, 5000M
            |__ Port 1: Dev 9, If 0, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 1: Dev 9, If 1, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 1: Dev 9, If 2, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 2: Dev 8, If 0, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 2: Dev 8, If 1, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 2: Dev 8, If 2, Class=Miscellaneous Device, Driver=, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci-tegra/4p, 480M
    |__ Port 2: Dev 6, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 7, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 3: Dev 8, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
            |__ Port 3: Dev 8, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 2: Dev 9, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M

npeters2014,

Is single camera working fine on that hub?

One other suggestion…most HUBs such as what you have can revert to USB-powered when power is lost. Do errors change if you boot the system with no device on the 12V HUB and no 12V supplied, followed by adding 12V after boot, and only then adding cameras? Does dmesg show anything as the 12V supply is added once the system boots? Does dmesg show anything different if you plug/unplug a camera without 12V (one camera at a time)? The goal is to separate power delivery methods for testing versus the cameras or the entire HUB.

Having a single camera connected to the hub does not work. The cameras should consume no more than 3W each according to the manufacturer.
I booted up with no hub and only a keyboard attached to the USB OTG port with the supplied adapter and an HDMI display. After I logged in I connected the hub with no devices and only bus power. The hub did not show up in lsusb or dmesg with 12V power disconnected. Once I connected the hub power (still with no devices), I got the following dmesg output:

[   57.838966] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work mailbox command 4
[   57.846210] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work ignore firmware MBOX_CMD_INC_SSPI_CLOCK request
[   58.075644] usb 2-1: new SuperSpeed USB device number 2 using xhci-tegra
[   58.099803] usb 2-1: New USB device found, idVendor=05e3, idProduct=0616
[   58.106612] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   58.113896] usb 2-1: Product: USB3.0 Hub
[   58.117980] usb 1-2: new high-speed USB device number 3 using xhci-tegra
[   58.125056] usb 2-1: Manufacturer: GenesysLogic
[   58.139344] hub 2-1:1.0: USB hub found
[   58.143619] hub 2-1:1.0: 4 ports detected
[   58.259100] usb 1-2: New USB device found, idVendor=05e3, idProduct=0610
[   58.266035] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   58.273340] usb 1-2: Product: USB2.0 Hub
[   58.277413] usb 1-2: Manufacturer: GenesysLogic
[   58.286240] hub 1-2:1.0: USB hub found
[   58.291136] hub 1-2:1.0: 4 ports detected
[   58.419400] usb 2-1.4: new SuperSpeed USB device number 3 using xhci-tegra
[   58.443404] usb 2-1.4: New USB device found, idVendor=05e3, idProduct=0616
[   58.450483] usb 2-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   58.457954] usb 2-1.4: Product: USB3.0 Hub
[   58.462224] usb 2-1.4: Manufacturer: GenesysLogic
[   58.473558] hub 2-1.4:1.0: USB hub found
[   58.478379] hub 2-1.4:1.0: 4 ports detected
[   58.570983] usb 1-2.4: new high-speed USB device number 4 using xhci-tegra
[   58.670993] usb 1-2.4: New USB device found, idVendor=05e3, idProduct=0610
[   58.678066] usb 1-2.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   58.685506] usb 1-2.4: Product: USB2.0 Hub
[   58.689729] usb 1-2.4: Manufacturer: GenesysLogic
[   58.698542] hub 1-2.4:1.0: USB hub found
[   58.702928] hub 1-2.4:1.0: 4 ports detected
[   60.265489] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work mailbox command 5
[   60.272671] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work ignore firmware MBOX_CMD_DEC_SSPI_CLOCK request

I then connected the cameras to the hub and got this from dmesg:

[  101.281460] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work mailbox command 4
[  101.288675] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work ignore firmware MBOX_CMD_INC_SSPI_CLOCK request
[  101.535810] usb 2-1.4.4: new SuperSpeed USB device number 4 using xhci-tegra
[  101.589557] usb 2-1.4.4: New USB device found, idVendor=1e10, idProduct=3300
[  101.596742] usb 2-1.4.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  101.604555] usb 2-1.4.4: Product: Blackfly BFLY-U3-13S2C
[  101.610103] usb 2-1.4.4: Manufacturer: Point Grey Research
[  101.615779] usb 2-1.4.4: SerialNumber: 00EB87D1
[  101.623070] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work mailbox command 6
[  103.623864] usb 2-1.4.2: new SuperSpeed USB device number 5 using xhci-tegra
[  103.677632] usb 2-1.4.2: New USB device found, idVendor=1e10, idProduct=3300
[  103.684870] usb 2-1.4.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  103.692780] usb 2-1.4.2: Product: Blackfly BFLY-U3-13S2C
[  103.698232] usb 2-1.4.2: Manufacturer: Point Grey Research
[  103.703824] usb 2-1.4.2: SerialNumber: 00EB8755

I connected a mouse a few seconds later and ended up with this tree from lsusb -t

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-tegra/3p, 5000M
    |__ Port 1: Dev 6, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 4: Dev 7, If 0, Class=Hub, Driver=hub/4p, 5000M
            |__ Port 2: Dev 8, If 0, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 2: Dev 8, If 1, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 2: Dev 8, If 2, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 4: Dev 9, If 0, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 4: Dev 9, If 1, Class=Miscellaneous Device, Driver=, 5000M
            |__ Port 4: Dev 9, If 2, Class=Miscellaneous Device, Driver=, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci-tegra/4p, 480M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 2: Dev 6, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 7, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 4: Dev 8, If 0, Class=Hub, Driver=hub/4p, 480M

Full dmesg output here: https://pastebin.com/hiVmu9HL

Disconnecting the cameras then the hub power produced this output:

[ 1353.048319] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work mailbox command 6
[ 1354.856898] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work mailbox command 5
[ 1354.864908] xhci-tegra 3530000.xhci: tegra_xhci_mbox_work ignore firmware MBOX_CMD_DEC_SSPI_CLOCK request
[ 1364.727073] usb 1-2: USB disconnect, device number 6
[ 1364.732501] usb 1-2.1: USB disconnect, device number 7
[ 1364.758981] usb 1-2.4: USB disconnect, device number 8
[ 1365.035072] usb 2-1: USB disconnect, device number 6
[ 1365.040107] usb 2-1.4: USB disconnect, device number 7

Those logs show success so far as USB goes (USB3 was detected and devices were using that mode).

Earlier posts make it look as though this is not a “standard” USB Video Class (UVC), but in fact “miscellaneous” (requiring a custom driver specific to the hardware…this is beyond USB acting as a data pipe). I never saw a driver take ownership, but the USB hotplug did correctly announce the hardware (presumably a driver could have taken ownership).

I am thinking that the issue is not because of USB, but is an issue of drivers specific to the cameras. Is there some sort of driver listed for arm64/aarch64? Is there any software download for those specific cameras on ARMv8-a?

The cameras have an SDK that is used to connect, grab frames, change settings, etc, and are indeed not UVC. There’s not a download for the specific cameras on ARMv8, but there is a download for cameras of this type for arm64, which is what I’ve been using, and it works on other USB hubs with the Jetson, just not this one. Running the manufacturer supplied software with a camera directly connected to the Jetson works fine,but doesn’t cause any drivers to load. I’ve reached out to them for support as well. They supply instructions for ARM and specifically mention the TX2 as a supported platform in http://www.ptgrey.com/KB/10699 and http://www.ptgrey.com/KB/10357. The software itself is available from https://www.ptgrey.com/support/downloads/10990/ but requires an account and the drivers themselves seem to be closed source. When I run the demo code the software doesn’t start until I unplug all cameras from the hub. I tried running in gdb and some exceptions get thrown when I have a camera plugged into the hub that don’t get thrown in other configurations so I suppose it’s a problem with the vendor’s software.

arm64/aarch64 is ARMv8-a, so this is the correct package.

The drivers may need to be told to load. For example, if there is a kernel module but things have not been set up, then instead of the module automatically loading upon seeing the need, then you may have to manually do an insmod (or related). This isn’t to say drivers are failing, but it does suggest the drivers may need further installation steps.

Of the driver files you got, how many are in “/lib/modules/(uname -r)/"? How many are in "/lib/firmware/"? If a ".ko" module file is in "/lib/modules/(uname -r)/”, what happens if you manually run “sudo insmod <module_name>”?

None of the files I have go in /lib and none are “.ko”. I have 2 shared object files that get copied to /usr/lib and are loaded by programs that want to access the cameras.

Since the camera is miscellaneous class and not UVC you probably need to find out if there is a driver (the “.ko” kernel module file). User space files work with programs wanting to use the driver, but the driver itself has to go in the kernel. I am just guessing, but it seems likely your program crashes when it uses a system call demanding a kernel feature which isn’t in place. Are you absolutely sure there isn’t something else to download?

I can’t find any other software to download, and have followed all the steps from the manufacturer for the TX2

I cannot look at their software because it requires a login (and presumably for customers). You should ask them this specific question:

  • Is there any kernel module required?
  • Does any user space software depend on any specific kernel symbol or feature being enabled?

It isn’t possible for a miscellaneous class device to function without some sort of kernel level intervention. USB correctly detected the device and announced it…there was no software taking ownership.

If even single camera does not work, I don’t think it is tegra issue. In the beginning, I thought it is a bandwidth issue, but it seems not.