Ya puse en marcha mi placa con UDP, también instalé Wireshark.
He compilado mi aplicativo sobre un Kinetis MK64 que controla por SPI un módulo Ethernet W5500. La librería para UDP es la que usan los Teeensy con Arduino.
En mi placa he cometido un pequeño error, aunque eso no debería impedir que funcione, he conectado al revés uno de los dos led testigos del conector RJ45.
De momento no veo el tráfico en el Wireshark, no se si requiere alguna configuración especial, simplemente en la ventana principal he tecleado udp para filtrar.
Como no tenía claro si mi placa estaba funcionando, simplemente le he hecho un ping desde linea de comandos de mi PC a la IP que le conf¡guré, la 192.168.1.177 y responde, luego la he cambiado a la 192.168.1.189, y también responde. No hay respuesta si tecleo otras IPs, osea que el módulo Ethernet W5500 ha sido configurado desde el Kinetis por SPI y parece funcionar.
También entré al modem router para abrir el puerto 8888, que es el que tengo configurado en el aplicativo que rueda en el Kinetis. En el programa he configurado que se envíe el paquete UDP a la dirección 192.168.1.255, por lo del broadcast, aunque también lo probé con la dirección IP local de mi PC, la 192.168.1.3.
Ahora mismo no se si tengo algo mal en la configuración UDP de mi programa o es que no estoy configurando bien Wireshark. Una cosa rara, si conecto mi placa directo al PC con el cable Ethernet, el ping no responde, pero si conecto la placa a través del modem router si que responde.
Este es el fuente del programita que estoy rodando en el Kinetis:
//******************************************************************************
//******************************************************************************
//******** Programa TEST UDP Kinetis MK64 **************************************
//******************************************************************************
//******************************************************************************
#include <SPI.h>
#include <Ethernet2.h>
#include <EthernetUdp2.h>
#include "Watchdog.h" // Watchdog, añadido
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 189); // La IP de esta placa
IPAddress IP_Remote(192, 168, 1, 255); // IP para Broadcast
unsigned int localPort = 8888; // local port to listen on
// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;
// Patilla Chip Select en 6 (PTD4)
#define W5500_CS 6
//*** Leds DEBUG y test actividad **
int Led1 = 37; // PTC10, DEBUG
int Led2 = 38; // PTC11, DEBUG
int state = 0; // Variable para parpadear LED (toggle)
//**********************************************************
//**********************************************************
//********** Configuracion inicial ************************
//**********************************************************
//**********************************************************
void setup() {
// Inicializa pines PTC10 y PTC11, para leds rojo y verde en placa
pinMode(Led1, OUTPUT); // pin37 de Arduino/Teensy, LED ROJO en PTC10
pinMode(Led2, OUTPUT); // pin38 de Arduino/Teensy, LED VERDE en PTC11
// Configuro pines alternativos SPI
SPI.setMOSI(7);
SPI.setMISO(8);
SPI.setSCK(14);
Ethernet.init(W5500_CS); //Configuro el chip select alternativo en pin6 (PTD4)
// start the Ethernet and UDP:
Ethernet.begin(mac, ip);
Udp.begin(localPort);
Serial.begin(9600);
}
//**********************************************************
//**********************************************************
//********** Bucle Principal ******************************
//**********************************************************
//**********************************************************
void loop() {
// Añado control de Watchdog
kickWatchdog();
// DEBUG Parpadeo LED en PC11, led verde en placa
state++;
if (state==1) digitalWriteFast(Led2, HIGH);
if (state==15) {digitalWriteFast(Led2, LOW);}
if (state== 30) state=0;
// DEBUG, envia un paquete UDP, puerto 8888
// Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.beginPacket(IP_Remote, localPort);
Udp.write("hello");
Udp.endPacket();
delay(10);
}