Teensy 4.1 no longer being recognized as a USB device

QuantX

Member
I recently purchased a Teensy 4.1 and began using it on Linux at first with Arduino and then PlatformIO. I was using the Teensy to read data from a USB device using the USBHost_t36 library then sending data out the other USB port (the builtin MicroUSB) in a different format. This worked fine when testing on my Linux machine however when I connected my Teensy the target device it stopped working. Upon reconnecting the Teensy to my Linux laptop it was no longer being recognized as a valid USB device.

The following is from: /var/log/syslog
Code:
[13043.483891] usb usb1-port3: Cannot enable. Maybe the USB cable is bad?
[13044.391867] usb usb1-port3: Cannot enable. Maybe the USB cable is bad?
[13044.391967] usb usb1-port3: attempt power cycle
[13045.615817] usb usb1-port3: Cannot enable. Maybe the USB cable is bad?
[13046.515789] usb usb1-port3: Cannot enable. Maybe the USB cable is bad?
[13046.515886] usb usb1-port3: unable to enumerate USB device

The Teensy was being powered by the MicroUSB port so I probed with a voltmeter and was able to see both 5V and 3.3V indicating that the fuse F1 was intact and that this was likely not an power supply issue. Just to be absolutely sure, I disconnected my Teensy 4.1 and connected a Teensy 3.5 instead using the same cable and the Teensy 3.5 functioned fine.

At this point I preformed the 15 second hard-reset by holding down the programming button and upon completion the Teensy started running the default blinking light program. However, the Teensy still refused to be recognized as a valid USB device and /var/log/syslog continued to display the above message even when I tried to manually enter programming mode. At this point I started to suspect that something might be wrong with the bootloader so I preformed a wireshark capture of the Teensy.

View attachment teensy4.1_problems.zip

The attached wireshark capture was preformed using the following conditions:
1. Ensure nothing is connected to the USB Bus 1.
2. Start a wireshark capture of USB Bus 1 and observe that no traffic is present on the bus.
3. Connect the Teensy 4.1 to USB Bus 1 while holding down the programming button.
4. Release the programming button only after the Teensy 4.1 has power on.
5. Stop the capture once all traffic on USB Bus 1 has stopped.
 
Not reading the zip to explore the wireshark data ...

safe to assume there was some traffic after the 15s Restore and blink? The Teensy will come online as a HID device IIRC.

At that point with a working USB port that doesn't get claimed by other linux software and a cable better than good enough for slower T_3.6, but up to the 480 Mbps speed to reliably connect to the T_4.1.

Is this being done with nothing connected to the USB Host pins.
 
The test was preformed with nothing connected to the Teensy. I used the same generic 3ft cable that worked the first time. Wireshark definitely detected some traffic after the Teensy was connected, but nothing that looked like HID traffic.
 
Did the Wireshark capture collect data when the Teensy was connected?

Assuming Arduino IDE in use?

Open a Blink.ino and do a verify build for T_4.1 board selected with USB type Serial

With Verify build done the Teensy loader should be open.
In Teensy Loader do : Help / Verbose Info - and Clear the window text

With Teensy connected Press the Button.

This should show the connection and upload process of the blink sketch.

This is an edited Blink - but will result in output from Teensy to the Serial Monitor:
Code:
/*    Blink without Delay    https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay */
const int ledPin = LED_BUILTIN;  // the number of the LED pin
int ledState = LOW;  // ledState used to set the LED
unsigned long previousMillis = 0;  // will store last time LED was updated
const long interval = 1500;  // interval at which to blink (milliseconds)

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin( 230400 );
  Serial.println("\n\t" __FILE__ " " __DATE__ " " __TIME__);
}
uint32_t lCnt = 0;
int N[10] = { 100621, 100649, 100669, 100673, 100693, 100699, 100703, 100733, 100741, 100747 };

void loop() {
  lCnt++;
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      Serial.print(currentMillis);
      Serial.print('\t');
      Serial.println(lCnt);
      lCnt = 0;
      ledState = LOW;
    }
    digitalWrite(ledPin, ledState);
  }
  if (!isPrime(N[lCnt % 10]) )
    Serial.println("Never Fail???");
}

// Function check whether a number is prime or not
int isPrime(int n)
{
  // Check if n=1 or n=0
  if (n <= 1)
    return 0;
  // Check if n=2 or n=3
  if (n == 2 || n == 3)
    return 1;
  // Check whether n is divisible by 2 or 3
  if (n % 2 == 0 || n % 3 == 0)
    return 0;
  // Check from 5 to square root of n
  // Iterate i by (i+6)
  for (int i = 5; i * i <= n; i = i + 6)
    if (n % i == 0 || n % (i + 2) == 0)
      return 0;
  return 1;
}
 
Sorry I didn't communicate this clearly enough. It used to work fine on my laptop but now I can't even get the Teensy 4.1 to show up as a USB device on Linux anymore. I'm using the same cable and everything. It won't show up under lsusb and /var/log/syslog prints the message from my original post whenever I try and connect the Teensy 4.1.

There's nothing I can do from Arduino because it claims that there aren't any boards connected to my PC. Which isn't surprising since Linux is refusing to even recognize the Teensy 4.1 as a valid USB device let alone an HID or USB Serial device. I posted the wireshark dump in hopes that someone more familiar with the Teensy 4.1 bootloader can tell me why Linux is refusing to recognize it as a valid USB device.
 
Any chance it's power related? Maybe Teensy + other stuff is just drawing too much current? (admittedly a blind guess)

You could try placing a powered USB hub between your PC and Teensy?
 
It's not a power draw issue. Even with nothing connected to the Teensy 4.1 my Linux machine refuses to recognize it. It just gives the same message in /var/log/syslog about refusing to enumerate the device.

I've also tried connecting the Teensy to my Windows machine using both the same a cable that worked before and a different cable just in case that was the issue. However, neither of those worked and the red programming light just continues to blink endlessly even though I had Teensy Programmer application open.
 
No pattern. The RED LED blinks about once a second with a 50% duty cycle. I also verified that I was able to get continuity on both the D+ and D- lines between the male side of my USB A cable and the two test pads on the bottom side of the Teensy below the MicroUSB port. So the MicroUSB port wasn't damaged.
 
Last edited:
Slow 50% duty cycle blink on the red LED means it is running in bootloader mode but has seen no USB communication.

I know you've said you checked your USB cable, so I can't explain why this is happening. All I can do it tell you what that blink means. For reasons not understandable given the info you've said, your Teensy is not hearing any USB data. Even just the first descriptor read as the very first step where your PC tries to detect the device is enough to shut off that blinking.
 
I've already ordered another Teensy 4.1, so I think I can finally write this one off although I have absolutely no idea what happened to it. My best guess is that I somehow managed to damage the Cortex-M7's USB transceiver, although I find that surprising given my use case. The target machine was an original 2001 Microsoft XBOX and while it does use a non-standard USB port, it is still fully USB 1.1 compliant. Other people have had great success with interfacing a Teensy 4.1 with this particular device so I can only assume that my specific situation was a fluke. Other than potentially drawing too much power through the Teensy, I'm not sure what exactly would have damaged it in this way.

I'll update this thread once I get the new Teensy 4.1 and am able to try it out.
 
Did you update the Teensy board package before you got into those issues? If I try above 1.57.2, I lose the USB connection and even Arduino IDE cannot find the board. If I get back to 1.57.2 and do the very long process (>15s) to reset the Teensy to the default blinking led firmware then I can program my firmware without faulty USB connection I have with 1.58.x or later.
 
No I did not update the Teensy.

Also I got the new Teensy 4.1 in and it works fine. I have no idea why the last one died. I'm going to just chalk it up to a random fluke.
 
Back
Top