-
Envío de paquetes Ethernet
- El autor quería crear una serie llamada "Networking from scratch" y comenzó un proyecto para construir una pila TCP/IP en un microcontrolador.
- Esta entrada del blog comparte la historia de haber enviado con éxito el primer paquete Ethernet y las experiencias con errores y depuración durante el proyecto.
-
Microcontrolador
- El microcontrolador utilizado es el STM32F401, basado en ARM Cortex-M4 y capaz de operar hasta 84MHz.
- Tiene 96KiB de RAM, lo que proporciona suficiente capacidad para procesar varios paquetes.
-
Ethernet
- Ethernet es un concepto que abarca diversas tecnologías y estándares, e incluye hardware a nivel físico, formatos de señal, estrategias para manejar colisiones en el bus, diseño de tramas y más.
- En este proyecto se usa el chip W5100 de Wiznet, que incorpora una pila TCP/IP por hardware.
-
Problema 1: Gritar en el vacío
- Se escribió un controlador para comunicarse con el chip W5100, pero la comunicación no funcionaba porque las señales SPI estaban conectadas incorrectamente.
- El problema se produjo porque el encabezado ICSP del shield de Arduino conectaba mal las señales SPI, y se retrabajó la placa para corregirlo.
-
Problema 2: La esencia de la comedia
- Incluso después de conectar correctamente las señales SPI, la transmisión de paquetes Ethernet seguía sin funcionar bien.
- Se usó un analizador lógico para examinar las señales digitales y se resolvió un problema de temporización en la señal de selección de chip, logrando así una comunicación exitosa.
-
Problema 3: Paquete desconocido
- En Wireshark aparecía un paquete incorrecto en lugar del paquete que se había enviado.
- Analizando el problema con ayuda de la biblioteca de Arduino, se encontró y corrigió un error que escribía datos en una dirección de memoria equivocada.
-
La moraleja de la historia
- Enviar un paquete Ethernet puede parecer un logro pequeño, pero los errores y la experiencia de depuración en el proyecto tienen mucho valor.
- La depuración y la creación de herramientas son partes importantes del proceso de desarrollo, y es fundamental entender el sistema mediante exploración y experimentación.
- El proyecto sigue en marcha, abordando problemas y errores en niveles de abstracción más altos.
1 comentarios
Comentarios de Hacker News
Siempre vale la pena crear herramientas y explorar la depuración. Sin embargo, mucha gente no entiende esto y, especialmente en procesos de desarrollo como JIRA, a menudo no ve el valor de la exploración.
La capacidad de crear herramientas pequeñas es parte central del programador 10x, y a menudo es un arte que se practica en las sombras.
Es el inicio de una serie para construir desde cero la pila de TCP/IP y tramas Ethernet en un microcontrolador. Usa el chip W5100 para manejar TCP/IP y admite tramas Ethernet preconstruidas.
Está cambiando su carrera hacia la ingeniería FPGA y enfocándose en Ethernet, y entender las abstracciones de redes ha sido muy valioso.
Hay una opinión de que, en lugar de usar un STM32F401 y un shield Ethernet W5100, sería mejor usar una placa STM32F407 y una placa Ethernet PHY barata.
La funcionalidad Ethernet por lo general viene incluida como un periférico integrado dentro del microcontrolador.
Fue la primera vez que vio la nueva denominación de MOSI/MISO como main out/subordinate in, y no se entiende bien la alternativa COPI/CIPO.
Para escribir una pila de red en Linux, se puede usar
socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)).La placa STM32 Nucleo trae Ethernet de 100 Mbps integrado, y el software STM32Cube recibe evaluaciones mixtas, pero ofrece ejemplos que funcionan.
Ethernet trabaja con tramas; los paquetes son un concepto de IP.
Se puede considerar el ENC28J60, un 'Stand-Alone Ethernet Controller with SPI Interface', aunque como no tiene una pila TCP/IP por hardware, requiere una implementación por software.