die datenschleuder. - Chaosradio - CCC
die datenschleuder. - Chaosradio - CCC
die datenschleuder. - Chaosradio - CCC
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>die</strong> <strong>datenschleuder</strong><br />
TANK AN G-G-G-GROSSHIRN, TANK AN GROSSHIRN<br />
Off. Er nimmt nicht mehr am Geschehen teil und kann<br />
aus <strong>die</strong>sem Zustand nur durch einen Benutzereingriff<br />
wieder zurückgesetzt werden. Die Regeln zum Erhöhen<br />
und Erniedrigen der Zähler sind äußerst komplex.<br />
Beispielhaft sollen hier <strong>die</strong> folgenden, vergleichsweise<br />
einfachen Regeln erläutert werden. Wenn ein Sender<br />
einen ACK Fehler erkennt, so bedeutet das, dass niemand<br />
seine Nachricht korrekt empfangen hat. Wenn<br />
kein Bitfehler vorliegt und nicht alle anderen Teilhemher<br />
Bus Off sind, so ist seine Verbindung zum Bus sehr<br />
wahrscheinlich unterbrochen. Als Konsequenz wird der<br />
TEC erhöht. Ist <strong>die</strong> Verbindung wirklich unterbrochen,<br />
so wird der Baustein sehr bald Bus Off gehen und <strong>die</strong>sen<br />
Zustand nach oben melden. Ein zweiter einfacher<br />
Fall liegt vor, wenn ein Baustein immer eine Differenz<br />
in der CRC Summe erkennt. Insbesondere, wenn er<br />
<strong>die</strong>sen Fehler immer als erster bemerkt liegt <strong>die</strong> Vermutung<br />
nahe, dass es sich um ein lokales Problem handelt.<br />
Sollte das der Fall sein, so wird sich der Baustein<br />
ziemlich schnell “Error Passive” verhalten und den Bus<br />
nicht weiter stören. Zu beachten ist, dass im Error Passive<br />
Zustand <strong>die</strong> nachrichtenbasierte Synchronisation<br />
der Teilnehmer nicht mehr gewährleistet ist, da der<br />
Baustein im Fehlerfall <strong>die</strong> Nachricht verwirft, <strong>die</strong>se aber<br />
nicht neu gesendet wird.<br />
Ein Chip, der nur CAN 2.0A Frames kennt, kann nicht<br />
an einem Bus betrieben werden, auf dem CAN 2.0B<br />
gesprochen wird. Neben Bausteinen, <strong>die</strong> beide Formate<br />
können, gibt es solche, <strong>die</strong> sich CAN 2.0B passiv<br />
verhalten. Das bedeutet, dass sie zwar selber keine<br />
Extended Frames lesen und schreiben können, beim<br />
Empfang aber auch keine Error Frames senden. Die<br />
Erweiterung auf 29 Bits für den Identifier war nötig,<br />
um trotz grober Filter genügend Flexibilität für Unterteilung<br />
der Nachrichten in Kategorien zu haben. Dafür<br />
bezahlt man allerdings mit einer geringeren Nettodatenrate.<br />
Mit Standard Frames kommt man bei 1 MBit/s<br />
und 8 Datenbytes auf ein Maximum von 576,6 kBits/s<br />
netto. Mit Extended Frames kommt man nur auf maximal<br />
488,5 kBit/s. Da eine Nachricht ohne Daten auch<br />
einen Informationsgehalt besitzt, sind <strong>die</strong>se Zahlen<br />
nicht sehr repräsentativ.<br />
Fast jeder Hardwarehersteller hat eigene CAN Lösungen<br />
in seinem Sortiment. So gibt es z.B. Microcontroller<br />
mit integriertem CAN Interface oder aufgebohrte<br />
PALs, <strong>die</strong> man remote über CAN steuern kann. Um<br />
einer bestehenden Hardware Zugang zu einem CAN<br />
Bus zu ermöglichen eigenen sich sogenannte Standalone<br />
CAN Controller, wie z.B. der SJA1000 von Philips.<br />
Er ist eine komplette Implementierung der CAN<br />
2.0 Spezifikation mit einem parallelen Interface. Üblicherweise<br />
wird er wie externes RAM an einen Microcontroller<br />
angeschlossen. Man kann ihn allerdings<br />
auch an den Druckerport anschließen, und so mit dem<br />
Computer Zugang zu einem CAN Bus erlangen. Ausgangsseitig<br />
spricht der SJA1000 TTL. Deshalb braucht<br />
man noch einen CAN Transceiver, der <strong>die</strong> Spannungen<br />
umwandelt. Abgesehen von ein paar zusätzlichen<br />
Widerständen und Kondensatoren ist nicht mehr Hard-<br />
#83 / 2004<br />
ware nötig. Alles zusammen bekommt man für unter<br />
10 Euro. Auf dem Schaltplan sind noch zwei Varistoren<br />
und eine Spule eingezeichnet. Die Varistoren bieten<br />
einen Schutz vor Überspannung und <strong>die</strong> Spule verbessert<br />
<strong>die</strong> Signalqualität bei hohen Bitraten. Für ein einfaches<br />
Setup braucht man <strong>die</strong>se Komponenten allerdings<br />
nicht.<br />
Das Datenblatt des SJA1000 [2] ist sehr empfehlenswert,<br />
da es den Controller ausführlich beschreibt. Deshalb<br />
folgt hier nur ein kleiner Überblick über <strong>die</strong> Möglichkeiten<br />
und <strong>die</strong> Be<strong>die</strong>nung. Der SJA1000 besitzt<br />
zwei verschieden Modi. Der BasicCAN Modus ist ein<br />
Kompatibiltätsmodus zum PCA82C200, einem älteren<br />
Baustein von Philips. In <strong>die</strong>sem Modus verhält sich<br />
der Baustein CAN 2.0B passiv. Im sogenanten Peli-<br />
CAN Modus kann er aktiv CAN 2.0B sprechen und<br />
bietet noch weitere Features an, wie z.B. <strong>die</strong> automatische<br />
Baudratenerkennung und einen “listen only”<br />
Modus - beides sehr praktisch, wenn man ein unbekanntes<br />
Netz analysieren möchte. Um mit dem Controller<br />
zu kommunizieren, werden 8-bit Werte in seine<br />
Register geschrieben und daraus gelesen. Je nach<br />
Modus existieren 31 oder 39 Register mit eindeutigen<br />
8-bit Adressen.<br />
Im Control Register kann man vier mögliche Interrupts<br />
maskieren. Diese sind ein Receive Interrupt, ein Transmit<br />
Interrupt, ein Error Interrupt und ein Data Overrun<br />
Interrupt. Die ersten beiden werden ausgelöst,<br />
wenn eine Nachricht fehlerfrei empfangen bzw. gesendet<br />
wurde. Ein Error Interrupt tritt auf, wenn einer der<br />
beiden Error Counter (TEC oder REC) <strong>die</strong> erste Schwelle<br />
überschreitet. Ein Data Overrun liegt vor, wenn der<br />
Controller keine Puffer mehr frei hat, um eine empfangene<br />
Nachricht zu speichern. Der SJA1000 besitzt<br />
nämlich einen 64 kB Ringpuffer für empfangene Nachrichten.<br />
Die Empfangsregister beinhalten immer den<br />
Wert der ältesten Nachricht. Hat man eine Nachricht<br />
ausgelesen, teilt man dem Controller mit, dass er zur<br />
nächsten Nachricht weitergehen soll. Das geschieht<br />
durch das Setzen eines Bits im Command Register.<br />
Dort kann man auch das Senden einer Nachricht, <strong>die</strong><br />
man zuvor in <strong>die</strong> Senderegister geschrieben hat, auslösen.<br />
Falls einige Interrupts maskiert sind oder man<br />
generell keine Interrupts behandeln möchte oder kann,<br />
bietet das Interrupt Register <strong>die</strong> Möglichkeit, den Controller<br />
zu pollen. Zu guter letzt gibt es noch das Status<br />
Register, das Informationen über Fehlerereignisse und<br />
den Zustand der Sende- und Empfangspuffer enthält.<br />
Um den Controller konfigurieren zu können, muss er<br />
im Reset Modus sein. Dazu zieht man entweder <strong>die</strong> /<br />
RST Leitung auf Masse oder setzt das erste Bit im Control<br />
Register auf 1. In <strong>die</strong>sem Zustand kann man u.a.<br />
<strong>die</strong> Empfangsfilter und <strong>die</strong> Baudrate einstellen.<br />
[1] http://www.cia-can.de<br />
[2] http://semiconductors.philips.com/pip/SJA1000.html<br />
27<br />
27