TnF
Junior Member level 3
Hello. To cut this story short, after spending a full day trying to find the cause of the issue i will try not to bother you with many details.
I've designed a PCB prototype for a diy computer keyboard. The board has 2 USB-C "input" ports, one on the left and one on the right so you can route the cable through your desk whichever side you prefer.
This "input" connection, is identical for both ports of which are connected directly in parallel (yes i know it is a bad design, let me know your recommendations below). This goes directly to a USB hub controller which connects the main controller as one of the devices, and the rest are used as "output" type-A ports. The only difference between these 2 ports is the length of the traces to the USB hub IC as seen in this photo:
Ignore the test point switch, it's only used to bypass the usb hub controller; routing is wrong for a DPDT switch i was planning on using so i use jumpers on header pins instead.
Initially i was connecting my cable into usb-c port 2 (the one to the right), and i was getting this error under the windows device manager:
Unknown USB Device (Device Descriptor Request Failed)
“Windows has stopped this device because it has reported problems. (Code 43)
A request for the USB device descriptor failed.”
After much time debugging the IC, external/internal crystal, usb-c ports, re-soldering new ones etc, i decided to use the other usb-c port on the left (port 1). Amazingly everything worked! Trying back the other port didn't work again. The other one was working perfectly and i was able to connect devices onto it without any issues. I couldn't understand what was going on. The only difference was the trace length. Long one worked, short one didn't. Then i decided to cut the traces of the long working one to see what was going to happen. I cut them here leaving only a few cm's of traces left:
The other port started working normally! To confirm this wasn't a fluke i soldered some long wires into the hub input data lines to act as antennae and i can confirm depending on the orientation i put them it will cause problems with the USB connection. Worth noting if i connect my teensy 3.2 through these traces it can connect to both ports without any issue. It seems this usb hub controller is too sensitive to interference.
I used this controller after someone recommending it to me over discord:
- CoreChips SL2.1A https://lcsc.com/product-detail/USB_CoreChips-SL2-1A_C192893.html https://datasheet.lcsc.com/szlcsc/CoreChips-SL2-1A_C192893.pdf
Funnily enough it is out of stock now and possibly discontinued.
It seems to be a copy/simplification of Terminus FE1.1s, but i like the simplicity of 16-pins only and the fact that it is a package you can hand solder without a hot air station (of which i have one).
I am going to place an order from Farnell (europe) soon so i may try one of these instead:
https://export.farnell.com/w/c/semi...ort&range=inc-in-stock|exc-delivery-surcharge
- MICROCHIP USB2514B https://www.farnell.com/datasheets/2032129.pdf
- MICROCHIP USB2504 https://www.farnell.com/datasheets/1845982.pdf
- CYPRESS CY7C65642 https://www.farnell.com/datasheets/2309553.pdf
- TI TUSB2046BVF https://www.farnell.com/datasheets/2032129.pdf
Now that i found the issue how do you recommend tackling this? I am not an electrical engineer. I'm a mechanical one. I don't wan't the end user to have to select the port they want to use through a switch. Just connect the cable to whichever port you prefer. Can i solve this through filtering? Or should i just change the controller IC to a different one and hope for the best?
I've designed a PCB prototype for a diy computer keyboard. The board has 2 USB-C "input" ports, one on the left and one on the right so you can route the cable through your desk whichever side you prefer.
This "input" connection, is identical for both ports of which are connected directly in parallel (yes i know it is a bad design, let me know your recommendations below). This goes directly to a USB hub controller which connects the main controller as one of the devices, and the rest are used as "output" type-A ports. The only difference between these 2 ports is the length of the traces to the USB hub IC as seen in this photo:
Ignore the test point switch, it's only used to bypass the usb hub controller; routing is wrong for a DPDT switch i was planning on using so i use jumpers on header pins instead.
Initially i was connecting my cable into usb-c port 2 (the one to the right), and i was getting this error under the windows device manager:
Unknown USB Device (Device Descriptor Request Failed)
“Windows has stopped this device because it has reported problems. (Code 43)
A request for the USB device descriptor failed.”
After much time debugging the IC, external/internal crystal, usb-c ports, re-soldering new ones etc, i decided to use the other usb-c port on the left (port 1). Amazingly everything worked! Trying back the other port didn't work again. The other one was working perfectly and i was able to connect devices onto it without any issues. I couldn't understand what was going on. The only difference was the trace length. Long one worked, short one didn't. Then i decided to cut the traces of the long working one to see what was going to happen. I cut them here leaving only a few cm's of traces left:
The other port started working normally! To confirm this wasn't a fluke i soldered some long wires into the hub input data lines to act as antennae and i can confirm depending on the orientation i put them it will cause problems with the USB connection. Worth noting if i connect my teensy 3.2 through these traces it can connect to both ports without any issue. It seems this usb hub controller is too sensitive to interference.
I used this controller after someone recommending it to me over discord:
- CoreChips SL2.1A https://lcsc.com/product-detail/USB_CoreChips-SL2-1A_C192893.html https://datasheet.lcsc.com/szlcsc/CoreChips-SL2-1A_C192893.pdf
Funnily enough it is out of stock now and possibly discontinued.
It seems to be a copy/simplification of Terminus FE1.1s, but i like the simplicity of 16-pins only and the fact that it is a package you can hand solder without a hot air station (of which i have one).
I am going to place an order from Farnell (europe) soon so i may try one of these instead:
https://export.farnell.com/w/c/semi...ort&range=inc-in-stock|exc-delivery-surcharge
- MICROCHIP USB2514B https://www.farnell.com/datasheets/2032129.pdf
- MICROCHIP USB2504 https://www.farnell.com/datasheets/1845982.pdf
- CYPRESS CY7C65642 https://www.farnell.com/datasheets/2309553.pdf
- TI TUSB2046BVF https://www.farnell.com/datasheets/2032129.pdf
Now that i found the issue how do you recommend tackling this? I am not an electrical engineer. I'm a mechanical one. I don't wan't the end user to have to select the port they want to use through a switch. Just connect the cable to whichever port you prefer. Can i solve this through filtering? Or should i just change the controller IC to a different one and hope for the best?