Custom Teensy 4.1 debug serial Comms (Code 43)

Ive designed and assembled my own teensy 4.1 with ethernet, and USB-C instead of micro. The Bootloader flashes the blink script to the memory and it executes properly which is the most success I've had in months, I'm ecstatic!

However my windows PC wont recognize the teensy and gives the 'error code 43, descriptor failed' in the USB serial list with no COM Ports available. I have tried on another windows PC but not success and i dont believe it to be the cable. I know how elusive this code 43 can be and have tried all the traditional ways of fixing it but with this being a custom job no success.

I've already checked the USB-C additions and can rule them out, the CC1 and CC2 resistors are correct and the layout as far as i know is correct. i based the layout and design off of this custom Teensy 4.1 design which the maker has confirmed it works.

when pressing the program button on the board the bootloaders LED blinks dim at a constant rate, which is it attempting serial communication to the PC which it doesn't receive. it wont get out of this program mode until i hard reset the board which just rewrites the blink code. To my understanding pin 6 (TDO) and 7 (TDI) on the bootloader are responsible for confirming USB connection to the PC.

I'm not fully versed in JTAG so i wanted to know, what should i see on these pins when probed? when the blink sketch is active OR attempting Communication they are at 1-10mV's, during hard reset flash to the memory TDO is at ~3.3V and TDI is ~2V. is this correct for a functioning design? i haven't got any official boards so i cant check them unfortunately.

My two suspicions for failure at this point is between:
1. the traces between USB Port and the mcu which followed differential pairing rules, but may not be appropriate.

2. communication between the MCU and the bootloader, i know flashing works so i believe the only pins not to rule out are pins 6 and 7 on the bootloader.

If some one could explain to me the bootloaders steps in communicating with the MCU and the PC when attempting to program this would help a lot in solving the issue, i am so close to having a fully working board, and I'm dying to test out the Ethernet design.

my Github link is here which contains all the files, the image is my board overview. the host USB is USB 1 and U3 is the bootloader. thankyou for any help as I've been struggling with this all week
1746665548030.png
 
This sounds like a problem with your USB port/traces rather than anything to do with the bootloader.
You say USB1 is the host usb, so USB2 is the port you're trying to connect to the PC? That looks backwards: USB1 has pulldowns on the CC pins so it's a device port, while USB2 has pullups to act as a host port.
I'm also a bit concerned that the USB data lines for both ports seem to be connected to GND and VCC via diodes (D1 and D13)? That seems like it could cause issues.
 
Thanks for the reply, I misspoke when I said host, I’ve been using USB 1 the whole time. The diodes are for ESD protection on the data lines, I believe the teensy 4.1 schematic has them as the TPD35014. The custom teensy I based my board on also used them and they worked according to the creator. The diodes are the SP0503BAHTG for reference.

I’ve tested with a probe the continuity between the D+ and D- on my usb cable to the pcb and they are all fine, and on a blank board I’ve proven continuity aswell to the BGA pins.

Would it be worth splicing a micro usb cable and soldering the data and gnd wires to their nearest pads just to confirm that it’s not the port?
 
TPD35014 supports USB 2 speeds (according to datasheet).
SP0503BAHTG supports USB 1.1 speeds (according to datasheet).

Yank SP0503BAHTG off your pcb and try again.
 
As I mentioned on your other question, slow & steady 1 second blinking on the red LED means the bootloader is running, but it's heard absolutely no USB communication. JTAG must be ok for the bootloader program to be running and giving you this slow steady blink. Focus your efforts on the USB traces and connectors and cable.

As a first quick check, try measuring the voltage on the D+ signal while no cable is connected, and when it connects to your PC. Since the bootloader is running, it should have turned on the 1.5K pullup on D+. Without a PC connected, you should see approx 3.3V. When you connect a PC, the voltage should drop slightly, since your PC ought to have 10K pulldown resistors so the voltage you'll observe is a resistor divider of 1.5K and 10K.

Checking D- is harder. You might need to watch both with a scope. Signaling at 480 Mbit involves much lower voltage (actually it's current into 45 ohms) so don't expect to see a tall 3.3V waveform. Also keep in mind USB uses 3 states (J, K, SE0) so don't expect the pins to always be inverse voltage. During idle time you should see both low. But there should always be activity every 1ms or 125us where both do bursts of fully differential J/K states. Mainly you just looking to see whether both pins are really connected to both sides.
 
As I mentioned on your other question, slow & steady 1 second blinking on the red LED means the bootloader is running, but it's heard absolutely no USB communication. JTAG must be ok for the bootloader program to be running and giving you this slow steady blink. Focus your efforts on the USB traces and connectors and cable.

As a first quick check, try measuring the voltage on the D+ signal while no cable is connected, and when it connects to your PC. Since the bootloader is running, it should have turned on the 1.5K pullup on D+. Without a PC connected, you should see approx 3.3V. When you connect a PC, the voltage should drop slightly, since your PC ought to have 10K pulldown resistors so the voltage you'll observe is a resistor divider of 1.5K and 10K.

Checking D- is harder. You might need to watch both with a scope. Signaling at 480 Mbit involves much lower voltage (actually it's current into 45 ohms) so don't expect to see a tall 3.3V waveform. Also keep in mind USB uses 3 states (J, K, SE0) so don't expect the pins to always be inverse voltage. During idle time you should see both low. But there should always be activity every 1ms or 125us where both do bursts of fully differential J/K states. Mainly you just looking to see whether both pins are really connected to both sides.
TPD35014 supports USB 2 speeds (according to datasheet).
SP0503BAHTG supports USB 1.1 speeds (according to datasheet).

Yank SP0503BAHTG off your pcb and try again.
The Data lines behaved how you said when i probed them but when i pulled off the ESD diodes it worked perfectly. thanks so much for all the help everyone, i have finally made my own custom teensy and can't wait to expand on this knowledge for bigger and better things!
 
Good to hear you got it working.
@jmarsh had the right hint. I merely looked up the datasheets.

Maybe you'll find another ESD footprint compatible device with USB 2 compatibility.
 
Good to hear you got it working.
@jmarsh had the right hint. I merely looked up the datasheets.

Maybe you'll find another ESD footprint compatible device with USB 2 compatibility.
after speaking to the guy who initially designed the custom layout, he also had difficulties with the SP0503's which is why he stopped using them! but unfortunately didnt update his design with the component changes, and now uses the SP3003-02JTG diodes which actually work.
 
Back
Top