Forum Discussion

angelsz15's avatar
angelsz15
Icon for New Contributor rankNew Contributor
3 months ago

Arria 10 SoC – USB devices always enumerating as Full-Speed (Yocto 4.1, dwc2)

Hello,

My name is Ángel and I am currently working with an Intel SoC FPGA Arria 10. I am trying to connect an Intel RealSense SR300 camera to my system, but I am experiencing USB speed negotiation issues.

Environment:

Platform: Intel SoC FPGA Arria 10

OS: Linux (custom image built with Yocto 4.1 Langdale)

USB driver: dwc2

librealsense built with -DFORCE_RSUSB_BACKEND=ON

When I connect the RealSense SR300 camera, the USB link does not negotiate correctly and the device is always enumerated as Full-Speed (12M) instead of High-Speed or SuperSpeed. At first, I suspected a problem with the USB 3.0 connector of the SR300. However, when I tested with a standard USB 2.0 webcam, I observed exactly the same behavior: the device is still enumerated only as Full-Speed (12M). This suggests the issue is likely related to the USB controller configuration on the Arria 10 rather than the camera itself.


System Output

lsusb -t:

/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M

|__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=, 12M

|__ Port 1: Dev 2, If 1, Class=Audio, Driver=, 12M

|__ Port 1: Dev 2, If 2, Class=Audio, Driver=, 12M

dmesg:

[ 204.765768] usb 1-1: new full-speed USB device number 2 using dwc2


Yocto local.conf:
MACHINE = "arria10"

DISTRO_FEATURES:append = " systemd vfat"

DISTRO_FEATURES:remove = " sysvinit"

VIRTUAL-RUNTIME_init_manager = "systemd"

IMAGE_INSTALL:append = " kernel-module-uvcvideo"

KERNEL_MODULE_AUTOLOAD += "uvcvideo"

IMAGE_INSTALL:append = " \

packagegroup-core-boot \

pciutils \

usbutils \

v4l-utils \

i2c-tools \

librealsense2 \

"

EXTRA_OECMAKE:append:pn-librealsense2 = " -DFORCE_RSUSB_BACKEND=ON"

Any guidance would be greatly appreciated.

14 Replies

    • angelsz15's avatar
      angelsz15
      Icon for New Contributor rankNew Contributor

      Thank you for your response, and apologies for the delayed reply.

      The initial issue related to USB device recognition and speed negotiation was resolved by enabling the appropriate drivers in the virtual kernel of my Yocto-based project.

      Due to the USB 3.0 limitation of the RealSense camera and the USB 2.0 interface available on the Arria 10 platform, I decided to switch the RGB-D camera to a Kinect v1 (Xbox 360).

      I am currently attempting to interface with the Kinect using both the libfreenect library and direct USB frame communication. However, the issue appears to be within the USB subsystem: something in the USB drivers is blocking the data flow between the ARM processor and the camera.

      The camera itself has been tested and works correctly on other platforms such as Jetson and Raspberry Pi, so a hardware issue is unlikely. At this point, I suspect the problem may be related to the dwc2 driver or possibly missing permissions or misconfigured drivers within the system.

      Any suggestions would be greatly appreciated.

      • YokezhiC_Altera's avatar
        YokezhiC_Altera
        Icon for New Contributor rankNew Contributor

        Hello,

        Users running libfreenect require appropriate permissions to access the Kinect hardware. You may need to configure a udev rule to grant this access:

        Udev rules are stored in /etc/udev/rules.d/. You’ll need to create a new file there. You can name it something descriptive like 51-kinect.rules.

        Run the following command to open the editor:

        sudo nano /etc/udev/rules.d/51-kinect.rules

        Add the Rule content:

        # ATTR{product}=="Xbox NUI Motor"

        SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02b0", MODE="0666"

        # ATTR{product}=="Xbox NUI Audio"

        SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02ad", MODE="0666"

        # ATTR{product}=="Xbox NUI Camera"

        SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02ae", MODE="0666"

        # ATTR{product}=="Xbox NUI Motor"

        SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02c2", MODE="0666"

        # ATTR{product}=="Xbox NUI Motor"

        SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02be", MODE="0666"

        # ATTR{product}=="Xbox NUI Motor"

        SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02bf", MODE="0666"

        **Note: Mode="0666" allows read/write access

         

        Reload the udev Rules:

        sudo udevadm control --reload-rules

        sudo udevadm trigger

  • angelsz15's avatar
    angelsz15
    Icon for New Contributor rankNew Contributor

    Thanks for the suggestion YokezhiC_Altera​ .

    I applied the udev rules fix, but the issue persists. The application is also running as root, so this does not seem to be a permissions problem.

    The device is correctly detected (lsusb shows camera, motor, and audio), which indicates that USB connectivity and basic enumeration are working.

    The failure happens during device communication:

    - Input/Output control transfer failed

    - incomplete reads (expected X bytes)

    - unexpected USB disconnect

    This points to a low-level issue, possibly related to the dwc2 driver or hardware limitations for isochronous transfers (potential USB bus saturation).

    Full console output attached:

    root@arria10-ea700498022f:~/app# ./kinect_test_app

    send_cmd: Input control transfer failed (18)

    [ 340.405365] usb 1-1.3: USB disconnect, device number 7

    freenect_fetch_reg_info: send_cmd read 18 bytes (expected 118)

    send_cmd: Output control transfer failed (-1)

    freenect_fetch_reg_const_shift: send_cmd read -1 bytes (expected 8)

    freenect_camera_init(): Failed to fetch const shift for device

    Device 0x51fda0 open during shutdown, closing...

    root@arria10-ea700498022f:~/app# [ 343.517208] usb 1-1.3: new high-speed USB device number 8 using dwc2

    root@arria10-ea700498022f:~/app# lsusb -t

    /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M

    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/3p, 480M

    |__ Port 1: Dev 4, If 0, Class=Vendor Specific Class, Driver=, 480M

    |__ Port 2: Dev 3, If 0, Class=Vendor Specific Class, Driver=, 12M

    |__ Port 3: Dev 8, If 0, Class=Vendor Specific Class, Driver=, 480M

    root@arria10-ea700498022f:~/app# lsusb

    Bus 001 Device 008: ID 045e:02ae Microsoft Corp. Xbox NUI Camera

    Bus 001 Device 003: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor

    Bus 001 Device 004: ID 045e:02ad Microsoft Corp. Xbox NUI Audio

    Bus 001 Device 002: ID 0409:005a NEC Corp. HighSpeed Hub

    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

  • AlanCLTan's avatar
    AlanCLTan
    Icon for Occasional Contributor rankOccasional Contributor

    Hi angelsz15​ 

    Arria 10 SoC FPGA does not contain an integrated High‑Speed USB PHY. You will need to provide an external USB2.0 HS PHY.

    Could you check are these defined in the device tree?:

    phy_type = "ulpi";
    dr_mode = "host";
    phys = <&usb_phy0>;
    phy-names = "usb2-phy";
    
    snps,phyif = <0>;         // ULPI
    snps,hs_phy_type = "ulpi";
    snps,fs_phy_type = "dedicated";

    Also, check for the PHY binding status:

    dmesg | grep -i phy
    dmesg | grep -i ulpi

    -Alan