Teensy 4.1 Ethernet link status won't connect


New member

I've just finished soldering the provided ethernet kit for the Teensy 4.1, and began trying to test it. I connected the breakout ethernet board to the teensy via the ribbon cable, and began some basic tests (source code down below). However, the program fails at the linkStatus check, and additionally I notice the light on the ethernet is port is not lighting up - the ethernet cable itself is fine, and works for a similar Arduino Uno program.

I'm wondering what the best way to troubleshoot this is. I'm not very experienced with such fine soldering, so maybe my soldering job (pictures attached) damaged something? I have a spare ethernet kit, but would rather try and diagnose what I did wrong before possibly repeating that mistake on my remaining spare. I should note that the ribbon cable connection seems pretty loose to me, if that matters.

#include <SPI.h>
#include <NativeEthernet.h>

const int led = LED_BUILTIN;
byte mac[] = {
  0xA4, 0xE9, 0xE5, 0x0F, 0xC3, 0x3D };

EthernetClient client;

void setup() {
  pinMode(led, OUTPUT);
  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
  if (Ethernet.linkStatus() == LinkOFF) {
    // Code fails here!
    Serial.println("Ethernet cable is not connected.");

Solder job:
Don't know if you are still messing with this, but it looks like your R- pin solder did not flow correctly.

Teensy 4.1 Ethernet link status won't connect - R- Pin.jpg
You need to start the Ethernet driver with Ethernet.begin() before the link state will work correctly. In QNEthernet, you don't need to specify the MAC address (because it internally reads the bullt-in one) and can use the `begin()` version with no arguments (for DHCP). With NativeEthernet (QNEthernet has the MAC versions of `begin()` too), you need to call `begin(mac)` with either the Teensy's built-in MAC address or something else of your choosing. There are equivalent methods if you instead want to use a static address configuration.

(I just tried NativeEthernet's LinkStatus example and it doesn't work unless `Ethernet.begin(mac)` is called in `setup()` with some 6-byte MAC address. It's the most similar example to your code above.)

In QNEthernet, the SNTPClient example shows a simple way of starting up the system (it then uses UDP). The ServerWithAddressListener example shows how to start the system using a listener approach for the link state and for address changed. I plan to add an upcoming "AppWithListenersTemplate" template example that shows a few ways of starting the system using the listener approach.

P.S. I love your username.