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.