- Raspberry Pi Pico implementa transmisión Ethernet de 100 Mbit/s por software sin hardware dedicado
- El desarrollador Steve Markgraf usa PIO y DMA para realizar codificación MLT-3, codificación de línea 4B5B y scrambling
- Esta implementación funciona a una velocidad de símbolo de 125 MHz y logra aprox. 11 MB/s de transferencia por UDP
- Los ejemplos incluyen streamer de ADC, contador y una demo de audio basada en PCM1802, con soporte tanto para RP2040 como RP2350
- Un avance técnico que muestra el potencial de streaming de datos de alta velocidad y aplicaciones de instrumentación con microcontroladores de bajo costo
Implementación de Ethernet bit-bang de 100 Mbit/s en RP2040 y RP2350
- Steve Markgraf implementó un transmisor Fast Ethernet de 100 Mbit/s completamente por software a través del proyecto Pico-100BASE-TX
- Compatible tanto con RP2040 como con RP2350 (Pico 2)
- Usa PIO (Programmable I/O) y DMA para manejar codificación MLT-3, codificación de línea 4B5B y scrambling
- Como resultado, permite streaming de aprox. 11 MB/s por UDP, y se demostró transmisión en tiempo real de audio y datos de ADC
- Esta implementación es solo de transmisión (proof of concept) y no debe conectarse directamente a equipos PoE
- Se recomienda aislamiento mediante transformador de pulsos o switch Ethernet
Antecedentes del proyecto
- Hace 3 años, el proyecto Pico-10BASE-T de kingyoPiyo llamó la atención al implementar Ethernet de 10 Mbit/s con solo unas cuantas resistencias
- En 2023, una implementación de USB bit-bang amplió los límites de rendimiento de PIO en el RP2040
- Este proyecto continúa esa línea y explora el potencial del hardware definido por software al alcanzar 100 Mbit/s
Repositorio de GitHub y ejemplos
- Repositorio de GitHub: Pico-100BASE-TX
- Ejemplos incluidos:
- Contador
- Streamer de ADC integrado
- Demo de audio PCM1802 (75 kHz)
- Puede compilarse con el Pico SDK estándar y es compatible tanto con RP2040 como RP2350
Importancia técnica
- El punto clave es haber implementado transmisión Ethernet de 100 Mbit/s usando solo un microcontrolador, sin chip PHY dedicado
- Muestra la posibilidad de desarrollar dispositivos de adquisición de datos y streaming de alta velocidad y bajo costo
- Plantea el potencial de expansión del enfoque de hardware definido por software (Software-defined hardware)
1 comentarios
Comentarios de Hacker News
Esta es la típica historia del ciclo de la computación
Al principio se procesa en la CPU, luego se mueve a una tarjeta dedicada fuera del bus, y cuando esa tarjeta se vuelve lenta, se le mete otra vez una CPU dentro de la tarjeta, y al final se termina metiendo lógica especializada dentro de la CPU para optimizar la comunicación entre buses
En unos 10 años, parece que vamos a estar en una era en la que se reducirá un núcleo de RPi para meterlo dentro de un chiplet y programar drivers de red de terabits con un modelo de CPU de propósito general
Design of Display Processors (1968)
Los MCU de hoy en día son realmente impresionantes. Por unos cuantos dólares puedes comprar un microcontrolador potente
Antes se necesitaba una tarjeta dedicada como un TCP Offload Engine (TOE), pero ahora un chip pequeño puede hacer la mayor parte de esa función
El proyecto de leer directamente un micrófono PDM con PIO está buenísimo
microphone-library-for-pico
Esto se parece más a control de alta velocidad usando PIO que a ‘bit-banging’
Parece que esto solo cubre transmisión (TX). ¿La recepción (RX) no sería la parte mucho más difícil?
También sería interesante hacer un NIC Ethernet por USB basado en esto
En especial, se podría aplicar para imitar un NIC gigabit compatible con Nintendo Switch, y hacer que funcione a 100Mbps si falla la negociación
Como referencia, los RPi iniciales (rev B) daban alrededor de 6MB/s por SSH. Es interesante como punto de comparación
El trabajo de Steve Markgraf es realmente impresionante.
Es conocido por el proyecto High Speed Data Acquisition over HDMI, y usó un Pico2 como transmisor para alcanzar hasta 175MB/s
También existe una versión hsdaoh-rp2350
Pero parece que 100Mbit es el límite para hacerlo con bit-banging. 1Gbit usa un reloj de 125MHz, pero como es full duplex, hace falta cancelación de eco.
El siguiente reto probablemente sería implementar un PHY RGMII usando un RTL8211 PHY de $1
El reloj es de 125MHz, pero como usa DDR, el PIO tendría que funcionar a 250MHz. Probablemente sería posible con un poco de overclock
¿Habría sido posible esto sin PIO?
En la práctica, el PIO es el ‘periférico definitivo’, así que llamarlo bit-banging es discutible.
Para manejar 100Mbit/s solo con CPU, haría falta un MCU de alrededor de 500MHz, y ahí empezarían problemas con las características del bus o la latencia de caché
“Raspberry Pi Pico Bit-Bangs 100 Mbit/S Ethernet”: mejor usar ohmios que unidades de Siemens
Me confundió ver GNU Radio en la pantalla. El RPi tiene la alimentación, dos líneas TX y una tercera línea; ¿qué es eso?