I have UP Board (CHT) which emulates USB 2.0 HS UVC camera. It works fine with NUC 7(KBL) and Coffee Lake PC.
When I try to use it with NUC 8, it fails to video start stream. I tried to start stream with NUC 8 + USB 2.0 HUB + my camera emulator and it started successfully with this configuration.
I checked DWC3 (my camera gadget controller) driver trace events on emulator device and compared it with wshark captured packets on host. I found that the reason why stream is not started is in that the host (NUC 8) missed to send second STATUS packet on the SET INTERFACE packet, when the gadget (UP Board) replied on first STATUS packets with NAK.
It looks like a NUC USB bug for me, because of my emulator works fine on NUC 7 and KBL host, it even works as expected with NUC 8 + USB HUB. And of course my emulator acts according to USB 2.0 specs.
Also, I remembered that my colleagues saw the same behavior with real USB 3.0 camera. Unfortunately, I couldn't approve this just right now, because of I doesn't have this camera yet.
Thank you for the reply! You could find answers on your questions and some more details below.
Since you are using an UP board (CHT) and your configuration works when using a USB hub, have you contacted them to check the requirements for the board USB connections to be compatible? If possible, we would like to have more information about this.
I'm using USB OTG port on UP Board with micro-USB (type B) to USB (type A) cable. And this setup is fully compatible with my host as I could see.
Are you using the USB connectors or USB headers? Have you tried all USB ports on the unit?
I only use USB ports on front and back NUC panel. My device is detected with all of them except charging port, but I couldn't start video stream without external USB 2.0 HUB.
As I mention before my camera works fine on my host. Here is my host (Coffee Lake i7-8700 + PCH 200-series) USB-related things:
lspci -k -nn -s 00:14.0
00:14.0 USB controller [0c03]: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller [8086:a2af]
Subsystem: Dell Device [1028:0874]
Kernel driver in use: xhci_hcd
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
|__ Port 5: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 7: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 7: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 10: Dev 15, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 10: Dev 15, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 12: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 12: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M
[782664.873489] usb 1-10: new high-speed USB device number 15 using xhci_hcd
[782665.023248] usb 1-10: New USB device found, idVendor=1d6b, idProduct=0102
[782665.024574] uvcvideo: Found UVC 1.00 device AT Camera Emulation (1d6b:0102)
[782665.026084] input: AT Camera Emulation: UVC Camera as /devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.0/input/input27
Here is the same output for my NUC 8:
lspci -k -nn -s 00:14.0
00:14.0 USB controller [0c03]: Intel Corporation Device [8086:9ded] (rev 30)
Subsystem: Intel Corporation Device [8086:2074]
Kernel driver in use: xhci_hcd
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 10000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
|__ Port 2: Dev 27, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 2: Dev 27, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 4: Dev 20, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 21, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 3: Dev 21, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 4: Dev 22, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 10: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 10: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M
[ 6022.733299] usb 1-2: new high-speed USB device number 27 using xhci_hcd
[ 6022.884321] usb 1-2: New USB device found, idVendor=1d6b, idProduct=0102, bcdDevice= 1.00
[ 6022.888839] input: AT Camera Emulation: UVC Camera as /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/input/input39
It looks like the most essential distinction between my host and NUC setup is PCH model. Are XHCI PCH 300-series is fully compatible with USB 2.0 spec? Should I update some kind of the SW? I used the latest NUC 8 BIOS and I tried Ubuntu 16 HWE kernel 4.15 and also Ubuntu 18 with 5.0.6 kernel.
You could see my answers below:
1- You have a UP board that emulates a HS UVC camera
Yes, also I should to say that isochronous transaction is used for video streaming.
2- When you connect this board directly into the NUC8i7BEH2, the device is recognized by the Operating System, I see dmesg: new high-speed USB device number using xhci_hcd
Yes, it's always recognized.
3- The camera emulator fails to start video streaming.
It takes some time for the setup path in emulator to start stream. When the NUC 8 host send to my emulator start stream reauest via SET INTERFACE packet, my emulator replies with NAK on STATUS for this host packet, which means that request is in progress. After that in 5 seconds interval USB host should send another STATUS packet and my emulator should reply on it with another NAK or ACK, which in this case means stream is started. It's how the things should work and how it works with NUC 7.
But in NUC 8 case emulator didn't get second STATUS packet in 5 seconds, so as i could see the issue is in that NUC didn't receive NAK, which was surely sent on the device side, or it missed to send second STATUS packet.
Did you check if any other functionality of the "camera" work?
Yes, the camera successfully reports with possible configuration and supported controls. The issue is in the final setup phase.
4- I see that you are trying with Ubuntu*. Did you try Windows 10 by any chance?
Yes, I've just ended to test it. I could report now that the emulator works fine with NUC 8 + Win 10 without any USB hubs.
5- Did you try an actual camera? if yes, can you please provide me with the Brand and Model?
My team have some issues which looks like unstable connection with Leopard Imaging LI-USB30-AR023ZWDR camera module. But I haven't access to it and couldn't approve is it related one to the emulator issue. Also tried ELP-USBFHD01M-MF40 camera module, but the stream was started perfectly with it.
What is a linux BKC for the NUC 8?