-
Envoi d’un paquet Ethernet
- L’auteur voulait créer une série intitulée "Networking from scratch" et a lancé un projet de construction d’une pile TCP/IP sur un microcontrôleur.
- Cet article de blog raconte la réussite de l’envoi du premier paquet Ethernet et partage l’expérience des bugs et du débogage rencontrés au cours du projet.
-
Microcontrôleur
- Le microcontrôleur utilisé est un STM32F401, basé sur ARM Cortex-M4, fonctionnant jusqu’à 84 MHz.
- Il dispose de 96 KiB de RAM, offrant une capacité suffisante pour traiter plusieurs paquets.
-
Ethernet
- Ethernet est un concept qui englobe diverses technologies et normes, notamment le matériel au niveau physique, les formats de signal, les stratégies de gestion des collisions sur le bus et la structure des trames.
- Dans ce projet, une puce W5100 de Wiznet est utilisée, et cette puce intègre une pile TCP/IP matérielle.
-
Problème 1 : crier dans le vide
- Un pilote a été écrit pour communiquer avec la puce W5100, mais la communication ne fonctionnait pas car les signaux SPI étaient mal connectés.
- Le problème venait du fait que l’en-tête ICSP du shield Arduino raccordait incorrectement les signaux SPI, et la carte a été retravaillée pour corriger cela.
-
Problème 2 : l’essence de la comédie
- Même après avoir correctement connecté les signaux SPI, l’envoi des paquets Ethernet ne fonctionnait toujours pas correctement.
- À l’aide d’un analyseur logique pour examiner les signaux numériques, le problème de timing du signal de sélection de la puce a été résolu, ce qui a permis d’établir la communication avec succès.
-
Problème 3 : paquet inconnu
- Dans Wireshark, un paquet erroné est apparu au lieu du paquet envoyé.
- En s’appuyant sur la bibliothèque Arduino pour analyser le problème, l’auteur a trouvé et corrigé un bug qui écrivait les données à une mauvaise adresse mémoire, ce qui a résolu le problème.
-
Morale de l’histoire
- L’envoi d’un paquet Ethernet peut sembler être une petite réussite, mais les bugs et l’expérience de débogage accumulés pendant le projet ont une vraie valeur.
- Le débogage et la création d’outils constituent une part importante du processus de développement, et il est essentiel de comprendre le système par l’exploration et l’expérimentation.
- Le projet se poursuit désormais sur des problèmes et des bugs à un niveau d’abstraction plus élevé.
1 commentaires
Avis Hacker News
Écrire des outils et explorer le débogage a toujours de la valeur. Pourtant, beaucoup ne le comprennent pas et, en particulier dans des processus de développement comme JIRA, ne voient souvent pas la valeur de l’exploration.
La capacité à créer de petits outils est au cœur du programmeur 10x, et c’est souvent un art pratiqué dans l’ombre.
Il s’agit du début d’une série qui construit de zéro la pile TCP/IP et des trames Ethernet sur un microcontrôleur. La puce W5100 est utilisée pour gérer TCP/IP et prend en charge des trames Ethernet préconstruites.
Quelqu’un explique s’être réorienté vers l’ingénierie FPGA avec un focus sur Ethernet, et que comprendre les abstractions du réseau a eu énormément de valeur.
Selon un avis, au lieu d’utiliser un STM32F401 et un shield Ethernet W5100, il vaudrait mieux utiliser une carte STM32F407 et une carte Ethernet PHY bon marché.
Les fonctions Ethernet sont généralement incluses comme périphériques intégrés au microcontrôleur.
C’est la première fois que quelqu’un voit la nouvelle terminologie pour MOSI/MISO, « main out/subordinate in », et les alternatives COPI/CIPO ne lui paraissent pas très claires.
Pour écrire une pile réseau sous Linux, on peut utiliser
socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)).Les cartes STM32 Nucleo intègrent de l’Ethernet 100 Mbps, et le logiciel STM32Cube reçoit des avis mitigés, mais fournit des exemples fonctionnels.
Ethernet manipule des trames, tandis que les paquets relèvent du concept IP.
On peut envisager l’ENC28J60, un « Stand-Alone Ethernet Controller with SPI Interface », mais comme il n’a pas de pile TCP/IP matérielle, une implémentation logicielle est nécessaire.