Forum Discussion

angelsz15's avatar
angelsz15
Icon for New Contributor rankNew Contributor
2 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.

7 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