-
Ethernet-Paketübertragung
- Der Autor wollte eine Reihe mit dem Titel „Networking from scratch“ erstellen und begann ein Projekt zum Aufbau eines TCP/IP-Stacks auf einem Mikrocontroller.
- Dieser Blogbeitrag erzählt von der erfolgreichen Übertragung des ersten Ethernet-Pakets und berichtet über Bugs und Debugging-Erfahrungen im Projekt.
-
Mikrocontroller
- Der verwendete Mikrocontroller ist ein STM32F401, basiert auf ARM Cortex-M4 und läuft mit bis zu 84 MHz.
- Mit 96 KiB RAM bietet er genügend Kapazität, um mehrere Pakete zu verarbeiten.
-
Ethernet
- Ethernet ist ein Konzept, das verschiedene Technologien und Standards umfasst, darunter Hardware auf physischer Ebene, Signalformate, Strategien zur Behandlung von Buskollisionen und Frame-Layouts.
- In diesem Projekt wird der W5100-Chip von Wiznet verwendet, der einen Hardware-TCP/IP-Stack integriert hat.
-
Problem 1: Ein Ruf ins Leere
- Es wurde zwar ein Treiber für die Kommunikation mit dem W5100-Chip geschrieben, doch wegen falsch verdrahteter SPI-Signale kam keine Kommunikation zustande.
- Das ICSP-Header des Arduino-Shields verband die SPI-Signale falsch, wodurch das Problem entstand; zur Behebung wurde die Platine nachgearbeitet.
-
Problem 2: Das Wesen der Komödie
- Auch nachdem die SPI-Signale korrekt verbunden waren, funktionierte die Übertragung der Ethernet-Pakete noch nicht richtig.
- Mithilfe eines Logikanalysators wurden die digitalen Signale untersucht, und durch das Beheben eines Timing-Problems beim Chip-Select-Signal konnte die Kommunikation erfolgreich hergestellt werden.
-
Problem 3: Unbekanntes Paket
- In Wireshark tauchte ein fehlerhaftes Paket auf, nicht das tatsächlich gesendete Paket.
- Unter Bezug auf die Arduino-Bibliothek wurde das Problem analysiert, und ein Bug, der Daten an eine falsche Speicheradresse schrieb, wurde behoben.
-
Die Lehre der Geschichte
- Die Übertragung eines Ethernet-Pakets mag ein kleiner Erfolg sein, doch die dabei gewonnenen Erfahrungen mit Bugs und Debugging sind wertvoll.
- Debugging und das Schreiben von Tools sind wichtige Bestandteile des Entwicklungsprozesses, und es ist entscheidend, ein System durch Untersuchung und Experimente zu verstehen.
- Das Projekt läuft weiter und befasst sich inzwischen mit Problemen und Bugs auf höheren Abstraktionsebenen.
1 Kommentare
Hacker-News-Kommentare
Es lohnt sich immer, Werkzeuge zu schreiben und das Debugging zu erkunden. Viele verstehen das jedoch nicht und erkennen besonders in Entwicklungsprozessen wie JIRA den Wert von Exploration oft nicht.
Die Fähigkeit, kleine Werkzeuge zu bauen, ist ein Kernmerkmal des 10x-Produktivitätsprogrammierers und oft eine Kunst, die im Verborgenen praktiziert wird.
Dies ist der Beginn einer Serie, in der der TCP/IP- und Ethernet-Frame-Stack auf einem Mikrocontroller von Grund auf aufgebaut wird. Der W5100-Chip übernimmt TCP/IP und unterstützt vorgefertigte Ethernet-Frames.
Jemand wechselt beruflich ins FPGA-Engineering mit Fokus auf Ethernet und fand es sehr wertvoll, die Abstraktionen des Netzwerkings zu verstehen.
Es gibt die Ansicht, dass es besser wäre, statt eines STM32F401 mit W5100-Ethernet-Shield ein STM32F407-Board mit einem günstigen Ethernet-PHY-Board zu verwenden.
Ethernet-Funktionalität ist in der Regel als im Mikrocontroller integrierte Peripherie enthalten.
Zum ersten Mal wurden die neuen Bezeichnungen für MOSI/MISO gesehen: main out/subordinate in; die Alternativen COPI/CIPO sind nicht wirklich nachvollziehbar.
Um unter Linux einen Netzwerk-Stack zu schreiben, kann man
socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))verwenden.STM32-Nucleo-Boards haben integriertes 100-Mbit/s-Ethernet, und die STM32Cube-Software wird gemischt bewertet, liefert aber funktionierende Beispiele.
Ethernet arbeitet mit Frames, während Pakete ein IP-Konzept sind.
Man könnte den ENC28J60, einen „Stand-Alone Ethernet Controller with SPI Interface“, in Betracht ziehen; da kein Hardware-TCP/IP-Stack vorhanden ist, ist eine Software-Implementierung erforderlich.