- Raspberry Pi Pico implémente en logiciel une transmission Ethernet à 100 Mbit/s sans matériel dédié
- Le développeur Steve Markgraf utilise le PIO et le DMA pour réaliser le codage MLT-3, le codage de ligne 4B5B et le brouillage
- Cette implémentation fonctionne à une fréquence symbole de 125 MHz et atteint environ 11 Mo/s via UDP
- Les exemples incluent un streamer ADC, un compteur et une démo audio basée sur le PCM1802, avec prise en charge des RP2040 et RP2350
- Une avancée technique qui montre le potentiel des applications de streaming de données à haut débit et d’instrumentation avec des microcontrôleurs à bas coût
Implémentation d’un Ethernet bit-bang à 100 Mbit/s sur RP2040 et RP2350
- Steve Markgraf a implémenté, via le projet Pico-100BASE-TX, un émetteur Fast Ethernet à 100 Mbit/s entièrement en logiciel
- Compatible avec RP2040 et RP2350 (Pico 2)
- Utilise le PIO (Programmable I/O) et le DMA pour gérer le codage MLT-3, le codage de ligne 4B5B et le brouillage
- Au final, il permet un streaming d’environ 11 Mo/s via UDP, avec démonstration de transmission en temps réel d’audio et de données ADC
- Cette implémentation est réservée à l’émission (proof of concept) et ne doit pas être connectée directement à des équipements PoE
- Une isolation via transformateur d’impulsions ou switch Ethernet est recommandée
Contexte du projet
- Il y a trois ans, le projet Pico-10BASE-T de kingyoPiyo s’était fait remarquer en implémentant un Ethernet 10 Mbit/s avec seulement quelques résistances
- En 2023, une implémentation de USB bit-bang a repoussé les limites de performance du PIO du RP2040
- Ce nouveau projet s’inscrit dans cette continuité et explore les possibilités du matériel défini par logiciel en atteignant 100 Mbit/s
Dépôt GitHub et exemples
- Dépôt GitHub : Pico-100BASE-TX
- Exemples inclus :
- Compteur
- Streamer ADC intégré
- Démo audio PCM1802 (75 kHz)
- Peut être compilé avec le Pico SDK standard et est compatible avec RP2040 et RP2350
Portée technique
- Le point clé est l’implémentation d’une transmission Ethernet à 100 Mbit/s avec un simple microcontrôleur, sans puce PHY dédiée
- Le projet met en avant le potentiel de développement de dispositifs à bas coût de collecte de données rapide et de streaming
- Il souligne aussi l’extensibilité de l’approche software-defined hardware
1 commentaires
Commentaires sur Hacker News
C’est un exemple typique du cycle de l’informatique
Au début, on traite ça sur le CPU, puis on le déplace vers une carte dédiée hors du bus, et quand cette carte devient trop lente, on remet un CPU dedans, avant de finir par intégrer une logique spécialisée directement dans le CPU pour optimiser la communication entre bus
Dans dix ans, on réduira probablement un cœur de RPi pour l’intégrer dans un chiplet, et on programmera des pilotes réseau térabit selon un modèle de CPU généraliste
Design of Display Processors (1968)
Les MCU d’aujourd’hui sont vraiment impressionnants. Pour quelques dollars, on peut acheter un microcontrôleur puissant
Avant, il fallait des cartes dédiées comme les TCP Offload Engine (TOE), alors qu’aujourd’hui une petite puce accomplit l’essentiel de ce travail
Le projet qui lit directement un micro PDM via PIO est vraiment génial
microphone-library-for-pico
On est plus proche d’un pilotage haut débit via PIO que du « bit-banging » au sens strict
On dirait que ça ne traite que l’émission (TX). La réception (RX) doit être la partie vraiment difficile, non ?
Ce serait aussi intéressant d’en faire une NIC Ethernet USB
En particulier en imitant une NIC gigabit prise en charge par la Nintendo Switch, avec un basculement à 100 Mbps si la négociation échoue
À titre de comparaison, le RPi d’origine (rev B) atteignait environ 6 Mo/s en SSH. C’est intéressant comme point de repère
Les réalisations de Steve Markgraf sont vraiment impressionnantes.
Il est connu pour le projet High Speed Data Acquisition over HDMI, et il a utilisé le Pico2 comme émetteur pour atteindre jusqu’à 175 Mo/s
Il existe aussi une version hsdaoh-rp2350
En revanche, 100 Mbit est probablement la limite en bit-banging. Le 1 Gbit utilise une horloge à 125 MHz, mais comme c’est du full duplex, il faut aussi de l’annulation d’écho.
Le prochain défi sera sans doute d’implémenter un PHY RGMII à l’aide d’un PHY RTL8211 à 1 $
L’horloge est à 125 MHz, mais comme c’est du DDR, le PIO devrait fonctionner à 250 MHz. Ça semble possible avec un léger overclocking
Est-ce que ça aurait été possible sans PIO ?
Le PIO est en pratique le « périphérique ultime », donc l’appeler bit-banging est un peu discutable.
Pour traiter du 100 Mbit/s uniquement avec le CPU, il faudrait un MCU autour de 500 MHz, et là on commencerait à avoir des problèmes de caractéristiques de bus ou de latence de cache
« Raspberry Pi Pico Bit-Bangs 100 Mbit/S Ethernet » : quitte à choisir une unité Siemens, j’aurais préféré des ohms
J’ai été troublé en voyant GNU Radio à l’écran. Le RPi a l’alimentation, deux lignes TX, et une troisième ligne : c’est quoi ?