Forum Discussion
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
- AlanCLTan
Occasional 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
- angelsz15
New 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
- YokezhiC_Altera
New Contributor
Hi,
It appears that the issue may be due to an incorrect device tree configuration. You might want to review the device tree settings to ensure they are correct.
Here is the reference:
https://github.com/torvalds/linux/tree/master/arch/arm64/boot/dts/altera
Regards
- angelsz15
New 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.
- BoonBengT_Altera
Moderator
Hi angelsz15 ,
I hope you’re doing well. I wanted to follow up and check if there are any remaining questions or concerns regarding this matter. Please let us know if anything still needs clarification — we’re happy to assist further.
Thank you for your time, and we look forward to your feedback.
Best Wishes
BB