I'm working on a custom board with an LPC1833 ARM and an SMSC HUB. This board accepts the connection of up to 6 peripherals. In ARM, it is configured USB0 as host and USB1 as device, using lib lpcusblib. I use USB1 for communication with PC (CDC) and USB0 for communication with peripherals (one peripheral at a time). Basically, when I connect a peripheral to the board, I use USB0 to get the descriptor and then switch it to the HUB. I tested it with several peripherals and they all work perfectly, except in a specific case, connecting a fingerprint and an NFC. In that case, when I'm getting the NFC descriptor, the USBD_STATUS_XACT_ERROR error is returned on the PC (analyzing USB1 over USBlyzer). From that moment, USB1 can no longer respond to the PC. I tested connecting other ARM peripherals with CDC communication on this board and they also no longer respond to the PC.
A few more comments:
- The problem always occurs connecting the fingerprint and then the NFC. If you connect the NFC and then the fingerprint, the problem does not occur.
- I tested on Windows XP, 7 and 10. The problem only occurs in Windows 7.
- If I replace the fingerprint with another manufacturer or with a webcam, the problem occurs.
- if I put the fingerprint and the NFC in another generic HUB, it works normally.
- changing my code to connect the devices directly in the HUB (without taking the descriptor through USB0), the problem does not occur.
- changing my application to connect the NFC direct with the HUB (without taking the descriptor through USB0), the problem does not occur.
- Changing my code to connect the direct fingerprint with the HUB (without taking the descriptor through USB0), the problem occurs.
Does anyone have any ideas?