FnordNet-Protokoll
From Lochraster
Version 0.1 beta vom 18.12.2007 Version 0.2 wurde implementiert und ist als Library verfügbar, die Dokumentation muss noch aktualisiert werden
Contents |
[edit] Allgemeines
Das FnordNet-Protkoll dient zum kostengünstigen kabellosen Verbinden von Etherrapes, Fnordlichtern und Fnord-Nodes. Die dezeitige Implementierung verwendet Infrarot, da dies bereits im Etherrape und im Fnord-Node eingebaut ist und beim Fnordlicht sehr einfach nachgerüstet werden kann. Das Protkoll kann uni- und bidirektional betrieben werden. Die Datenrate beträgt ca. 1900 Bit/Sekunde.
[edit] Medium Access
Die Bitsignalisierung erfolgt über Pulsbreiten. Ein Puls mit einer Breite von 390 mikroSekunden wird als 0 interpretiert ein Puls von 700 mikroSekunden stellt eine 1 da. Um eine maximale Datenrate zu erreichen werden Pulse und Pausen des Infrarotsenders zur Codierung verwendet. die Trägerfrequenz des Infrarotsignals beträgt 38 KHz.
Vor jeder Aussendung wird als erstes eine Zeit gewartet die dem vierfachen der CRC Prüfsumme in mikroSekunden entspricht also max 1024 mikroSekunden. Dann wird geprueft ob für 3.26ms Stille herrscht = 1 überlauf des Empfangstimers. Wenn Stille detektiert wird, wird gesendet. Ansosnten wird wieder mit warten begonnen.
[edit] Frame
3 Bit mit dem Wert 0 als SYNC 3 Bit Protocol Version - 000 = Unidirektional / 001 = Bidirektional 2 Bit Reserviert 1 Bit = ACK = Bestätigung für den korrekten Empfang eines Frames im bidirektionalen Modus 2 Bit = Frametype 00 = Management keine Daten / 01 = Shortframe = 2 Byte Daten / 10 = Longframe = 8 Byte Daten / 11 = reserviert 6 Bit To = Empfängeradresse 0 - 63 6 Bit From = Absenderadresse 0 - 63 4 Bit Sequence number = Sequenznummer des Frames um doppelte Auswertung des gleichen Frames im Empfänger zu verhindern. 16/64 Bit Daten (2 Byte = Shortframe) (8 Byte = Longframe) 8 Bit CRC Checksumme
Laenge ohne sync = 32 Bit (Mgmt) 48 Bit (Short) 96 Bit (Long)
[edit] Beschreibung
Auf jede Aussendeung eines Frames muss sofort ein ACK (ACK Bit gesetzt) als Bestätigung gesendet werden wenn die Protokollversion 1 (bidirektionaler Modus) verwendet wird. Im Frame mit dem ACK Bit gesetzt sollten nach Möglichkeit bereits Daten enthalten sein wenn dies noetig ist. Wird innerhalb von 250 ms (oder 1 Systemzyklus) kein ACK erhalten wird erneut gesendet, bis zu 8 mal. Danach wird ein Fehler ausgegeben und die Seriennummer auf 0 gesetzt. Bei einem erfolgreichen Befehl wird die Anzahl der Retransmits ausgegeben und die Seriennummer für dieses Ziel um 1 erhöht.
Die Seriennummer 0 hat eine besondere Bedeutung. Sie dient zum Auffinden eines Knotens und der Synchronisation der Seriennummern. Wird im Speicher 0 als Seriennummer für ein Ziel gefunden (= noch keine Synchronisation), wird ein Shortframe mit Seriennummer 0 und Daten 0xAA 0x33 an das Ziel gesendet. Das Ziel antwortet mit einem Shortframe mit gesetztem ACK Bit und Daten 0x33 0xAA. Dann wird die Seriennummer im Sender auf 1 gesetzt und es können nun Nutzdaten versendet werden. Jeder Knoten der ein Frame mit Seriennummer 0 empfängt muss diese Prozedur für den entsprechenden Absender ausführen. Es soll sichergestellt werden das eine Bidirektionale Verbindung möglich ist bevor Nutzdaten gesendet werden.
Wird der gesendete Frame mit der Seriennummer 0 auch nach 8 maliger Sendung nicht mit einem ACK beantwortet, wird ein Fehler ausgegeben-> Target not found.
Beim Empfang wird strikt darauf geachtet das die erwartete Seriennummer empfangen wird. Wird ein Frame mit der falschen Seriennummer empfangen wird diese verworfen und auch kein ACK gesendet. Das heisst Empfangene Nachrichten enthalten entweder die erwartete Seriennummer oder die Seriennummer 0 mit Daten 0xAA 0x33.
Wurde der Speicher des empfangenden Knotens gelöscht, dann steht als zu erwartende Seriennummer 0 im Speicher. Daher wird nur auf Frames geantwortet die die Seriennummer 0 tragen. Dies zeigt dem Absender (der eventuell Nutzdaten mit Seriennummern > 0 sendet) eine desynchronisation an.
Unterscheidung von anderen Protokollen durch Puls- und Pausendauer der ersten 3 Bit. Empfangstimer läuft mit einem Prescaler von 256 = 78125 Kiloherz = 12.8 mikro Sekunden / Takt = 3.26 ms pro überlauf. Bei einer Burst zeit von 390 Mikrosekunden wird ein Zählerstand von 30.5 erreicht. Infrarotprotokolle normaler Fernbedienungen sollten sich leicht vom FnordNet Protokoll unterscheiden lassen da diese ein anderes Timing verwenden.