Ethernet-Board

Einleitung

Anfang 2003 hatte ich den Gedanken, dass es eine tolle Idee ist ein Controllerboard mit Ethernet-Anschluss zu bauen, um z.B. Daten vom CAN-Bus direkt ins Internet bzw. lokale Netzwerk zu schicken. Um dieses Ziel zu erreichen sind mindestens zwei Dinge notwendig: Erstens ist  für die physikalische Verbindung mit dem Ethernet-Bus ein Ethernet-Controller notwendig. Und zweitens benötigt man für die Ablaufsteuerung der Kommunikation einen TCP/IP-Stack. Da der Ethernet-Controller direkt vom TCP/IP-Stack angesteuert wird, begann die Entwicklung mit der Suche nach einem freien TCP/IP-Stack, der möglichst einfach auf den Fujitsu portiert werden kann.

Open Source TCP/IP-Stacks für Embedded Controller Anwendungen:

  • µIP TCP/IP Stack von Adam Dunkel
    + Sehr kompakter Stack speziell für 8-Bit Controller
    + Sehr geringer Speicherbedarf
  • Ethernut-Projekt
    + Vollständiges Real Time Betriebssystem für Atmel ATmega128 mit TCP/IP
    + Unterstützte Ethernet-Controller RTL8019, LAN91C111
    - Großer Aufwand für Portierung, weil recht großes Projekt
  • TCP/IP Lean
    + Quellen offener TCP/IP-Stack aus dem Buch “TCP/IP Lean - Webserver for Embedded Systems” von Jeremy Bentham
    + Unterstützt NE2000-Komp. Netzwerkcontroller
    - Stack muss für kommerzielle Zwecke lizenziert werden
  • OpenTCP (Sourcecode bei Sourceforge.net)
    + Port für den Fujitsu bereits vorhanden
    + Unterstützte Ethernet-Controller u.a. CS8900A

Die Wahl des Stacks fiel eigentlich auf den OpenTCP-Stack, der zu dem Zeitpunkt noch recht neu und unbekannt war. Bei der Suche nach einem Lieferanten für den  Crystal/Cirrus CS8900A stieß ich dann aber auf den Wiznet W3100A.

Vorteile des W3100A:

  • Bei dem W3100A handelt es um einen 10/100MBit Ethernet-Controller mit einem eingebauten TCP/IP-Stack
  • Hardwaremäßig unterstütze Protokolle:  TCP, IP, UDP, ICMP, ARP und MAC
  • Der Baustein kann bis zu vier gleichzeitige TCP/IP-Verbindungen aufbauen.
  • Hohe Datenraten durch die Steuerung der Kommunikation in HW (Entlastung des Fujitsu-Controllers) und den internen Buffer möglich
  • Die Anbindung an den Fujitsu Controller erfolgt dabei entweder über einen parallelen 8 Bit Datenbus oder über eine I2C-Schnittstelle.
  • 3.3V Betriebsspannung mit 5V kompatiblen IO
  • Interne Buffer : 16kB RAM
  • Die Ansteuerung dieses Chips erfolgt über eine API, deren Source Code offenliegt und die leicht zu portieren ist.

Nachteile des Wiznet W3100A:

  • Es wird ein externer PHYceiver (RTL8201BL) benötigt
  • Da die Kommunikation direkt im W3100A gesteuert wird, werden keine Protokolle wie z.B. SLIP oder PPP über die seriellen Schnittstellen des Fujitsu unterstützt.<

Entwicklung der Hardware

Den Kern des Controllerboards bildet ein MB90F549 von Fujitsu. Dieser Controller besitzt intern 256kByte Flashspeicher und 6kByte RAM. Der Anschluss des W3100A erfolgt über den externen Bus des Fujitsu im 8-Bit Modus. Da bei der Entwicklung der Hardware der Speicherplatzbedarf für die Software nicht abgeschätzt werden konnte, wurde der RAM-Speicher durch einen 512kB SRAM-Baustein am externen Bus erweitert. Zusätzlich wurde an den Bus auch noch ein 8-Bit Interface für CompactFlash-Cards angeschlossen.

Blockschaltbild des Controllerboards

Die Adressdekodierung und die Logik zur Umschaltung in den Programmiermodus wurde in einem programmierbaren Logikbaustein vom Typ Xilinx XC9536 untergebracht. Als Kommunikationsschnittstellen stellt das Board neben einer RJ45-Buchse für das Ethernet, eine RS232-Schnittstelle und einen CAN-Bus zur Verfügung. Über die RS232-Schnittstelle erfolgt auch das Flashen des  Controllers, wenn sich das Board im Programmiermodus befindet.

Die gesamte Schaltung des Controllerboards ist auf eine 5V-Versorgung ausgelegt. Nur für den W3100 und den RTL8201 ist eine zusätzliche 3.3V Versorgung notwendig.

Fertig bestückte Platine

Entwicklung/Portierung der Software

Das API von Wiznet für den W3100A wurde ausgehend von dem 8051-C-Sourcecode zum Fujitsu portiert. Dabei wurde erstmal die bisherige Struktur des Sourcecodes eins zu eins übernommen, um möglichst keine Fehler in den bisherigen Code einzubauen. Innerhalb von ein paar Stunden war es dadurch möglich, einen TCP-Client/Server und einen UDP-Client/Server auf den Controllerboard zum Laufen zu bringen.

Die Kommunikation über den W3100A funktioniert bisher sehr gut. Einzig bei UDP-Verbindungen gibt es einen Bug/Feature in dem Stack des Bausteins. Der Baustein löst nur bei dem ersten Senden eines UDP-Pakets einen ARP-Request aus. D.h. nach der Initialisierung des Bausteins sendet der W3100A immer an den Empfänger, für den das erste UDP-Paket bestimmt war, unabhängig von der IP-Adresse die übergeben wird. Eigentlich ein etwas merkwürdiges Verhalten für ein verbindungsloses Protokoll. Als Workarround wird angegeben, dass bei einer Änderung des Empfängers der Port des Stack neu initialisiert werden muss.

Der Speicherbedarf für die bisherigen Client/Server-Programme lag unter  10kB Flash und bei ein paar hundert Byte RAM. Das externe RAM ist also für einfache Anwendungen nicht notwendig.

Im Augenblick überlege ich, ob es sinnvoll ist, das API des W3100A so umzuschreiben, dass es mit OpenTCP kompatibel ist. Damit könnte man dann die höheren Protokolle, wie DHCP, DNS, SMTP usw., direkt aus OpenTCP übernehmen.

Literatur zum Thema TCP/IP

  • Vernetzung von Mikrocontrollern mit dem Ethernet: TCP/IP Kommunikation für Mikrocontroller und Embedded-Systeme
    von Sven Biller
    ISBN 978-3639014419

    In diesem Buch wird auf den Wiznet-Baustein in Kombination mit Microcontrollern aus der AVR-Familie eingegangen.

  • TCP/IP-Grundlagen Protokolle und Routing
    von Gerhard Lienemann
    ISBN 3-8829-180-X

    Gutes Buch zu der grundlegenden Arbeitsweise und Funktion von TCC/IP und Ethernet

  • Messen, Steuern und Regeln per Internet
    von Klaus-Dieter Walter
    ISBN 3-7723-4280-9

    Sehr umfachreiches Buch, das neben den Grundlagen von TCP/IP auch viele höhere Protokolle wie http, smtp, telnet erklärt. Im Mittelpunkt des Buches steht aber direkt die Programmierung von Embedded Webservern, Telnet-Servern, Email-Clients usw. Durch viele Beispielprogramme wird der Einstieg in die Programmierung von Netzwerkanwendungen erleichtert.

  • TCP/IP Lean
    von Jeremy Benthan
    ISBN 1-5782-0108-X

    Im Mittelpunkt dieses Buches steht die Entwicklung eines TCP/IP-Stacks für den PIC-Mikrocontroller. Dabei werden in diesem Buch nicht nur die technischen Details des Stacks erklärt, sondern es wird auch auf viele Grundlagen der Programmierung von Kommunikationsanwendungen wie State-Maschines, Buffer usw. eingegangen. Die zweite Auflage des Buchs enthält auch ein Kapitel zur Anbindung einer WirelessLan-PCMCIA-Karte an einen PIC-Controller.