Controller mit Internet - eigener TCP/IP Stack am Beispiel einer Zilog Z80 CPU

Jahr 2001 – Ziel dieses Projektes

Es soll eine Software erstellt werden, die einen einfachen Controller über eine Wählverbindung oder Netzwerkanschluss mit dem weltweiten Internet verbindet. Jeder der an dieser Software mitarbeiten möchte kann durch den offenen Quellcode mitarbeiten. Jedes Programmstück ist per Download zugänglich. Die Software soll einen einfachen TCP/IP Protokollstack bilden. Über eine Modemverbindung (Festnetz oder Handy) oder Netzwerk wird der Controller E-Mails mit Messdaten senden und empfangen die entsprechende Schaltfunktionen im Controller auslösen. Im einfachsten Fall sendet der Controller eine E-Mail mit Wetterdaten (Temperatur/Luftfeuchte…). Er könnte aber auch beim Empfang einer entsprechenden E-Mail die Heizung in einem Wochenendhaus einschalten. Ein weiterer Ausbau der Software auf Protokolle wie TELNET oder HTTP lassen dann auch Steuerungen zu, bei denen nicht über die E-Mail, sondern mit direktem Kontakt (WEB oder WAP Browser, Terminal…) reagiert und agiert wird.
In der Historie können Sie sich über den aktuellen Stand dieses Projektes informieren. Jeder der mitmachen will, schreibt einfach an meine E-Mail Adresse.

Hardware zum Projekt

Ich brauchte bei der Wahl des Controllers nicht lange überlegen. Die gute alte Zilog Z80 CPU erfüllt alle notwendigen Voraussetzungen und ist durch die grosse Zahl an Ein-/Ausgabe-Bausteinen sehr flexibel. Ebenso gibt es neuere Z80 Modelle die den gleichen Rechenkern benutzen und auch die 64 KByte Speichergrenze überspringen können. Ich denke nur an den Z84C015 (CPU,PIO,SIO,CTC) oder an den Z80180 (CPU,SIO,1MByte Speicherraum). Sie werden sich fragen, warum ich nicht gleich solch einen Baustein verwendet habe, diese weiter oben genannten Bausteine sind SMD Typen und für den Amateur schlecht zu verarbeiten. Meine Hardware verwendet alles Bauteile in normaler DIL Bauform. Die Bauteile sind sehr preiswert und können auf einer Lochrasterplatte mit Litze verbunden werden.

Merkmale:

  • ZILOG Z80 System mit CPU, CTC, SIO, PIO
  • Taktfrequenz 2,54 MHz
  • LCD Anschluss für Punktmatrixmodule
  • 32 KByte RAM (Batteriegepuffert), 32 KByte EEPROM
  • Bootlodersoftware im EEPROM
  • Systembusstecker mit den wichtigsten Signalen
  • 2 x echte RS232 Steckverbindungen, 2 x 8 Bit Par.Ports

Das Boarddesign hat einige wichtige Besonderheiten. Der RAM befindet sich im Adressbereich 0 bis 7FFFh der EEPROM ab 8000h. Über einen DIP Schalter kann man wählen, ob die CPU das Programm mit Adresse 0 oder mit 8000h starten soll. An Adresse 0 steht das eigene Programm bei Adresse 8000h befindet sich der Bootloader mit einem kleinen Monitorprogramm. Durch den Bootlader ist es nicht notwendig, ständig EEPROM zu brennen um die Software auszutesten.

Bootloader:
Über die serielle Schnittstelle kann mit einem Terminalprogramm eine Intel-Hex Datei in den batteriegepufferten RAM übertragen werden. So eine Intel-Hex Datei enthält neben den zu speichernden Byten auch die Adressinformationen. Der Z80-Assembler erzeugt diese Intel-Hex Datei die dann zum Testen problemlos über die serielle Schnittstelle zum Z80 Board übertragen werden kann.

Monitorprogramm:
Die gerade übertragene Software kann nun gestartet werden. Was nun, wenn nicht alles so geht wie es soll? Hier hilft mein kleines aber wirkungsvolles Monitorprogramm. Das Monitorprogramm kann die übertragene Software im Schrittbetrieb testen. Es werden wichtige Register angezeigt. Aber auch Speicherzellen und Speicherbereiche können dargestellt und verändert werden.

Monitorbefehle:

B XXXXHaltepunkt (Breakpoint) setzen
C XXXX YYYY ZZZZSpeicher vergleichen (Compare)
D XXXXSpeicherbereiche anzeigen (Display Memory)
E XXXXProgrammstart mit Haltepunkten (Execute)
F XXXX YYYY ZZSpeicher füllen (Fill Memory)
G XXXXProgrammstart mit alten Registern (Go)
HHilfeseite (Help)
ISoftware-Reset (Init)
J XXXXProgrammstart ohne Haltepunkte (Jump)
LIntel Hex laden (Load)
M XXXXSpeicher verändern (Memory modify)
NSchrittbetrieb (Next)
P XXPortschreiben und -lesen (Port)
R XXCPU Register verändern (Register)
Sschneller Schrittbetrieb
T XXXX YYYY ZZZZSpeicherbereiche verschieben (Transfer)

Literaturquellen

Bücher:

meine WertungAutor-Titel-Verlag-ISBN NummerPreis in DM
++++Gerhard Lienemann
TCP/IP Grundlagen
Verlag Heinz Heise
ISBN 3-88229-180-X
79,00
++++EXTRAHEFT
Embedded Internet
Design & Elektronik
www.elektroniknet.de
29,80
++Dirk Larisch
Das Einsteigerseminar TCP/IP
Verlag BHV
ISBN 3-8266-7022-1
19,80

Bildserien zur Z80 Karte

Bild 1 – Lochrasterplatte 100 x 200 mit Netzteil 5 Volt
Bild 2 – Fassungen und Steckverbinder sind montiert
Bild 3 – das 8 Bit Bussystem wird verlegt
Bild 4 – alle Datenleitung und Busleitungen fertig

ZIP Datei (196K) – Schaltung und Platinenansichten downloaden

Software:
Monitorsoftware V1.00 (25K) – downloaden
Monitorsoftware V1.01 (26K) – downloaden
TCP/IP Programm (12K) – aktuell Stand 02-01-2002 downloaden

Assemler Software:
ZMAC Linux (106K) – downloaden

Historie dieses Projektes

24-06-2001 Was ist TCP/IP – Internetrecherche
29-06-2001 Erstes Konzept eines Rechners, CPU Auswahl
04-07-2001 Teilaufbau Z80 Rechner ohne CTC,PIO,SIO
07-07-2001 Urlaub – alle wichtigen engl. RFC’s (IP,TCP,SLIP,PPP,TELNET)
23-08-2001 Restaufbau Z80 Rechner mit allen fehlenden Bausteinen
25-08-2001 Z 1013 Monitor A2 in ZESY-Assembler einlesen, Tabellen bearbeiten
29-08-2001 Z 1013 Monitor A2 funktioniert an jeder Stelle im ROM
05-09-2001 Bootloader für Z80 Karte geschrieben – noch fehlerhaft
07-09-2001 Bootloader funktioniert, Intel Hex laden über RS232 9600baud
10-09-2001 Z 1013 A2 Monitor mit serielle Routinen umschreiben
12-09-2001 Die Routinen lassen sich nicht einbinden – eigene RST20 Routinen
18-09-2001 Monitor V1.00 ist fertig ! Probleme mit N Befehl – EPROM brennen
30-09-2001 Monitor V1.01 ist fertig ! neu S Befehl – EPROM brennen
01-10-2001 SLIP IP Datagramm von Palm auslesen und auswerten (TCP/IP Telnet)
02-10-2001 Datagramm auftrennen in TCP und IP Header
04-10-2001 Software für IP Header geschrieben! Probleme mit Checksumme
07-10-2001 Internetrecherche Einer-Komplement der Checksumme bei IP
09-10-2001 Softwaretest Programm zur Bildung der Checksumme für IP und TCP?
15-10-2001 IP_out funktioniert mit richtiger Checksumme
20-10-2001 IP_in funktioniert mit allen Prüfungen Fehlermeldungen vorgesehen
21-10-2001 IP Fehlermeldungen bei Protokollfehlern werden ausgegeben
23-10-2001 Datenintegration und TCP Protokoll begonnen
26-10-2001 durch den Pseudoheader und TCP Header neues Konzept der Headerbildung
27-10-2001 ein Data-Ram Platz, hier wird durch verschieben, Headerplatz geschaffen
30-10-2001 Konzept mit verschieben geht gut, Probleme Checksummenberechnung in TCP
02-11-2001 Checksumme ? RFC-TCP kann nicht stimmen Bytelänge anstelle Oktets !
06-11-2001 TCP_out fertig ! Checksumme richtig
15-11-2001 TCP/IP in und out Headererstellung / -prüfung ist fertig ! funktioniert !
29-11-2001 SLIP in und out geschrieben
01-12-2001 SLIP über RAM-Puffer getestet ok, bei TCP-Option MSS eingefügt
16-12-2001 SLIP mit TCP/IP read und write über COM ok, Beginn TCP Statusprogrammierung
22-12-2001 TCP/IP TELNET-SLIP Verbindung kann aufgebaut und getrennt werden
27-12-2001 weiterer Checksummenfehler beim Senden von TCP/IP Daten gefunden
02-01-2002 Z80 arbeitet als SLIP HTTP Server, eine kleine Seite ist mit jedem Browser sichtbar !