Teensy 4.0 Locks up sending udp

Teensy 4.0 with w5500 ethernet freezes when you call sendPacket using UDP:

Code:
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>

byte g_mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 42
};
IPAddress g_ip(10, 1, 10, 42);
IPAddress g_clientIP(10, 1, 10, 10);
unsigned int g_clientPort = 1337;
EthernetUDP g_UDP;

typedef struct
{
  char startChar = 'd';
  byte packetNumber = 0;
  uint16_t frameNumber = 0;
  uint16_t dataSize;
  uint16_t dataOffset;
} dataPacket;
dataPacket g_header;

byte data[1024] = {127};

void setup() {
  // put your setup code here, to run once:
  while (!Serial)
  {
    delay(100);
  }
  Serial.begin(115200);
  Ethernet.begin(g_mac, g_ip);
  //Ethernet.setRetransmissionCount(0);
  //Ethernet.setRetransmissionTimeout(10);
  Serial.println(Ethernet.linkStatus());
  Serial.println(Ethernet.hardwareStatus());
}

void loop() {
  int next = millis() + 1000;
  int success = 0;
  // put your main code here, to run repeatedly:
  do
  {
    success = g_UDP.beginPacket(g_clientIP, g_clientPort);

     Serial.print(".");

    //beginPacket fails if remote ethaddr is unknown. In this case an
    //arp-request is send out first and beginPacket succeeds as soon
    //the arp-response is received.
  }
  while (!success && ((signed long)(millis() - next)) < 0);
  success = g_UDP.write((byte*)&g_header, sizeof(dataPacket));

  Serial.print("bytes written: ");
  Serial.println(success);
  success = g_UDP.write((byte*)data, 1024);

  Serial.print("bytes written: ");
  Serial.println(success);

  success = g_UDP.endPacket(); //<< never returns
  if (success)Serial.print("sent!");

  delay(1000);
}
 
Back
Top