CAN Bus
Der CAN ist ein Bussystem welcher hauptsächlich in der Automobilindustrie eingesetzt wird. Inzwischen gibt es mehrere Unterarten die entweder eine geringere Datenrate haben und damit günstiger sind (Low Speed CAN) oder aber auch mehr Nutzdaten pro Botschaft übertragen können (CAN FD Frame) oder eine vergrößere Anzahl von Botschaften enthalten (Extended Identifier). Auf die Unterarten wird hier nicht eingegangen.
Der typische CAN ist ein
- High Speed CAN mit einer Übertragung von 125 kbit/s bis zu 1 Mbit/s
- Eine Botschaft (CAN Frame) beinhaltet zwischen 1 bis 8 Byte Nutzdaten (=Payload)
- Der Inhalt jeder Botschaft ist mit einem eindeutigen Identifier (=SID) gekennzeichnet
- Es gibt keinen Master und keine zeitliche Ablaufsteuerung des Datenverkehrs
- Jeder Knoten liest alle Botschaften auf dem Bus und verwendet die für sich notwendigen Daten (anhand des Identifiers)
- Jeder Knoten kann eine Botschaft senden. Die Priorisierung (=Arbitrierung) erfolgt anhand des Identifiers.
Hardware Schnittstelle (Bsp. MCP2515 CAN Bus Modul)
Transceiver (TJA1050)
Ein CAN Transceiver konvertiert die auf dem Tx (Transmit) Pin anliegenden logischen Pegel auf die entsprechenden Pegel des CAN Busses. Tx HIGH mit 5V/3,3V wird zu je 2,5V auf der CAN High und CAN Low Leitung. Tx LOW mit 0V wird zu CAN High 4V und auf der CAN Low Leitung zu rund 1V.
Über den seriellen Rx (Receive) Pin gibt der Transceiver alle auf dem CAN Bus anliegenden konvertierten Pegel zur Weiterverarbeitung aus. Auch die über Tx gleichzeitig selbst übertragenen Pegel werden über Tx rückgelesen.
Can Controller (MCP2515)
Um den Mikrocontroller zu entlasten verwendet man zum Senden und Empfangen von CAN Botschaften einen CAN Controller. Dieser übernimmt die komplette Kommunikation in dem er selbstständig die Tx und Rx Pegel des Transceivers nach dem CAN Protokoll steuert bzw. auswertet. Auch die Arbitrierung, also der Auswahl des Zeitslots abhängig von der Wichtigkeit der Botschaft übernimmt der Controller, sowie die Berechnung und den Vergleich der CRC Checksumme.
Der Mikrocontroller muss nur die Sendebotschaft in die vorgesehenen Register des CAN Controllers schreiben. Auch die empfangenen CAN Botschaften können aus Speicherregister des Controllers jederzeit abgeholt und weiterverarbeitet werden. Die Kommunikation des Mikrocontrollers zum CAn Controller erfolgt über eine SPI Schnittstelle.
Aufbau eines CAN Frames:
- Idle ist der rezessive Buszustand ohne dass ein Knoten sendet
- SOF (Start Of Frame) wenn ein Knoten zu senden beginnt zieht er den Bus für ein Bit auf 0
- Identifier oder SID (11 Stellen) kennzeichnet die Botschaft (z.B. Außentemperatur = 0b11111111111)
- Payload sind die eigentlichen Nutzdaten (z.B. 23°C = 0b00010111) und können je Frame zwischen 1 bis 8 Byte lang sein.
- DLC ist das Data Length Code (4 Stellen) und beinhaltet die Länge des Payloads in Byte (z.B. 1 Byte = 0b0001)
- CRC ist eine vom Controller berechnete Prüfziffer von 15 Bit Länge
- RTR Remote Transmission Request dient zum Anfordern einer benötigten Botschaft. (1 = Remote Frame, 0 = normaler Data Frame)
- R1/R0 R1=1 kennzeichnet eine Botschaft mit erweitertem Identifier (29 statt 11 Bits). R0=1 kennzeichnet einen erweiterten CAN FD Frame mit einem Payload bis 64 byte Länge.
- ACK (Acknowledge) wird von einem Knoten gesendet der die Botschaft empfangen hat.
- EOF/IFS End Of Frame und InterFrame Space sind Bereiche in denen der Bus freigehalten werden muss. Also kein Knoten zu senden beginnt.
Frame Priorisierung
Der CAN Bus hat kein Master-Steuergerät welches den Datenverkehr regeln kann. Es gibt auch keine gemeinsame zeitliche Folge der gesendeten Frames. Jeder Knoten sendet seine Botschaften allein nach seinem eigenem Programmablauf. Damit es nicht zur Kollision auf dem CAN Bus kommt gibt es eine Frame Priorisierung anhand des Botschafts-Identifiers. Beginnen zwei oder mehr Knoten nach dem IFS (Inter Frame Space) zu senden vergleicht jeder Sendeknoten gleichzeitig den Buspegel. Sender der Knoten ein rezessives Bit (=1) und ein anderer Knoten hat den Bus dominant auf 0 gezogen beendet der erste Knoten seine Sendeversuch und holt diesen später nach. Je niedriger der Identifier desto priorisierter ist seine Botschaft.
Arten von CAN Frames
Data Frame
Data Frame ist der Standard CAN Frame mit dem die Botschaften regelmäßig übertragen werden (siehe Abbildung im vorigen Abschnitt)
Remote Frame
Der Remote Frame dient zum Anfordern einer benötigten Botschaft von einem anderen Knoten. Im Gegensatz zum kompletten Data Frame ist das RTR Bit auf 1 und der Payload nicht vorhanden.
Error Frame
Ein Error Frame wird von einem Knoten gesendet wenn eine Botschaft als fehlerhaft erkannt wird. Schon während des Sendevorgangs gleich nach dem erkannten fehlerhaften Bit wird der Bus für 6-12 Bits auf LOW gezogen. Nach 11 Bit Busruhe kann eine neue Botschaft gesendet werden.
Overload Frame
Ein Overload Frame sendet ein Knoten wenn er mehr Zeit für die Verarbeitung der Botschaft benötigt. Genau nach dem EOF zieht der Knoten den Bus für 6-12 Bit auf LOW. Anschließend gibt es eine Busruhe von 8 Bit bevor der IFS beginnt.
Auswerten eines CAN Verlaufs mit dem Oszilloskop
Damit sich der Empfänger eines Frames auf die Busgeschwindigkeit des Senders einstellen kann werden Taktflanken
benötigt. Damit die Zeitdauer zwischen zwei Taktflanken nicht zu lange dauert wird spätestens nach 5 gleichen Bit
ein Gegenbit (=Stuff-Bit) gesendet. Diese Stuff-Bit bleiben bei der Auswertung unberücksichtigt.
Wichtig! Ein
Stuff-Bit wird immer nach 5 gleichen Bit gesendet, auch wenn danach sowieso ein entgegengesetztes Bit gesendet
wird.