ISO 15765-2 [ 1 ] oder ISO-TP (Transportschicht) ist ein internationaler Standard für die Übertragung von Datenpaketen über einen CAN-Bus . [ 2 ] Das Protokoll ermöglicht den Transport von Nachrichten, die die maximale Nutzlast von acht Byte pro CAN- Frame überschreiten . Längere Nachrichten werden in mehrere Frames segmentiert und mit Metadaten (CAN-TP-Header) versehen, die es dem Empfänger ermöglichen, die einzelnen Frames zu interpretieren und zu einem vollständigen Nachrichtenpaket zusammenzusetzen. Ab der Version von 2016 [ 2 ] können bis zu 2<sup> 32 </sup> - 1 (4294967295) Byte Nutzlast pro Nachrichtenpaket übertragen werden. Frühere Versionen waren auf eine maximale Nutzlastgröße von 4095 Byte beschränkt.
Im OSI-Modell umfasst ISO-TP die Schichten 3 (Netzwerkschicht) und 4 (Transportschicht).
Die häufigste Anwendung für ISO-TP ist die Übertragung von Diagnosemeldungen mit OBD-II- ausgestatteten Fahrzeugen unter Verwendung von KWP2000 und UDS , wird aber auch in anderen anwendungsspezifischen CAN-Implementierungen breit eingesetzt, bei denen möglicherweise längere Meldungen gesendet werden müssen, als die physikalische Schicht des CAN-Protokolls zulässt (acht Bytes für CAN, 64 Bytes für CAN FD und 2048 Bytes für CAN-XL).
ISO-TP kann mit eigener Adressierung ( erweiterte Adressierung) oder ohne Adresse, also nur mit der CAN-ID ( normale Adressierung ), betrieben werden. Bei der erweiterten Adressierung wird das erste Datenbyte jedes Frames als zusätzliches Adresselement verwendet, wodurch die Nutzdaten der Anwendung um ein Byte reduziert werden. Die nachfolgende Protokollbeschreibung basiert zur Verdeutlichung auf der normalen Adressierung mit acht Byte langen CAN-Frames. Insgesamt erlaubt das ISO-15765-2-Protokoll sechs Adressierungsarten.
ISO-TP fügt den Nutzdaten im acht Byte langen CAN-Frame ein oder mehrere Metadatenbytes voran und reduziert so die Nutzdaten auf sieben oder weniger Bytes pro Frame. Diese Metadaten werden als Protokollsteuerungsinformationen (PCI) bezeichnet. Die PCI umfasst ein, zwei oder drei Bytes. Das erste Feld besteht aus vier Bits, die den Frame-Typ angeben und implizit die PCI-Länge beschreiben.
ISO 15765-2 ist ein Teil der ISO 15765 (Überschrift: Straßenfahrzeuge – Diagnosekommunikation über Controller Area Network (DoCAN) ), die folgende Teile umfasst:
- ISO 15765-1 Teil 1: Allgemeine Informationen und Anwendungsfalldefinition
- ISO 15765-2 Teil 2: Transportprotokoll und Netzwerkschichtdienste
- ISO 15765-3 Teil 3: Implementierung einheitlicher Diagnosedienste (UDS über CAN) – ersetzt durch ISO 14229-3 Straßenfahrzeuge – Einheitliche Diagnosedienste
- ISO 15765-4 Teil 4: Anforderungen an emissionsbezogene Systeme
Liste der Feldtypen für Protokollsteuerungsinformationen (PCI).
Die ISO-TP definiert vier Rahmentypen:
| Typ | PCI-Code | Beschreibung |
|---|---|---|
| Einzelbild (SF) | 0 | Der übertragene Einzelrahmen enthält die vollständige Nutzlast von bis zu 7 Bytes (normale Adressierung) oder 6 Bytes (erweiterte Adressierung). |
| Erstes Bild (FF) | 1 | Der erste Frame eines Mehrframe-Pakets wird verwendet, wenn mehr als 6/7 Datenbytes übertragen werden sollen. Der erste Frame enthält die Länge des gesamten Pakets und die ersten Daten. |
| Aufeinanderfolgendes Bild (CF) | 2 | Ein Frame, der nachfolgende Daten für ein Mehrframe-Paket enthält |
| Flusssteuerungsrahmen (FC) | 3 | Antwort des Empfängers, die den Beginn eines Mehrbildpakets bestätigt. Dient zur Steuerung des Tempos der aufeinanderfolgenden Bilder. |
| Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | ||
|---|---|---|---|---|---|---|---|---|---|
| High Nibble | Niedrige Nibble | Vollständiges Byte (0x00-0xFF) | Vollständiges Byte (0x00-0xFF) | Vollständiges Byte (0x00-0xFF) | " | " | " | " | |
| Einzel | 0x0 | Länge (0x1..0x7) | Daten A | Daten B | Daten C | ... | ... | ... | ... |
| Erste | 0x1 | Länge (0x008..0xFFF) | Daten A | Daten B | ... | ... | ... | ... | |
| Aufeinanderfolgend | 0x2 | Index (0x0..0xF) | Daten A | Daten B | Daten C | ... | ... | ... | ... |
| Durchflusssteuerung | 0x3 | FC-Flag (0x0,0x1,0x2) | Blockgröße | STmin | ... | ... | ... | ... | ... |
Eine Nachricht von maximal sieben Bytes wird in einem einzelnen Frame gesendet, wobei das erste Byte den Typ (0) und die Nutzdatenlänge (1–7 Bytes) enthält. Da das Typfeld mit 0 beginnt, kann dies auch als einfacheres Protokoll mit einem Längen-Daten-Format interpretiert werden und wird häufig fälschlicherweise so verstanden.
Eine Nachricht, die länger als 7 Byte ist, muss in mehrere Frames aufgeteilt werden. Eine segmentierte Übertragung beginnt mit einem ersten Frame. Der PCI (Paketinformationsblock) besteht in diesem Fall aus zwei Bytes, wobei die ersten 4 Bit den Typ (Typ 1) und die folgenden 12 Bit die Nachrichtenlänge (ohne die Bytes für Typ und Länge) angeben. Der Empfänger bestätigt die Übertragung mit einem Flusssteuerungs-Frame. Dieser Flusssteuerungs-Frame enthält drei PCI-Bytes, die das Intervall zwischen aufeinanderfolgenden Frames und die maximale Anzahl der zu sendenden Frames ( Blockgröße ) festlegen.
Für CAN FD wurde das ISO 15765-2-Protokoll für Single und First Frame erweitert, um größere Größenwerte zu ermöglichen, ist aber weiterhin abwärtskompatibel mit dem herkömmlichen ISO 15765. Siehe CAN FD .
| Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | ||
|---|---|---|---|---|---|---|---|---|---|
| High Nibble | Niedrige Nibble | Vollständiges Byte (0x00-0xFF) | Vollständiges Byte (0x00-0xFF) | Polsterung | " | " | " | " | |
| Beschreibung | Flussstatus | Blockgröße | Trennungszeit (ST), minimale Verzögerungszeit zwischen Einzelbildern (Ende des einen Einzelbildes und Beginn des nächsten) | ||||||
| Einzel | 0x3 | 0 = Weiter senden 1 = Warten 2 = Überlauf/Abbruch | 0 = verbleibende "Frames", die ohne Flusssteuerung oder Verzögerung gesendet werden sollen. | <= 127 (0x00 bis 0x7F), Trennungszeit in Millisekunden. | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 |
| Einzel | 0x3 | 0 = Weiter senden 1 = Warten 2 = Überlauf/Abbruch | > 0 Anzahl der "Frames" senden, bevor auf den nächsten Flusssteuerungsframe gewartet wird | 0xF1 bis 0xF9 UF (100-900 μs). | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 |
| Nachrichtenrichtung | Rahmentyp | Datenbytes (Hex-Format) | Interpretation |
|---|---|---|---|
| Senden | Bild 1 | 10 0F 11 22 33 44 55 66 | PCI-Code = 0x1, Länge der gesamten Nachricht = 0x00F, erste 6 Bytes Daten |
| Empfang | Durchflusssteuerung | 30 00 00 00 00 00 00 00 | PCI-Code = 0x3, 0x0 = Fortfahren, keine Verzögerung, Auffüllung |
| Senden | Bild 2 | 21 77 88 99 AA BB CC DD | PCI-Code = 0x2, Nachrichtenindex = 0x1, nächste 7 Bytes Daten |
| Senden | Bild 3 | 22 EE FF | PCI-Code = 0x2, Nachrichtenindex = 0x2, letzte 2 Bytes Daten |
Das erste Byte enthält in den ersten vier Bits den Typ (Typ = 3) und in den nächsten vier Bits ein Flag, das angibt, ob die Übertragung zulässig ist (0 = Weiter senden, 1 = Warten, 2 = Überlauf/Abbruch). Das nächste Byte ist die Blockgröße, also die Anzahl der Frames, die gesendet werden dürfen, bevor auf den nächsten Flusssteuerungs-Frame gewartet wird. Der Wert Null ermöglicht das Senden der verbleibenden Frames ohne Flusssteuerung oder Verzögerung. Das dritte Byte ist die minimale Trennungszeit (STmin), die minimale Verzögerungszeit zwischen Frames. STmin-Werte bis 127 (0x7F) geben die minimale Verzögerung in Millisekunden zwischen Frames an, während Werte im Bereich von 241 (0xF1) bis 249 (0xF9) Verzögerungen von 100 bis 900 Mikrosekunden festlegen. Die Trennungszeit ist definiert als die minimale Zeit zwischen dem Ende eines Frames und dem Beginn des nächsten. Robuste Implementierungen sollten darauf vorbereitet sein, Frames von einem Sender zu akzeptieren, der dies fälschlicherweise als Frame-Wiederholungsrate (d. h. von Frame-Anfang zu Frame-Anfang) interpretiert. Selbst sorgfältige Implementierungen können den geringfügigen Effekt von Bit-Stuffing in der physikalischen Schicht möglicherweise nicht berücksichtigen.
Der Sender überträgt den Rest der Nachricht in aufeinanderfolgenden Frames (CF). Jeder CF besteht aus einem Byte PCI (Phantom-Consecutive-Frame), das aus einem vierstelligen Typ (Typ = 2) und einer vierstelligen Sequenznummer besteht. Die Sequenznummer beginnt bei 1 und wird mit jedem gesendeten Frame inkrementiert (1, 2, ..., F, 0, 1, ...). Mithilfe dieser Sequenznummer lassen sich verlorene oder verworfene Frames erkennen. Jeder aufeinanderfolgende Frame beginnt bei 0, da die ersten Daten des ersten Frames als Daten 0 betrachtet werden. Die ersten CF beginnen also bei 0x1. Sobald 0x2F erreicht ist, beginnt die Zählung wieder bei 0x20 (z. B. 0x21, 0x22, 0x23, ..., 0x2F, 0x20, 0x21, ...). Das 12-Bit-Längenfeld (wie im ersten Frame angegeben) erlaubt bis zu 4095 Byte Benutzerdaten in einer segmentierten Nachricht, aber in der Praxis ist die typische anwendungsspezifische Grenze aufgrund von Empfangspuffer- oder Hardwarebeschränkungen deutlich niedriger.
Zeitparameter
Zeitliche Parameter wie die Timer P1 und P2 müssen erwähnt werden.
Standards
Referenzen
- ^ „ISO 15765-2:2016“ . ISO . Abgerufen am 5. April 2019 .
- ^ a b „ISO 15765-2 (ISO-TP) — Die Linux-Kernel-Dokumentation“ . docs.kernel.org . Abgerufen am 12.09.2025 .
