Datenfunk mit dem AVR: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
(+ protokoll)
Zeile 17: Zeile 17:
Das Protokoll ist so simpel wie möglich: Zwei Bytes am Anfang eines jeden Datenpaketes stehen für Typ und Länge des Paketes. Der Pakettyp gibt (wer hätte das gedacht?) an, um welche Art von Paket es sich handelt. Das zweite byte gibt die Länge des Payloads an (in Bytes).
Das Protokoll ist so simpel wie möglich: Zwei Bytes am Anfang eines jeden Datenpaketes stehen für Typ und Länge des Paketes. Der Pakettyp gibt (wer hätte das gedacht?) an, um welche Art von Paket es sich handelt. Das zweite byte gibt die Länge des Payloads an (in Bytes).


== Pakettypen ==
= Pakettypen =
Es gibt verschiedene Pakettypen, einige davon sind ganze Unterprotokolle, andere sind einfach nur Daten. Folgende Pakettypen sind festgeschrieben:
Es gibt verschiedene Pakettypen, einige davon sind ganze Unterprotokolle, andere sind einfach nur Daten. Folgende Pakettypen sind festgeschrieben:


=== 0x00 - Daten ===
== 0x00 - Daten ==
Ein einfaches Datenbyte ohne Checksumme oder sonstigen Schnickschnack.
Ein einfaches Datenbyte ohne Checksumme oder sonstigen Schnickschnack.


=== 0x01 - Daten + XOR Checksumme ===
== 0x01 - Daten + XOR Checksumme ==
Ein Datenpaket, dessen letztes Byte eine XOR Checksumme der anderen payload Bytes ist.
Ein Datenpaket, dessen letztes Byte eine XOR Checksumme der anderen Payload Bytes ist.


== 0x1* - Adressbasierte Protokolle (8bit) ==
Die ersten 2 Byte des Payloads sind Quell- und Zieladressen.


  +----+----+----+----+----- ...
  |0x0*|len |src |tgt | payload
  +----+----+----+----+----- ...


=== 0xE* - Experimentierecke ===
Die Adressaushandlung erfolgt via Ping. Ein neu gebooteter client gibt sich zunächst die Adresse 0x00 und sendet min. 10 Pakete an die Wunschadresse. Wenn keine Antwort kommt, nimmt sich der client die Adresse.
 
=== 0x10 - Management ===
==== 0x00, 0x01 Ping & Pong ====
Das erste Byte des Payloads gibt an, ob es sich um ein Ping oder Pong Paket handelt. 0x00 ist ein Ping, 0x01 ist ein Pong. Der Rest des Payloads wird einfach in das Antwortpaket kopiert.
 
 
=== 0x11 - Checksumme + Daten ===
Datenpaket mit Quell- und Zieladresse. Das letzte Byte des Payloads ist die XOR-Checksumme des gesamten Paketes (inkl. type- und len field.)
 
== 0xE* - Experimentierecke ==
Diese Protokolltypen sind zum experimentieren gedacht.
Diese Protokolltypen sind zum experimentieren gedacht.


=== 0xF* - Reserviert ===
== 0xF* - Reserviert ==
Reserviert für Erweiterungen oder für den Tag, an dem uns die Protokolltypen ausgehen.
Reserviert für Erweiterungen oder für den Tag, an dem uns die Protokolltypen ausgehen.

Version vom 18. Juni 2007, 06:17 Uhr

Hardware

Die benutzten Transceiver gibt es bei verschiedenen Herstellern unter dem Namen RFM12 oder RF12. Sie können im 433 Mhz ISM Band und zusätzlich auf Frequenzen in der Umgebung von 315, 868 und 915 MHz funken.

In Deutschland sind die Module bei Pollin zum Preis von 8 Eur erhältlich, allerdings lohnt sich ab einer Menge von 10 oder mehr Modulen eine direkte Bestellung beim Hersteller ([1]).

Beispielcode

Im SVN ist Beispielcode [2] hinterlegt, der die Module in Empfangsbereitschaft versetzt und ein empfangenes Byte mit den LEDs des Laborboards anzeigt. Wenn man Button 0 drückt, sendet das Modul.

Datenblätter

Auf der Pollin Homepage sind unvollständige Datenblätter und nicht funktionierender Beispielcode verzeichnet. Die beigelegte Papierdokumentation ist ebenso unbrauchbar. Von diesen ist ausdrücklich abzuraten!

Ein etwas brauchbareres, aber dennoch nicht ganz vollständiges Datenblatt findet sich auf der Herstellerseite: [3].

Protokoll

Damit die verschiedenen Devices auch vernünftig miteinander plaudern können, muss ein Protokoll her.

Das Protokoll ist so simpel wie möglich: Zwei Bytes am Anfang eines jeden Datenpaketes stehen für Typ und Länge des Paketes. Der Pakettyp gibt (wer hätte das gedacht?) an, um welche Art von Paket es sich handelt. Das zweite byte gibt die Länge des Payloads an (in Bytes).

Pakettypen

Es gibt verschiedene Pakettypen, einige davon sind ganze Unterprotokolle, andere sind einfach nur Daten. Folgende Pakettypen sind festgeschrieben:

0x00 - Daten

Ein einfaches Datenbyte ohne Checksumme oder sonstigen Schnickschnack.

0x01 - Daten + XOR Checksumme

Ein Datenpaket, dessen letztes Byte eine XOR Checksumme der anderen Payload Bytes ist.

0x1* - Adressbasierte Protokolle (8bit)

Die ersten 2 Byte des Payloads sind Quell- und Zieladressen.

 +----+----+----+----+----- ...
 |0x0*|len |src |tgt | payload
 +----+----+----+----+----- ...

Die Adressaushandlung erfolgt via Ping. Ein neu gebooteter client gibt sich zunächst die Adresse 0x00 und sendet min. 10 Pakete an die Wunschadresse. Wenn keine Antwort kommt, nimmt sich der client die Adresse.

0x10 - Management

0x00, 0x01 Ping & Pong

Das erste Byte des Payloads gibt an, ob es sich um ein Ping oder Pong Paket handelt. 0x00 ist ein Ping, 0x01 ist ein Pong. Der Rest des Payloads wird einfach in das Antwortpaket kopiert.


0x11 - Checksumme + Daten

Datenpaket mit Quell- und Zieladresse. Das letzte Byte des Payloads ist die XOR-Checksumme des gesamten Paketes (inkl. type- und len field.)

0xE* - Experimentierecke

Diese Protokolltypen sind zum experimentieren gedacht.

0xF* - Reserviert

Reserviert für Erweiterungen oder für den Tag, an dem uns die Protokolltypen ausgehen.