01.12.2012 Aufrufe

die datenschleuder. - Chaosradio - CCC

die datenschleuder. - Chaosradio - CCC

die datenschleuder. - Chaosradio - CCC

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!