Einleitung
Für meine Hausautomatisierung verwende ich den CAN Bus mit 8 Byte-Telegrammlänge. Das CAN-Protokoll ist für kurze Botschaften perfekt konzipiert. Für höherwertige Funktionen wie Alarmanlagenpanels oder Anzeigedisplays etc. benötige ich aber längere Botschaften. Nach etwas Recherche kommt mir das ISO-TP Protokoll gerade richtig. Es ist einfach, man kann es leicht in Microcontrollern unterbringen und es ist einigermaßen effizient. Später gibts hier eine ISO-TP Library für den STM32 - nur Geduld.
Wie funktioniert ISO TP ?
Es basiert im Grunde auf der gleichen Basis wie das "Standard"-CAN-Protokoll, nur werden Teile der Nutzdaten von 8 Bytes für das Protokoll verwendet. Man kann also weiterhin alle vorhandenen CAN-Stacks und Implementierungen verwenden. Die maximale Telegrammlänge kann bei ISO-TP genau 4095 Bytes betragen.
Telegrammtypen bei ISO-TP
1. SF - Single Frame (Code 0)
2. FF - First Frame (Code 1)
3. CF - Consecutive Frame (Code 2)
4. FC - Flow Control Frame (Code 3)
Zur Unterscheidung der verschiedenen Telegramme werden Protocoll Control Information Bytes (PCI-Byte) in den ersten Nutzbytes untergebracht.
Man unterscheidet bei der Übertragung zwischen Single-Frameformat oder Multiframeformat. Der Telegrammtyp wir immer in den ersten 4 Bits (MSb) kodiert und kann 0,1,2,3 als Wert tragen.
Singleframe-Format (Nutzdaten 1-7 Bytes)
Das bedeutet im ersten CAN-Nutzdatenbyte (Byte 0) wird der Typ und die Länge der Botschaft kodiert, Byte 1-7 enthält dann die Nutzdaten. Also klann man maximal 7 Bytes übertragen mit einem Telegram und man benötigt keine weiteren Telegramme. Immer bezogen auf die orginalen 8 CAN-Nutzdatenbytes).Die ersten 4 Bit kodieren den Telegrammtyp (also 0) diezweiten 4 Bit kodieren die Messagelänge (also 1..7)
Will man also genau 7 Bytes(01..07) übertragen muss der CAN Frame folgende Bytes tragen:
Beispiel : 07 01 02 03 04 05 06 08
0 = Singleframe 7 = Länge der Nutzdaten im Paket
01...07 Beispieldaten
Multiframe-Format (Nutzdaten 8-4095 Bytes)
Dieses Format wird verwendet wenn mehr als 7 und bis zu 4095 Bytes übertragen werden sollen. Beim Multiframeformat wird unterschieden zwischen Firstframe (FF-Paket) und Consecutive-Frame (CF-Paket).
Im FF-Paket sind die ersten beiden Bytes die PCI-Bytes. Die ersten 4 Bit kodieren dann den Telegrammtyp (0x02),die weiteren 12 Bits enthalten dann die Länge der gesamten Botschaft (daher auch nur 4095 Bytes Nutzdaten).
IM CF-Paket ist nur das erste Byte ein PCI-Byte, und enthält die Infomationüber den Pakettyp sowie eine fortlaufende Paketnummer die aber nur von 0 bis 15 zählt. Danach fängt der Counter wieder bei 0 an. So kann der Empfänger herausfinden ob Pakete verlorengegangen sind.