Mikrocomputertechnik Thema: Controller Area Network (CAN)
Allgemeines zum CAN Vernetzung von Steuergeräten im Automobil Motivation: Reduktion der Kabelbäume im Automobil und damit verbundene Gewichtseinsparung Asynchrones und serielles Bussystem Multi-Master-Prinzip 1983 von BOSCH für den Einsatz im Automobil entwickelt Heute gibt es weitere Einsatzgebiete, wie z.b. Gebäudeleittechnik, Produktionsautomatisierung, Medizintechnik, etc. Folie 2
Unterscheidungskriterien von Bussystemen Adressierung Teilnehmeradressierung Nachrichtenadressierung Mechanismen zur Datensicherung Physikalische Absicherung: z.b. störresistentere Übertragung durch Abschirmung der Kabel Logische Absicherung: z.b. Cyclic Redundancy Checks (CRC) Checksumme sichert Daten Timing des Nachrichtenversands (Scheduling) Zeitscheibenverfahren: Alle Busteilnehmer verwenden gemeinsame Zeitbasis um den Datenversand zu steuern Ereignisgesteuerte Übermittlung: Jeder Teilnehmer greift auf Bus zu, sobald Daten verteilt werden sollen. Kollisionsvermeidung notwendig! Folie 3
Unterscheidungskriterien von Bussystemen Framing Größere Datensequenzen werden auf mehrere Botschaften (Frames) verteilt Hintergrund: Dauerhafte Belegung des Busmediums bei großen Datenmengen soll vermieden werden Zu hohe Segmentierung verringert Bandbreite, da in einem Frame nicht nur Nutzdaten sondern auch Steuerinformationen gesendet werden Folie 4 Datenrate Ein Bussystem wird in der Regel auch nach den Anforderungen der Datenrate ausgewählt Beispiele: CAN bis 1MBit/s FlexRay bis 10 MBit/s (pro Kanal) LIN bis 20 kbit/s
Grundlagen CAN-Bus Adressierung Nachrichtenadressierung über 11-Bit breiten Identifier Mechanismen zur Datensicherung i.d.r. physikalische als auch logische Datensicherung Timing des Nachrichtenversands (Scheduling) Ereignisgesteuerte Übermittlung Framing Segmentierung in bis zu 8 Bytes Nutzdaten (inkl. Protokollinformationen bis zu 130 Bits/Frame) Unterschiedliche Frame-Typen: Daten-, Remote-, Error- und Overload-Frame Folie 5 Datenrate CAN bis 1MBit/s
Grundlagen CAN-Bus Übertragung erfolgt seriell, also Bit für Bit Unterscheidung Buspegel: Dominanter Pegel (log. 0), Rezessiver Pegel (log. 1) Physikalische Auswertung des Buspegels über Differenzverfahren U/V Störung 3,5 U 1 = U 12 U 1 U 2 CAN_HIGH 2,5 CAN_LOW 1,5 rezessiv 1 dominant 0 rezessiv 1 t Folie 6
Grundlagen CAN-Bus Bitweise Arbitrierung der Identifier verhindert Kollisionen auf dem Bus Sender überwacht Bus, während er Identifier sendet Gleichzeitiges Senden zweier Teilnehmer: Erstes dominantes Bit (log. 0) überschreibt rezessives Bit (log. 1) des jeweils anderen Teilnehmers Verlierer erkennt dies und bricht Übertragungsversuch ab Durch dieses Verfahren ergibt sich zudem eine Priorisierung der Nachrichten Kleinster Indentifier besitzt höchste Priorität Folie 7
Grundlagen CAN-Bus Bus Logik Wired-And-Funktion 5V Bus S1 E1 Transceiver 1 S2 E2 Transceiver 2 S3 E3 Transceiver 3 Folie 8
Grundlagen CAN-Bus Prinzip der bitweisen Busarbitrierung Identifier Steuergerät 1 ID = 0x653 10 9 8 7 6 5 4 3 2 1 0 Steuergerät 2 ID = 0x65B 10 9 8 7 6 5 4 3 Steuergerät 1 setzt sich durch Buspegel 10 9 8 7 6 5 4 3 2 1 0 Folie 9
Grundlagen CAN-Bus CAN Data Frame Folie 10
Grundlagen CAN-Bus Zwischen µc und physikalischem CAN-Bus befindet sich der CAN- Transceiver ( Kofferwort aus Transmitter und Receiver) Er übernimmt die Pegelanpassung für den Bus und die TTL-Pegel zum Anschluss an den µc TTL-Pegel: 0V (logisch 0) und 5V (logisch 1) µc sieht somit nichts von der verwendeten Differenzspannung zwischen CAN_HIGH und CAN_LOW; CAN-Transceiver setzt Differenzspannung in TTL-Pegel um XC888 besitzt zwei CAN-Knoten Multi-CAN-Einheit CAN-Transceiver müssen extern angeschlossen werden Folie 11
Grundlagen CAN-Bus Folie 12
Grundlagen CAN-Bus CAN-Netzwerk besteht aus mehreren CAN-Knoten Zwischen den Nachrichtenleitungen muss ein Abschlusswiderstand von 60 Ohm angeschlossen werden Meist zwei parallel geschaltete 120 Ohm Widerstände Möchte man im Labor mehrere Eval-Boards in einem Netzwerk verwenden, müssen ggf. überschüssige Abschlusswiderstände entfernt werden (sonst zu geringer Widerstandswert) Folie 13
Multi-CAN-Modul CAN-Controller CAN-Node 0 und CAN-Node 1 Folie 14
CAN-Controller Dient als Schnittstelle zum CAN-Transceiver Besitzt konfigurierbare Intelligenz Folie 15
Multi-CAN-Modul Message Object Buffer Folie 16
Message Object Buffer Puffer, welcher die kompletten Nutzdaten (max. 8 Byte) von bis zu 32 CAN-Nachrichten ( Frames) speichern kann Des weiteren beinhaltet er noch eine Reihe von Kontroll-Flags für jedes Message Object (Nachrichtenobjekt) Bei der Initialisierung wird das entsprechende Nachrichtenobjekt einem der beiden CAN-Knoten zugewiesen Folie 17
Message Object Buffer Mehrere Nachrichtenobjekte pro Knoten Woher weiß Nachrichtenobjekt, dass empfangene Nachricht für ihn bestimmt ist? Wie wird Zugriff auf den CAN-Knoten geregelt, falls mehrere Nachrichtenobjekte zeitgleich zugreifen wollen? Antwort: Linked List Control Folie 18
Multi-CAN-Modul Linked List Control Folie 19
Linked List Control Regelt Priorisierung der Nachrichtenobjekte Regelt Zuweisung der Nachrichtenobjekte zu den einzelnen Knoten Arbeitet intern mit mehreren verketteten Listen Verwaltet werden die Listen über einen Befehlssatz Damit wird sichergestellt, dass Listen immer definierten, gültigen Zustand besitzen (Fehlkonfigurationen durch Programmierer werden somit vermieden) Folie 20
Multi-CAN-Modul CAN Control Folie 21
CAN Control Steuert Zugriff auf die Linked List Control Einheit sowie auf die Nachrichtenobjekte Folie 22
Multi-CAN-Modul Interrupt Controller Folie 23
Interrupt Controller Sind die entsprechenden Interrupts aktiviert, steuert der Interrupt Controller eventuelle Sprünge in eine Interrupt Routine Knotenspezifische Interrupts Bei Fehlern im Versand oder beim Empfang von CAN-Nachrichten Nach erfolgreichem Versand oder Empfang einer beliebigen Nachricht im CAN-Knoten Nachrichtenspezifische Interrupts Nach erfolgreichem Versand oder Empfang einer bestimmten Nachricht in einem bestimmten Nachrichtenobjekt Folie 24
Multi-CAN-Modul Clock Control Folie 25
Clock Control Erzeugt den Takt des CAN-Kernels Folie 26
Multi-CAN-Modul Access Mediator Folie 27
Access Mediator Konfigurationsmöglichkeiten des CAN-Moduls sind sehr umfangreich Mit herkömmlichem SFR, Mapping und Pagging nicht machbar Diese Aufgabe übernimmt der Access Mediator Die Konfigurations-Register des CAN-Moduls sind nicht mehr Teil des XC800-Kerns Es existieren wenige SFR, welche als Transferregister zwischen XC800-Kern und CAN-Modul dienen Sie werden über die CPU angesprochen und führen Lese- und Schreibzugriffe auf den eigentlichen CAN- Registern aus Folie 28
Access Mediator Durch die Abtrennung des CAN-Moduls vom XC800- Kern ist Registerbreite nicht mehr auf 8 Bit beschränkt CAN-Register sind daher 32-Bit (4 Byte) breit Sie besitzen eine 16-Bit Adresse Kommunikation erfolgt über die nachfolgenden SFR im XC800-Kern Folie 29
Access Mediator - Kommunikationsregister CAN_ADLH Speichert die Adresse des zu lesenden oder zu beschreibenden CAN-Registers Muss 16-Bit Wert speichern können und ist daher aus zwei 8-Bit SFR aufgebaut Über die Variable CAN_ADLH kann aber auf die kompletten 16-Bit gleichzeitig zugegriffen werden Zuordnung der Registernamen des CAN-Moduls zu den jeweiligen Adressen über Datei hska_can.h CAN_DATA0,, CAN_DATA3 Speichert den Inhalt des entsprechenden CAN-Registers Dient als Quelle beim Schreiben bzw. als Ziel beim Auslesen Folie 30
Access Mediator - Kommunikationsregister CAN_ADCON 8-Bit breites Kontrollregister Steuert die Art der Kommunikation zwischen XC800-Kern und CAN-Modul Schreiben/Lesen Es können auch nur einzelne, dedizierte Datenbytes CAN_DATA0,, CAN_DATA3 gelesen bzw. geschrieben werden Beinhaltet Busy-Flag zur Statuskontrolle eines aktuellen Transfervorgangs Verwendung Busy-Flag: Während Transfer ist Schreiben bzw. Lesen der Register CAN_ADLH und CAN_DATA nicht zulässig Kontrolle über Busy-Flag Folie 31
Access Mediator - Kommunikationsregister Special Function Register XC800-Kern User Manual: Tabelle 15-6 (Seite 489) CAN-Register Multi-CAN-Modul User Manual: Tabelle 15-5 (Seite 488-489) Folie 32
Access Mediator - Kommunikationsregister Beispiel 1 In Register CAN_NPCR0 des CAN-Knoten 0 soll Byte mit Wert 1 geschrieben werden // Adresse von NPCR0 in CAN_ADLH laden CAN_ADLH = CAN_NPCR0; // Inhalt für Byte 1 in CAN_DATA1 laden CAN_DATA1 = 0x01; // Schreibvorgang, nur CAN_DATA1 ist gültig CAN_ADCON = 0x21; while(can_adcon & 0x02){;} Folie 33
Access Mediator - Kommunikationsregister Beispiel 2 Inhalt von Register CAN_MODATAL1 in Variable empfang speichern unsigned char empfang; //... //Adresse von CAN_MODATAL1 in CAN_ADLH laden CAN_ADLH = CAN_MODATAL1; // Inhalt MODATAL1 ist 32-bit groß // lese 32-Bit in CAN_DATA0,..., CAN_DATA3 CAN_ADCON = 0x00; while(can_adcon & 0x02){;} empfang = CAN_DATA0; Folie 34
Konfiguration der CAN-Knoten CAN-Knoten: Schnittstelle zwischen Nachrichtenobjekt und CAN- Transceiver Freischaltung Interrupts Freischalten des CAN-Knotens für Betrieb am Bus und Freischalten der Konfiguration des Knotens Festlegung des zugehörigen Interrupt-Knotens beim Auftreten von Interrupt-Ereignissen Festlegung der physikalischen Ein-/Ausgangsports zu den Transceivern. Alternativ interne Verbindung der zwei CAN- Knoten Folie 35 Definition der Datenrate und Abtastzeitpunkt innerhalb eines Bitintervalls Dies ist die Basis-Konfiguration eines CAN-Knotens. Es gibt weitere Konfigurationsmöglichkeiten, auf die in der Vorlesung/im Labor jedoch nicht weiter eingegangen wird
Konfiguration der CAN-Knoten Register NCR0 Zu setzende Flags INIT, CCE NSR0 Initialwert NIPR Initialwert NPCR0 LBM NBTR0 Numerische Werte : Prescaler + Jump Width, TSEG1, TSEG2 Folie 36
Konfiguration der CAN-Knoten: Bit-Timing Bit-Zeit wird in Anzahl von Zeitquanten aufgeteilt Zeitquanten dienen zur Definition von Synchronisationszeitpunkt Abtastzeitpunkt Sendezeitpunkt Folie 37
Konfiguration der CAN-Knoten: Bit-Timing In unserem Beispiel ergeben sich folgende Werte Synchronisation T Sync : 1 Zeitquantum Segment 1 T Seg1 : 5 Zeitquanten Segment 2 T Seg2 : 4 Zeitquanten Folie 38
Konfiguration der CAN-Knoten: Bit-Timing Datenrate = 100 kbit Clk CAN = 48MHz / s Zeitquanten _ pro _ Bit Zeit Sync Seg1 Seg 2 Quantendauer = = T + T 1 Datenrate + T Zeitquanten _ pro _ Bit Zeit = = 1+ 5 + 4 = 10 1 100.000 10 bit s = 1µs Takte _ Quantendauer = Clk CAN * Quantendauer = 48MHz *1µs = 48 Folie 39
Konfiguration der CAN-Knoten: Bit-Timing (BRP + 1) = Takte_Quantendauer BRP = 47 (SJW + 1) = 2 SJW = 1 (Info: Wert 2 wurde gewählt) (TSEG1 + 1) = T Seg1 TSEG1 = 4 (TSEG2 + 1) = T Seg2 TSEG2 = 3 DIV8 TSEG2 TSEG1 SJW BRP 0 0 1 1 0 1 0 0 0 1 1 0 1 1 1 1 Data 1 = 0x34 Data 0 = 0x6F Folie 40
Verkettete Liste der Nachrichtenobjekte Die 32 Nachrichtenobjekte des Message Object Buffers sind initial keinem CAN-Knoten zugeordnet Anhand Listenkonfiguration werden einzelne Nachrichtenobjekte den beiden Knoten zugeordnet Es gibt drei Listen Liste 0: Nachrichtenobjekte ohne Zuordnung zu CAN-Knoten Liste 1: Nachrichtenobjekte mit Zuordnung zu CAN-Knoten 0 Liste 2: Nachrichtenobjekte mit Zuordnung zu CAN-Knoten 1 Priorisierung von Nachrichtenobjekten mittels Listenindex Bsp.: Mehre Nachrichtenobjekte möchten Informationen senden Nachrichtenobjekt mit geringstem Listenindex darf zuerst senden Verwaltung der Listen erfolgt über höherwertigen Befehl des CAN- Moduls Folie 41
Verkettete Liste der Nachrichtenobjekte Register CAN_PANCTR Zu setzende Flags Command 0x02 ausführen: Statischen Hinzufügen eines Knoten zu einer Liste Folie 42
Konfiguration der Nachrichtenobjekte Freischalten des Nachrichtenobjekts Definition: Nachrichtenobjekt stellt Empfangs- oder Sendepuffer dar Freischalten der Versendung oder des Empfangs von Nachrichten Bereitstellung eines Bits zum Anstoßen einer Datenversendung Bereitstellung von Flags, welche aktuelle Versendung bzw. aktuellen Empfang anzeigen Bereitstellen von Flags zur Anzeige, ob aktuelles Nachrichtenobjekt bereits versendet ist respektive ausgelesen wurde oder ob Update des Objekts stattgefunden hat Angabe der Länge der Nutzdaten (0 8 Byte) Selektion der Interrupt-Knoten Festlegung des Identifiers sowie Maskierung zum Vergleich bei Nachrichtenempfang Folie 43
Konfiguration der Nachrichtenobjekte Register MOCTR0 MOFCR0 MOFGPR0 MOIPR0 MOAMR0 MODATAL0 MODATAH0 MOAR0 Zu setzende Flags DIR, TXEN0, TXEN1, MSGVAL MMC, DLC Nicht benötigt Nicht benötigt Transmit: Nicht benötigt Receive: Initialwert Wir für späteren Datenaustausch verwendet Wird nicht benötigt Numerische Werte: Nachrichtenprio, Frame-Type, CAN-Identifier Folie 44
Zusammenfassung Konfiguration Für unser Beispielprogramm wird folgendes konfiguriert: 1. Listeninitialisierung a) Warten bis Listen initialisiert wurden (interner Prozess) 2. CAN-Knoten 0 & 1 konfigurieren a) Knoten aus Traffic entfernen und für Konfiguration freigeben b) Loop-Back Mode aktivieren (CAN-Knoten intern miteinander verbinden) c) Bit-Timing einstellen (siehe vorherige Folien) 3. Nachrichtenobjekte 0 & 1 den verketteten Listen hinzufügen a) Kommando auf verketteten Listen ausführen: Static Allocate Nachrichtenobjekte zu den verketteten Listen hinzufügen i. Message Object 0 List 1 (Liste für Knoten 0) ii. Message Object 1 List 2 (Liste für Knoten 1) b) Warten bis Listen aktualisiert wurden Folie 45
Zusammenfassung Konfiguration 4. Nachrichtenobjekte 0 & 1 konfigurieren a) Message als gültig kennzeichnen ( nimmt damit an CAN-Transfer teil) b) Transmit enable c) Richtung der Nachricht festlegen: Tx oder Rx d) Bei Rx-Message: Rx-Interrupt aktivieren (Nachrichten-spezifischer Interrupt!) e) Anzahl Datenbytes für die entsprechende Nachricht festlegen f) Typ des CAN-Identifiers festlegen (11-Bit oder 29-Bit Identifier) g) CAN-Identifier festlegen h) Nachrichtenpriorisierung festlegen 5. CAN-Knoten 0 & 1 starten a) Für Konfiguration sperren und für CAN-Transfer wieder freigeben Folie 46