LIN
Das Local Interconnect Network (LIN) Bussystem wurde als Low-Cost Bussystem von einem Herstellerkonsortium mit Motorola und Freescale als Halbleiterherstellern und einer Reihe von Automobilherstellern entworfen. Seine Zielsetzung war: Ein Sub-Bussystem für CAN zu schaffen, das für Sensor/Aktor-Netze kostengünstiger als CAN sein sollte.
LIN – Local Interconnect Network |
LIN verwendet als Buszugriffsverfahren das Master-Slave-Prinzip. Ein Mastersteuergerät, das in der Regel gleichzeitig als Gateway zwischen LIN und CAN funktioniert, teilt den einzelnen Slave-Steuergeräten durch eine Master-Request-Botschaft jeweils die Sendeberechtigung zu. Die Slave-Knoten selbst benötigen keine Konfigurationsinformationen und haben geringe Anforderungen an die Taktgenauigkeit. Sie können so kostengünstig evtl. sogar ohne Quarz ausgeführt werden. Das Bussystem enthält relativ wenige Mechanismen zur Erkennung von Übertragungsfehlern und kaum Mechanismen zur Fehlerkorrektur. Dies muss alles innerhalb der Software umgesetzt werden.
LIN Versionsgeschichte |
LIN hat trotz seiner relativ jungen Geschichte bereits eine ganze Reihe von Versionen durchlaufen: Spezifikationsversionen, die immer umfangreicher wurden. Die Version 1.3 wurde als erste Version richtig eingesetzt. Kurz danach kam jedoch schon 2.0 und im Jahr 2006 die Version 2.1. Zu den Erweiterungen, die nicht alle aufwärtskompatibel sind, gehört unter anderem die Fähigkeit, dass Diagnosebotschaften von KWP 2000 oder UDS über LIN getunnelt werden können.
Das LIN-Bussystem selbst hat einen sehr einfachen physikalischen Layer. Auch die Anforderungen an die Mikrokontroller zur Implementierung von LIN sind gering. Man braucht keinen Kommunikationscontroller – ein einfacher UART genügt. Der Rest des Protokolls kann in Software abgewickelt werden. Dennoch sollte man bei LIN Sub-Bussystemen nicht unterschätzen, dass insbesondere die Gateway-Funktionalitäten zwischen CAN und LIN, sowie das Anpassen unterschiedlicher Timings, diese Gesamtfahrzeugnetze relativ komplex machen.
Physical Layer und Bus-Topologie
Die Übertragung arbeitet zeichenbasiert mit UART-ähnlichen Zeichen. Der Physical-Layer entspricht im Wesentlichen der K-Line. Das heißt, es handelt sich um einen Ein-Draht-Bus mit Batteriespannungspegel. Es ist kein Kommunikationscontroller notwendig. Das Protokoll ist so einfach, dass es mit jedem UART bzw. der entsprechenden Software implementiert werden kann. Die Anforderungen an das Timing sind, wie schon gesagt, relativ gering. Ein Master kann eine ganze Reihe von Slaves steuern. Die Bitrate ist im Hinblick auf den einfachen Physical-Layer maximal 20 kbit/s. Real im Einsatz sind Bitraten von 9,6 kbit/s, 10,4 kbit/s oder 19,2 kbit/s.
Physical Layer und Bus-Topologie |
Data Link Layer
Das Bussystem verwendet das in der Abbildung dargestellte Botschaftsformat. Der Header wird grundsätzlich vom Master aus gesendet. Dann folgt eine kurze Pause und darauf folgt eine Response. Diese kommt entweder auch vom Mastersteuergerät, wenn der Master etwas an die Slaves zu senden hat oder von einem Slave-Steuergerät, wenn eine Antwort erwartet wird.
LIN Botschaftsformat |
Der Header beginnt mit einer 13 bis 26 Bit langen Null- und einer 1 bis 14 Bit langen High-Bitfolge. Danach kommt ein Byte mit abwechselnd Nullen und Einsen, das so genannte Sync-Byte. Das Sync-Byte der Synchronisation der Empfänger auf die Bitrate des Mastersteuergerätes. Danach folgt der so genannte Protected-Identifier (PID) – eine Art Message-Identifier mit einer ganz ähnlichen Funktion wie bei CAN. Er kennzeichnet eindeutig den Inhalt der Botschaft und auch den Sender der folgenden Response. Denn bei der Entwicklung wurde bereits eindeutig festgelegt, welches Steuergerät auf welche PID eine Response zu senden hat. Die PID enthält nur 6 Bit für die eigentliche PID. Das heißt, es gibt maximal 64 verschiedene Botschaften. Zwei weitere Bits werden für die Fehlererkennung als Paritäts-Bits verwendet. Im Karosseriebereich sind das sehr häufig Aufgaben, bei denen das Steuergerät auch bei ausgeschalteter Zündung noch funktionieren muss.
Dort ist allerdings der Stromverbrauch wichtig. Deswegen versetzt man Bussysteme und Steuergeräte in diesem Fall häufig in einen Schlaf-Modus, um Energie zu sparen. Um diesen Schlaf-Modus kontrolliert einleiten und auch wieder beenden zu können, hat man in der LIN-Spezifikation vorgesehen, dass das Bussystem nach 4 Sekunden Businaktivität, also wenn der Bus mehr als vier Sekunden in Ruhe war, automatisch in den Sleep-Zustand übergeht. Durch eine vom Master versendete Botschaft mit dem PID 0x3C kann der Bus auch aktiv in den Schlaf-Modus versetzt werden. Umgekehrt kann jedes Steuergerät am LIN-Bus das Bussystem durch einen so genannten Wake-Up-Pattern (WUP) wieder aufwecken. Das Mastersteuergerät muss nach einem Aufweckvorgang innerhalb von 100 ms wieder die reguläre Kommunikation beginnen.
Der Master des LIN-Bussystems arbeitet zeitsynchron. Dieser enthält in der Regel eine so genannte Sceduling-Table, in der festgelegt ist, zu welchem Zeitpunkt welche PID versendet wird. Die Konfiguration des Netzes erfolgt typischerweise mit Hilfe einer so genannten LDF-Datei (LIN-Description-Format).
Angesichts der niedrigen Bitrate ist die Nutzdatenrate mit 1,2 kByte/s relativ bescheiden. Es ist somit ca. 25 Mal langsamer als High-Speed-CAN.
Botschaftstypen
Obwohl bei LIN alle Botschaften immer dasselbe Botschaftsformat verwenden, unterscheidet die Spezifikation folgende unterschiedliche Botschaftstypen:
- Unconditional-Frames (Standardframes)
- Normale zyklisch übertragene Standardframes
- Normale zyklisch übertragene Standardframes
- Event-Triggered-Frames
- Für Daten, sie sich selten ändern
- Mehrere Slaves können auf einen Request antworten
- Es antworten nur die Slaves, bei denen sich Daten geändert haben
- Master erkennt Slave am ersten Datenbyte der Response → PID des Standardframes
- Erkennt der Master Kollision, fragt er die Standardframes ab bevor er wieder Event Triggered Frames sendet
- Nicht deterministisch
- Sporadic-Frames
- Platzhalter in der Scheduling-Table für dynamisches Verhalten des Masters
- Sonst bleibt der Bus in diesem Slot in Ruhe
- Master kann einen von mehreren möglichen PIDs verwenden
- Auswahl der Botschaft über statische Priorität → Scheduling-Table
- Ereignisgesteuert, nicht deterministisch
- Dann, wenn sich Daten im Master geändert haben oder vom Master Antworten gefordert werden (Master als Slave)
- Diagnostic-Frames PID (0x3C und 0x3D)
- Immer mit 8 Datenbytes
- Für Konfiguration und Diagnose der Slaves
- Diagnose über ISOTP oder UDS ohne Flusssteuerung
- Master sendet Diagnose-Request über 0x3C und holt die Response vom Slave über 0x3D ab
- Userdefined-Frames (PID 0x3E)
- Datenfeld darf länger als 8 Byte sein
- Datenfeld darf länger als 8 Byte sein
- Reserved-Frames (PID 0x3F)
- Für zukünftige Erweiterungen
- Darf z.Z. nicht verwendet werden
- Unconditional-Frames (Standardframes)
Unconditional-Frames sind die Standard-Frames, die in jedem Kommunikationszyklus in den entsprechenden Zeitschlitzen versendet werden müssen. Der wesentliche Unterschied von Event-Triggered-Frames gegenüber Standard-Frames besteht darin, dass bei einem Standard-Frame grundsätzlich jedem PID genau ein Steuergerät für die Response zugeordnet ist. Auf die PID eines Event-Triggered-Frames antworten jedoch mehrere Steuergeräte. Sie können das natürlich nicht gleichzeitig. Sollten sie das dennoch tun, kommt es zu einer Kollision. Hier beschreibt die Spezifikation wie solche Kollisionen aufzulösen sind. Ganz ähnlich sind die Sporadic Frames. Diese stellen Platzhalter für Botschaften dar, die nicht in jedem Zeitschlitz versendet werden müssen. Für das Versenden von Diagnosebotschaften hat die Norm zwei PIDs reserviert, eine für den Diagnose-Request (0x3C), die andere für die Diagnose-Response (0x3D). Zwei weitere PIDs (0x3E und 0x3F) sind für zukünftige bzw. herstellerspezifische Erweiterungen reserviert.
Siehe auch
CAN - Controller Area Network