![]() ![]() Also the message that a new device is detected appears several times for a single time you plug in. As you can see the device is always given a new number and is not completely recognized. The above is the output after plugging in and out 3 times. usb 1-1: new full-speed USB device number 89 using xhci_hcd usb 1-1: new full-speed USB device number 65 using xhci_hcd usb 1-1: new full-speed USB device number 60 using xhci_hcd usb 1-1: new full-speed USB device number 32 using xhci_hcd usb 1-1: new full-speed USB device number 4 using xhci_hcd usb 1-1: new full-speed USB device number 104 using xhci_hcd usb 1-1: new full-speed USB device number 100 using xhci_hcd usb 1-1: new full-speed USB device number 96 using xhci_hcd usb 1-1: new full-speed USB device number 76 using xhci_hcd usb 1-1: new full-speed USB device number 75 using xhci_hcd However, the kernel gives a message that it detected a new device: sudo dmesg | tail Unfortunately, when we plug the board in Linux machine (kernel 4.4.14) USB port it is not detected. We are now trying to make USB CDC communication work. It's two different functions, only one of which can be used at once, that are both created by the same gadget.We are developing a custom board to control brushless DC motors. The other function is CDC-ECM and everyone else will use that. ![]() One function is RNDIS and Windows will use this. This appears as a two function USB device. Linux has a CDC-ECM / RNDIS combo gadget that is useful to wider compatibility. There is a non-standard USB device identification descriptor that Microsoft created (see the pattern here) that must be used to identify a RNDIS device to Windows so it will load the generic driver. One can't get Windows to load the included RNDIS drivers, without a INF file, using just the vendor and product ID, device class, etc. Microsoft doesn't include CDC-ECM drivers in Windows, but does have RNDIS drivers. That makes it really complex and hard for anyone else to be compatible with. They like to base stuff on top of older MS software, which is based on even older MS software, going all the way back to DOS. It's a hack based on NDIS, which is an old DOS and Windows 3.11 era network protocol from Microsoft. ![]() So they created RNDIS which isn't a standard and wasn't published. Microsoft decided to create a new Ethernet on USB protocol instead of using the standard that already existed (CDC-ECM). And if you look at the protocol, it's clearly different.ĬDC-ECM works out of the box on Linux hosts, MacOS, ChromeOS, and certain (mainly Samsung) Android phones. This means it was created before RNDIS existed, so it couldn't be based on RNDIS unless a time machine enters the picture. CDC-ECM is a standard that was created by USB-IF. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
December 2022
Categories |