DEENESPTFRRUARHIKOZHNL

CAN Transport Layer (CanTp)

ModulCanTp (CAN Transport Layer)
BSW-Modul-ID35
Standard-Header#include "CanTp.h"
SWS-SpezifikationAUTOSAR_SWS_CANTransportLayer.pdf
ClusterCAN

Modul-GuideKI-GENERIERT

Zerlegt lange Nachrichten in CAN-Frames und setzt empfangene Segmente mit Flusssteuerung wieder zusammen.
KI-GENERIERT ungeprüft Modell: claude-opus-5-5 · Aufwand: high · Temperatur: nicht steuerbar · Prompt: 69cea53d1819 Herkunft Offene Fragen (1)
Kausaler Anker: R20-11 Gültig ab R20-11 Neu synthetisiert für diesen Spezifikationsstand.
KI-generiertclaude-opus-5-5 · 2026-10-13

Zerlegt lange Nachrichten in CAN-Frames und setzt empfangene Segmente mit Flusssteuerung wieder zusammen.

Der CAN Transport Layer zerlegt Nachrichten, die nicht in einen CAN-Frame passen, steuert den Datenfluss per Flow Control und setzt empfangene Segmente nach ISO 15765-2 wieder zusammen [SWS_CanTp_00033]. Er sitzt zwischen PduR und CanIf, hat keinen eigenen Nutzdatenpuffer und kopiert Sende- und Empfangsdaten segmentweise über die Copy-Dienste der oberen Schicht [SWS_CanTp_00298]. Jede angenommene Übertragung schließt er mit einer Meldung an die obere Schicht ab, erfolgreich mit E_OK, bei Timeout oder Abbruch mit E_NOT_OK. Das alles setzt CanTp_Init voraus; die Timeouts überwacht die zyklische MainFunction.

CanTp ist der CAN Transport Layer. Es zerlegt lange Nachrichten in CAN-Frames, steuert den Datenfluss und setzt empfangene Segmente wieder zusammen; dabei folgt es ISO 15765-2, soweit die Spezifikation nichts anderes regelt [SWS_CanTp_00033]. Das Modul sitzt zwischen PduR und CanIf und hat keinen eigenen Nutzdatenpuffer. Die Daten kopiert es segmentweise über die Copy-Dienste der oberen Schicht [SWS_CanTp_00298] [SWS_CanTp_00216].

kontext Nutzer DCM / Com (TP-Nutzer) PduR PduR Nutzer->PduR TP-Dienste CanTp CanTp PduR->CanTp CanTp_Transmit CanTp_CancelTransmit / CanTp_CancelReceive CanTp_ChangeParameter / CanTp_ReadParameter CanTp->PduR PduR_CanTpStartOfReception PduR_CanTpCopyRxData / PduR_CanTpCopyTxData PduR_CanTpRxIndication / PduR_CanTpTxConfirmation CanIf CanIf CanTp->CanIf CanIf_Transmit (SF, FF, CF, FC) Det DET CanTp->Det Det_ReportError Det_ReportRuntimeError CanIf->CanTp CanTp_RxIndication CanTp_TxConfirmation BswM BswM (Modusmanagement) BswM->CanTp CanTp_Init / CanTp_Shutdown Sched Schedule Manager (zyklischer Task) Sched->CanTp CanTp_MainFunction

Kontextdiagramm: Die Schnittstellen von CanTp zu PduR, CanIf, Modusmanagement, Scheduler und DET. Quellen: [SWS_CanTp_00216], SWS CanTp S. 17

Nach dem Einschalten ist CanTp in CANTP_OFF [SWS_CanTp_00168]. CanTp_Init mit CanTp_ConfigType [SWS_CanTp_00208] versetzt alle Verbindungen in den Ruhezustand [SWS_CanTp_00030]; danach gilt CANTP_ON [SWS_CanTp_00170]. CanTp_Shutdown schließt alle Verbindungen, ohne jemanden zu benachrichtigen [SWS_CanTp_00202] [SWS_CanTp_00200]. Die Verbindungskanäle arbeiten unabhängig voneinander mit eigenen Timern [SWS_CanTp_00122]. Ist ein Sendekanal belegt, weist CanTp neue Aufträge mit E_NOT_OK ab [SWS_CanTp_00123].

Beim Senden wertet CanTp_Transmit nur die Länge (und gegebenenfalls MetaData) aus [SWS_CanTp_00225]. Je nach Länge folgt ein SF oder eine segmentierte Sitzung [SWS_CanTp_00232]. Für jedes Segment holt CanTp die Daten mit PduR_CanTpCopyTxData [SWS_CanTp_00086] und wartet nach FF und jedem Block unter N_Bs auf Flow Control [SWS_CanTp_00315]. Interpretation: Der Aufruf meldet nur die Annahme; das Ende des Transfers kommt asynchron über PduR_CanTpTxConfirmation [SWS_CanTp_00176] [SWS_CanTp_00204]. Frage (offen)

Beim Empfang fordert CanTp zuerst mit PduR_CanTpStartOfReception einen Puffer an [SWS_CanTp_00079]. Danach kopiert es jeden CF mit PduR_CanTpCopyRxData [SWS_CanTp_00269]. Ist der Puffer knapp, fragt CanTp ihn in jeder MainFunction erneut ab und sendet höchstens WFTmax FC(WAIT) [SWS_CanTp_00222] [SWS_CanTp_00223]. Am Ende steht PduR_CanTpRxIndication [SWS_CanTp_00084]. Die Timeouts überwacht die zyklische CanTp_MainFunction [SWS_CanTp_00164].

Segmentierter Empfang einer N-SDUCanIfCanTpPduRUse Case: First FrameCanTp_RxIndication(FF)N_Br gestartetPduR_CanTpStartOfReception(TpSduLength)BUFREQ_OK, verfügbare PuffergrößePduR_CanTpCopyRxData(FF-Daten)CanIf_Transmit(FC: CTS, BS, STmin)loopje CF eines BlocksCanTp_RxIndication(CF)PduR_CanTpCopyRxData(6/7 Byte)BUFREQ_OK, RestpufferaltRestpuffer reicht nicht für nächsten BlockN_Br läuftCanTp_MainFunctionPduR_CanTpCopyRxData(Länge 0, NULL_PTR)BUFREQ_OK, RestpufferCanIf_Transmit(FC: WAIT)höchstens WFTmax-malPuffer ausreichendCanIf_Transmit(FC: CTS)Use Case: Letzter Consecutive FrameCanTp_RxIndication(letzter CF)PduR_CanTpCopyRxData()PduR_CanTpRxIndication(E_OK)

Sequenzdiagramm: Segmentierter Empfang mit Pufferaushandlung und Flow Control CTS/WAIT. Quellen: [SWS_CanTp_00269], [SWS_CanTp_00222], SWS CanTp S. 38

Fehler behandelt CanTp auf drei Arten. Entwicklungsfehler meldet es an DET und liefert E_NOT_OK [SWS_CanTp_00294]. Protokollfehler wie Timeouts brechen die Sitzung ab und gehen mit E_NOT_OK an PduR [SWS_CanTp_00205] [SWS_CanTp_00311]. Dasselbe gilt für Abbrüche auf Anforderung über die Cancel-Dienste [SWS_CanTp_00255] [SWS_CanTp_00263]. Für ungültige IDs bei den Cancel-Diensten verlangt R20-11 CANTP_E_PARAM_ID [SWS_CanTp_00254], während neuere Releases andere Codes nennen.

Rolle im CAN-Stack: Transportprotokoll zwischen PduR und CanIf

CanTp ist der CAN Transport Layer. Er zerlegt Nachrichten, die nicht in einen einzelnen CAN-Frame passen, in Segmente, steuert den Datenfluss und setzt empfangene Segmente wieder zusammen (SWS CanTp S. 24, SWS CanTp S. 17). Grundlage ist ISO 15765-2: Jede Empfehlung dieser Norm gilt, sofern die Spezifikation sie nicht ausdrücklich ausschließt [SWS_CanTp_00033]. Segmentierung und Reassemblierung führt CanTp nur im Zustand CANTP_ON aus [SWS_CanTp_00238].

Nach oben stellt CanTp dem PduR folgende Dienste bereit: CanTp_Transmit [SWS_CanTp_00212], CanTp_CancelTransmit [SWS_CanTp_00246] und CanTp_CancelReceive [SWS_CanTp_00257]. Selbst ruft CanTp nach oben PduR_CanTpStartOfReception, PduR_CanTpCopyRxData, PduR_CanTpCopyTxData, PduR_CanTpRxIndication und PduR_CanTpTxConfirmation auf, nach unten CanIf_Transmit [SWS_CanTp_00216]. Die untere Schicht meldet empfangene Frames über CanTp_RxIndication [SWS_CanTp_00078] und Sendebestätigungen über CanTp_TxConfirmation [SWS_CanTp_00076]. Beide Funktionen müssen im Interrupt-Kontext aufrufbar sein [SWS_CanTp_00235] [SWS_CanTp_00236]. Neuere Dokumentstellen nennen als Aufrufer den L-SDU Router (LSduR) (SWS CanTp S. 27). Die Requirements von R20-11 sprechen dagegen vom CAN Interface, etwa [SWS_CanTp_00031] und [SWS_CanTp_00335].

CanTp hat keinen eigenen Nutzdatenpuffer. Sendedaten holt es direkt bei der oberen Schicht ab [SWS_CanTp_00298], empfangene Daten kopiert es unmittelbar in deren Speicher (SWS CanTp S. 35). Daraus ergeben sich Sperrfristen für die obere Schicht (SWS CanTp S. 35):

  • Den Sendepuffer hält sie gesperrt, sobald CanTp_Transmit mit E_OK zurückkehrt, bis PduR_CanTpTxConfirmation eintrifft.
  • Den Empfangspuffer hält sie gesperrt, sobald sie BUFREQ_OK auf PduR_CanTpStartOfReception geliefert hat, bis PduR_CanTpRxIndication eintrifft.
kontext Nutzer DCM / Com (TP-Nutzer) PduR PduR Nutzer->PduR TP-Dienste CanTp CanTp PduR->CanTp CanTp_Transmit CanTp_CancelTransmit / CanTp_CancelReceive CanTp_ChangeParameter / CanTp_ReadParameter CanTp->PduR PduR_CanTpStartOfReception PduR_CanTpCopyRxData / PduR_CanTpCopyTxData PduR_CanTpRxIndication / PduR_CanTpTxConfirmation CanIf CanIf CanTp->CanIf CanIf_Transmit (SF, FF, CF, FC) Det DET CanTp->Det Det_ReportError Det_ReportRuntimeError CanIf->CanTp CanTp_RxIndication CanTp_TxConfirmation BswM BswM (Modusmanagement) BswM->CanTp CanTp_Init / CanTp_Shutdown Sched Schedule Manager (zyklischer Task) Sched->CanTp CanTp_MainFunction

Kontextdiagramm: CanTp sitzt zwischen PduR und CanIf. Es wird vom Modusmanagement initialisiert, vom Scheduler zyklisch angestoßen und meldet Fehler an DET. Quellen: [SWS_CanTp_00216], [SWS_CanTp_00217], [SWS_CanTp_00164], SWS CanTp S. 17, Mode Management Guide S. 54

Lebenszyklus: CANTP_OFF, CanTp_Init und unabhängige Verbindungskanäle

CanTp kennt die Zustände CANTP_OFF und CANTP_ON [SWS_CanTp_00027]. Nach dem Einschalten ist das Modul in CANTP_OFF [SWS_CanTp_00168]; nur dort darf die Post-Build-Konfiguration aktualisiert werden [SWS_CanTp_00169].

CanTp_Init erhält einen Zeiger auf CanTp_ConfigType [SWS_CanTp_00208] [SWS_CanTp_00340]. Die Funktion initialisiert alle globalen Variablen und setzt jede Verbindung in den Ruhezustand CANTP_RX_WAIT bzw. CANTP_TX_WAIT [SWS_CanTp_00030]; danach gilt CANTP_ON [SWS_CanTp_00170]. Die Umgebung muss CanTp_Init vor jeder weiteren Nutzung aufrufen [SWS_CanTp_00199]. Im Leitfaden zum Modusmanagement übernimmt das eine BswM-Regel nach NvM_ReadAll (Mode Management Guide S. 54). Ein erneuter Aufruf in CANTP_ON verwirft alle laufenden Verbindungen und führt in den Ruhezustand zurück [SWS_CanTp_00273] [SWS_CanTp_00111].

CanTp_Shutdown schließt alle offenen Verbindungen, gibt die Ressourcen frei und setzt CANTP_OFF [SWS_CanTp_00202]. Dabei benachrichtigt CanTp niemanden über abgebrochene Übertragungen [SWS_CanTp_00200] (SWS CanTp S. 58).

In CANTP_ON laufen mehrere Verbindungen gleichzeitig [SWS_CanTp_00096]:

  • Jede N-SDU ist statisch einem Verbindungskanal zugeordnet. Jeder Kanal hat eigene Timer, Puffer und eine eigene Zustandsmaschine [SWS_CanTp_00121] [SWS_CanTp_00122].
  • Kanäle sind nur intern sichtbar [SWS_CanTp_00285]. Ihre Anzahl ermittelt das Konfigurationswerkzeug [SWS_CanTp_00289].
  • Ist ein Sendekanal in CANTP_TX_PROCESSING, weist CanTp neue Aufträge über CanTp_Transmit mit E_NOT_OK ab [SWS_CanTp_00123]. Dasselbe gilt für eine N-SDU, die bereits in einer laufenden Sitzung steckt [SWS_CanTp_00206].
  • Teilen sich mehrere N-SDUs einen Kanal und ist kein freier Kanal verfügbar, lehnt CanTp das Senden ab bzw. bricht den Empfang ab [SWS_CanTp_00288] (SWS CanTp S. 42).
lebenszyklus cluster_on CANTP_ON cluster_rx Rx-Verbindungskanal cluster_tx Tx-Verbindungskanal PowerUp Einschalten OFF CANTP_OFF (Post-Build-Konfiguration änderbar) PowerUp->OFF RXW CANTP_RX_WAIT OFF->RXW CanTp_Init (erfolgreich) TXW CANTP_TX_WAIT OFF->TXW CanTp_Init (erfolgreich) RXP CANTP_RX_PROCESSING RXW->RXP SF/FF empfangen RXP->RXW keine weitere N-PDU erwartet oder Abbruch TXP CANTP_TX_PROCESSING TXW->TXP CanTp_Transmit = E_OK TXP->OFF CanTp_Shutdown (ohne Benachrichtigung) TXP->TXW Übertragung beendet oder Abbruch

Zustandsdiagramm: Nach CanTp_Init wechseln Empfangs- und Sendekanäle unabhängig voneinander zwischen WAIT und PROCESSING; CanTp_Shutdown führt zurück nach CANTP_OFF. Quellen: [SWS_CanTp_00027], [SWS_CanTp_00030], [SWS_CanTp_00170], [SWS_CanTp_00202], SWS CanTp S. 27

Senden: vom CanTp_Transmit bis zur Bestätigung

CanTp_Transmit erhält TxPduId und PduInfoPtr [SWS_CanTp_00212]. Ohne MetaData wertet CanTp nur die Gesamtlänge SduLength aus und greift nicht auf den Datenpuffer zu [SWS_CanTp_00225] [SWS_CanTp_00299]. Mit MetaData speichert es zusätzlich die Adressinformation für alle SF, FF und CF [SWS_CanTp_00334]. Passen die Daten in eine N-PDU, sendet CanTp einen SF, sonst eröffnet es eine Mehrfach-Frame-Sitzung [SWS_CanTp_00232] (SWS CanTp S. 60). Die maximale Sendelänge (TX_DL) folgt aus PduLength in EcuC [SWS_CanTp_00354]. Interpretation: Der Aufruf meldet synchron nur, ob der Auftrag angenommen ist; der eigentliche Transfer läuft asynchron [SWS_CanTp_00176]. Frage Q-b6d13590324e2906 (offen) Nach der Annahme meldet CanTp das Ende in jedem Fall über PduR_CanTpTxConfirmation [SWS_CanTp_00177] [SWS_CanTp_00204].

Für jedes Segment (SF, FF, CF) ruft CanTp PduR_CanTpCopyTxData auf [SWS_CanTp_00086]; bis zum ersten Aufruf läuft der Timer N_Cs [SWS_CanTp_00167]. Liefert die obere Schicht BUFREQ_E_BUSY, versucht CanTp es später erneut [SWS_CanTp_00184]. Den Retry-Parameter setzt CanTp stets auf NULL, weil ISO 15765-2 keine Wiederholung kennt [SWS_CanTp_00272].

Nach dem FF und nach dem letzten CF jedes Blocks wartet CanTp unter N_Bs auf einen Flow Control Frame [SWS_CanTp_00315]. Mit ihm gibt der Empfänger weitere CFs frei oder verzögert sie [SWS_CanTp_00282]. Ist die Sitzung erfolgreich abgeschlossen, folgt PduR_CanTpTxConfirmation mit E_OK [SWS_CanTp_00090]. Denselben Pull-Ablauf zeigen das 50-Byte-Beispiel (SWS CanTp S. 37) und der Pfad von DCM zu CanTp (SWS PduR S. 104).

Segmentiertes Senden einer N-SDUPduRCanTpCanIfUse Case: AnstoßCanTp_Transmit(TxPduId, PduInfoPtr)nur SduLength (+ MetaData)E_OKN_Cs läuftUse Case: First FramePduR_CanTpCopyTxData()BUFREQ_OKCanIf_Transmit(FF)CanTp_TxConfirmation(E_OK)N_Bs läuft: warten auf FCCanTp_RxIndication(FC: CTS, BS, STmin)loopje CF eines Blocks (BS Frames, Abstand STmin)PduR_CanTpCopyTxData()BUFREQ_OKCanIf_Transmit(CF)CanTp_TxConfirmation(E_OK)nach jedem Block erneut FC abwarten (N_Bs)Use Case: AbschlussPduR_CanTpTxConfirmation(E_OK)

Sequenzdiagramm: CanTp fordert die Daten segmentweise bei PduR an, wartet nach FF und jedem Block auf Flow Control und bestätigt zum Schluss mit E_OK. Quellen: [SWS_CanTp_00212], [SWS_CanTp_00086], [SWS_CanTp_00315], [SWS_CanTp_00090], SWS CanTp S. 73

Empfangen: Pufferaushandlung, Flow Control und Reassemblierung

Bei jedem eingehenden SF oder FF meldet CanTp den Empfangsbeginn mit PduR_CanTpStartOfReception [SWS_CanTp_00079]. Die verfügbare Puffergröße kommt über einen Ausgabeparameter zurück und darf kleiner sein als die N-SDU [SWS_CanTp_00080]. Bei einem FF startet CanTp vorher den Timer N_Br [SWS_CanTp_00166]. Den Flow Control sendet es erst, wenn das Ergebnis vorliegt; dessen Inhalt hängt von diesem Ergebnis ab [SWS_CanTp_00064] [SWS_CanTp_00277]. Alle FCs einer Empfangssitzung tragen dieselben Werte für BS und STmin [SWS_CanTp_00067]. Ein FC folgt jeweils nach BS Consecutive Frames [SWS_CanTp_00278].

Nach jedem CF übergibt CanTp die Nutzdaten mit PduR_CanTpCopyRxData und erfährt dabei den verbleibenden Puffer [SWS_CanTp_00269]. Bei CAN 2.0 sind das sechs oder sieben Byte je CF. Reicht der Restpuffer nach dem letzten CF eines Blocks nicht für den nächsten Block, startet CanTp den Timer N_Br [SWS_CanTp_00325] [SWS_CanTp_00082]. Solange dieser Timer läuft:

Endet die Sitzung, erfolgreich oder nicht, ruft CanTp PduR_CanTpRxIndication auf [SWS_CanTp_00084]. Mit und ohne Padding reicht CanTp nur die tatsächlich genutzten Datenbytes nach oben [SWS_CanTp_00116].

Segmentierter Empfang einer N-SDUCanIfCanTpPduRUse Case: First FrameCanTp_RxIndication(FF)N_Br gestartetPduR_CanTpStartOfReception(TpSduLength)BUFREQ_OK, verfügbare PuffergrößePduR_CanTpCopyRxData(FF-Daten)CanIf_Transmit(FC: CTS, BS, STmin)loopje CF eines BlocksCanTp_RxIndication(CF)PduR_CanTpCopyRxData(6/7 Byte)BUFREQ_OK, RestpufferaltRestpuffer reicht nicht für nächsten BlockN_Br läuftCanTp_MainFunctionPduR_CanTpCopyRxData(Länge 0, NULL_PTR)BUFREQ_OK, RestpufferCanIf_Transmit(FC: WAIT)höchstens WFTmax-malPuffer ausreichendCanIf_Transmit(FC: CTS)Use Case: Letzter Consecutive FrameCanTp_RxIndication(letzter CF)PduR_CanTpCopyRxData()PduR_CanTpRxIndication(E_OK)

Sequenzdiagramm: Segmentierter Empfang mit Pufferaushandlung, blockweisem Flow Control und Wartephase bei knappem Puffer. Quellen: [SWS_CanTp_00079], [SWS_CanTp_00269], [SWS_CanTp_00222], [SWS_CanTp_00084], SWS CanTp S. 76

rxstart Ein CanTp_RxIndication: SF oder FF empfangen Kanal Kanal in CANTP_RX_PROCESSING? Ein->Kanal Art mit MetaData oder andere N_AI? Kanal->Art ja Sor PduR_CanTpStartOfReception() Kanal->Sor nein Ign Frame ignorieren Art->Ign ja Neu laufenden Empfang abbrechen, Frame als neuen Empfang behandeln Art->Neu nein (gleiche N_AI) Neu->Sor Erg Rückgabewert? Sor->Erg NotOk Empfang abbrechen: kein FC, keine PduR_CanTpRxIndication Erg->NotOk BUFREQ_E_NOT_OK Ovfl FF: FC(OVFLW) senden, abbrechen SF: abbrechen Erg->Ovfl BUFREQ_E_OVFL Typ Frame-Typ? Erg->Typ BUFREQ_OK Sf SF: Daten kopieren, PduR_CanTpRxIndication Typ->Sf SF Puf FF: Puffer reicht für nächsten Block? Typ->Puf FF Cts FC(CTS) senden Puf->Cts ja Br N_Br starten, Puffer in MainFunction abfragen Puf->Br nein

Aktivitätsdiagramm: So entscheidet CanTp bei einem eingehenden SF oder FF anhand des Kanalzustands und des Ergebnisses von PduR_CanTpStartOfReception. Quellen: [SWS_CanTp_00124], [SWS_CanTp_00337], [SWS_CanTp_00081], [SWS_CanTp_00318], [SWS_CanTp_00353], SWS CanTp S. 67

Adressierung, MetaData und Padding

Funktionale Adressierung (1:n) ist nur für SF erlaubt [SWS_CanTp_00092]. Eine segmentierte Sitzung über einen funktionalen Handle weist CanTp ab und meldet CANTP_E_INVALID_TATYPE [SWS_CanTp_00093] (SWS CanTp S. 39). Bei Extended bzw. Mixed Addressing bestimmt CanTp die N-SDU aus N_TA bzw. N_AE im ersten Datenbyte [SWS_CanTp_00095] [SWS_CanTp_00284] [SWS_CanTp_00283]. Für die Zuordnung der Kennungen gilt (SWS CanTp S. 44):

  • Jede NSduId ist genau einer LSduId zugeordnet [SWS_CanTp_00035].
  • Die LSduId eines FC identifiziert zusammen mit N_TA oder N_AE genau eine NSduId [SWS_CanTp_00094].
  • Mehrere N-SDUs dürfen dieselbe N-PDU nur bei Extended/Mixed Addressing oder bei MetaData referenzieren [SWS_CanTp_00328].

Generische Verbindungen arbeiten mit MetaData. CanTp speichert die Adressinformation aus SF bzw. FF [SWS_CanTp_00330], gibt sie an PduR_CanTpStartOfReception weiter [SWS_CanTp_00331] und prüft folgende CFs dagegen [SWS_CanTp_00333]. Empfängt der Kanal bereits, ignoriert CanTp ein weiteres SF oder FF mit MetaData [SWS_CanTp_00337].

Padding wird je N-SDU aktiviert (SWS CanTp S. 43). Der Füllwert ist CANTP_PADDING_BYTE [SWS_CanTp_00059]. Bei Frames mit höchstens 8 Byte Nutzlast gilt:

Passt eine Sendelänge zu keinem gültigen DLC, füllt CanTp bis zum nächsthöheren gültigen Wert auf [SWS_CanTp_00351]. Die Empfangslänge RX_DL leitet CanTp aus der ersten empfangenen CAN_DL ab [SWS_CanTp_00350].

Zeitüberwachung, Laufzeitparameter und Abbruch auf Anforderung

CanTp_MainFunction [SWS_CanTp_00213] wird zyklisch aufgerufen. Sie überwacht N_As, N_Bs, N_Cs, N_Ar, N_Br, N_Cr sowie STmin [SWS_CanTp_00164] (SWS CanTp S. 63). Ihr Takt richtet sich nach CanTpMainFunctionPeriod [SWS_CanTp_00300]. Dieser Wert soll der Zykluszeit des aufrufenden Tasks entsprechen (SWS CanTp S. 77). Als Beispiel nennt die Timing-Analyse einen 5-ms-Task (TR Timing Analysis S. 117).

Zwei Dienste greifen zur Laufzeit auf die Empfangsparameter BS und STmin einer N-SDU zu: CanTp_ChangeParameter ändert sie [SWS_CanTp_00302], CanTp_ReadParameter liest sie [SWS_CanTp_00323]. Beide gibt es nur, wenn CanTpChangeParameterApi = TRUE ist (SWS CanTp S. 61). BS ist nur ein Höchstwert, den CanTp aus Puffergründen unterschreiten darf [SWS_CanTp_00091]. Zwischen FF und letztem CF einer laufenden Empfangssitzung lehnt CanTp jede Änderung mit E_NOT_OK ab [SWS_CanTp_00303] [SWS_CanTp_00304]. Bei generischen Verbindungen gilt eine Änderung für alle [SWS_CanTp_00338].

Laufende Übertragungen lassen sich auf Anforderung abbrechen:

Verhalten im Fehlerfall

Entwicklungsfehler. Ist die Erkennung aktiv, meldet CanTp den Fehler an DET und liefert E_NOT_OK [SWS_CanTp_00294] [SWS_CanTp_00217] (SWS CanTp S. 49). Die Codes definiert [SWS_CanTp_00293]. Typische Fälle:

Abweichung zwischen den Releases: Für eine ungültige PduId bei den Cancel-Diensten verlangt R20-11 CANTP_E_PARAM_ID [SWS_CanTp_00254] [SWS_CanTp_00260]. Neuere Dokumentstellen nennen stattdessen CANTP_E_INVALID_TX_ID bzw. CANTP_E_INVALID_RX_ID (SWS CanTp S. 59). Für R20-11 gilt das Requirement.

Laufzeitfehler. Sie gehen an den Default Error Tracer [SWS_CanTp_00352]:

Protokollfehler. Sie beenden die Sitzung mit E_NOT_OK an die obere Schicht [SWS_CanTp_00205]:

Der PduR leitet die negative Bestätigung an den Nutzer weiter, z. B. an den DCM, der dann für die Wiederherstellung sorgt (Error Description S. 29, Error Description S. 28). Produktionsfehler behandelt der DEM über den FiM [SWS_CanTp_00291].

abbruch cluster_tx Sendeseite cluster_rx Empfangsseite t1 PduR_CanTpCopyTxData = BUFREQ_E_NOT_OK TA Sendesitzung abbrechen t1->TA t2 N_Cs abgelaufen t2->TA t3 N_As abgelaufen t3->TA t4 N_Bs abgelaufen t4->TA t5 FC mit OVFLW oder ungültigem FS t5->TA t6 FC kürzer als 8 Byte bei Tx-Padding t6->TA t7 CanIf_Transmit(SF/FF/CF) = E_NOT_OK t7->TA t8 CanTp_TxConfirmation(E_NOT_OK) t8->TA t9 CanTp_CancelTransmit = E_OK t9->TA r1 N_Ar abgelaufen RA Empfangssitzung abbrechen r1->RA r2 N_Cr abgelaufen r2->RA r3 PduR_CanTpCopyRxData = BUFREQ_E_NOT_OK r3->RA r4 WFTmax FC(WAIT) erreicht r4->RA r5 letzter CF zu kurz bei Rx-Padding r5->RA r6 CanIf_Transmit(FC) = E_NOT_OK r6->RA r7 CanTp_CancelReceive = E_OK r7->RA TC PduR_CanTpTxConfirmation(E_NOT_OK) TA->TC RC PduR_CanTpRxIndication(E_NOT_OK) RA->RC

Aktivitätsdiagramm: Alle Abbruchursachen münden je Richtung in eine negative Meldung an PduR. Quellen: [SWS_CanTp_00205], [SWS_CanTp_00343], [SWS_CanTp_00355], [SWS_CanTp_00342], [SWS_CanTp_00223], [SWS_CanTp_00084], Error Description S. 28

Weiterführende Detailbelege

KI-generierter Leitfaden auf Basis der Spezifikationsauszüge zu CanTp (R20-11). Verbindlich sind ausschließlich die verlinkten Requirements; Dokumentstellen aus anderen Releases dienen nur der Erläuterung.

CAN Transport Layer (CanTp)

Provides segmentation and reassembly of CAN messages up to 4095 bytes (ISO 15765-2).

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

function CanTp_Init [SWS_CanTp_00208] 📄 PDF

void CanTp_Init (const CanTp_ConfigType* CfgPtr);

This function initializes the Can Tp module.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 62b706f68200 Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die synchrone und nicht-reentrante Funktion CanTp_Init initialisiert das CanTp-Modul [SWS_CanTp_00208]. Sie übernimmt über den Parameter CfgPtr einen Zeiger auf die Post-Build-Konfigurationsdaten (CanTp_ConfigType) und besitzt keinen Rückgabewert [SWS_CanTp_00208]. Die Modulumgebung muss CanTp_Init zwingend aufrufen, bevor das Modul für weitere Verarbeitungen genutzt werden kann [SWS_CanTp_00199].

Während der Initialisierung werden alle globalen Variablen des Moduls initialisiert und alle Transportprotokoll-Verbindungen in einen Sub-Zustand von CANTP_ON versetzt, in welchem weder eine segmentierte Übertragung noch ein segmentierter Empfang aktiv ist [SWS_CanTp_00030]. Die Empfangspfade befinden sich dabei im Zustand CANTP_RX_WAIT und die Sendepfade im Zustand CANTP_TX_WAIT [SWS_CanTp_00030]. Nach erfolgreicher Durchführung wechselt das Modul in den internen Zustand CANTP_ON [SWS_CanTp_00170].

Wird CanTp_Init aufgerufen, wenn sich das Modul bereits im globalen Zustand CANTP_ON befindet, setzt die Funktion das Modul in den Zustand Idle zurück, sodass weder Sende- noch Empfangsvorgänge laufen [SWS_CanTp_00111].

Ist die Entwicklungserkennung (Development Error Detection) aktiviert, meldet das CanTp-Modul den Fehler CANTP_E_UNINIT, wenn der PDU Router oder das CAN Interface versucht, Funktionen des Moduls (mit Ausnahme von CanTp_GetVersionInfo) vor dem Aufruf von CanTp_Init auszuführen [SWS_CanTp_00031].

Dieser Text wurde von einer KI auf Basis der Spezifikation erstellt.

Implementer's Guide folgt (Komplexität I2)

function CanTp_Shutdown [SWS_CanTp_00211] 📄 PDF

void CanTp_Shutdown (void);

This function is called to shutdown the Can Tp module.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: e5430e2cac5b Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Verwendung und Aufrufkontext

Die Funktion CanTp_Shutdown dient dazu, das gesamte CanTp-Modul geordnet herunterzufahren ([SWS_CanTp_00211]). Die Schnittstelle wird über die Header-Datei CanTp.h bereitgestellt und besitzt die Service-ID 0x02 ([SWS_CanTp_00211]). Der Aufruf wird synchron verarbeitet, nimmt keine Übergabeparameter entgegen und liefert keinen Rückgabewert ([SWS_CanTp_00211]).

Zustandsübergang und Bereinigung

Beim Ausführen schließt CanTp_Shutdown alle noch anhängigen Transportprotokoll-Verbindungen, gibt sämtliche allokierten Ressourcen frei und überführt das CanTp-Modul in den Zustand CANTP_OFF ([SWS_CanTp_00202]). Ein wesentlicher Aspekt des Abbruchverhaltens ist, dass für noch ausstehende Frame-Übertragungen oder Frame-Empfangsvorgänge ausdrücklich keinerlei Benachrichtigung an übergeordnete Schichten ausgelöst werden darf ([SWS_CanTp_00200]).

Nebenläufigkeit und Randbedingungen

Die Funktion ist als nicht reentrant (Non Reentrant) spezifiziert ([SWS_CanTp_00211]). Sie darf folglich nicht zeitgleich aus unterschiedlichen Ausführungskontexten oder Interrupt-Routinen heraus aufgerufen werden. Spezifische Fehlercodes oder Benachrichtigungen an das Fehler-Management sind im Leistungsumfang der Schnittstelle nicht ausgewiesen.

Dieser Nutzungshinweis wurde automatisiert auf Basis der Spezifikation AUTOSAR Classic Release R20-11 erstellt.

Implementer's Guide folgt (Komplexität I1)

function CanTp_Transmit [SWS_CanTp_00212] 📄 PDF

Std_ReturnType CanTp_Transmit (PduIdType TxPduId, const PduInfoType* PduInfoPtr);

Requests transmission of a PDU.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 7a5280a26edd Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Verwendung

Die Funktion CanTp_Transmit dient der Anforderung zur Übertragung einer N-SDU über die CAN-Transportschicht [SWS_CanTp_00212]. Als Parameter werden die Kennung der zu übertragenden PDU (TxPduId) sowie ein Zeiger auf Daten, Länge und Metadaten (PduInfoPtr) übergeben [SWS_CanTp_00212]. Der Aufruf meldet mit E_OK die erfolgreiche Annahme oder mit E_NOT_OK die Ablehnung der Anfrage zurück [SWS_CanTp_00212]. Während der Aufruf synchron quittiert wird, ist die Abwicklung der Übertragung asynchron [SWS_CanTp_00176] (Interpretation: Die Angabe „Synchronous“ in der Spezifikationstabelle dürfte sich auf die Entgegennahme der Anfrage beziehen). Frage Q-df438ddaa4963aba (offen)

Zusammenspiel und PDU-Verarbeitung

Bei N-SDUs mit Metadaten speichert das Modul die Adressinformationen (abhängig vom Adressierungsformat wie Normal, Extended, Mixed 11 bit, Normal fixed oder Mixed 29 bit), um sie für SF-, FF- und CF-N-PDUs sowie zur Identifikation von FC-N-PDUs zu nutzen [SWS_CanTp_00334]. Werden keine Metadaten verwendet, greift CanTp_Transmit zur Vorbereitung des SF- oder FF-PCI lediglich auf die Längenangabe SduLength zu und nutzt nicht den N-SDU-Datenpuffer [SWS_CanTp_00225].

Fehlerbehandlung und Nebenläufigkeit

  • Fehlerprüfung: Wenn DET aktiviert ist und PduInfoPtr ein NULL-Zeiger ist, meldet die Funktion den Fehler CANTP_E_PARAM_POINTER und kehrt ohne weitere Aktion zurück [SWS_CanTp_00321].
  • Kanalbelegung: Befindet sich der zugeordnete Kanal im Zustand CANTP_TX_PROCESSING oder läuft bereits eine Session für die N-SDU-Kennung, wird die Übertragungsanfrage abgewiesen und E_NOT_OK zurückgegeben [SWS_CanTp_00123], [SWS_CanTp_00206].
  • Reentranz: Der Dienst ist reentrant für unterschiedliche PDU-IDs, jedoch nicht reentrant für dieselbe PDU-ID [SWS_CanTp_00212].

Dieser Text wurde von einer KI auf Basis der Spezifikation AUTOSAR Classic R20-11 generiert.

Implementer's Guide folgt (Komplexität I2)

function CanTp_CancelTransmit [SWS_CanTp_00246] 📄 PDF

Std_ReturnType CanTp_CancelTransmit (PduIdType TxPduId);

Requests cancellation of an ongoing transmission of a PDU in a lower layer communication module.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: f7624766b8a1 Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die synchrone Funktion CanTp_CancelTransmit fordert den Abbruch einer laufenden PDU-Übertragung in einem unterlagerten Kommunikationsmodul an [SWS_CanTp_00246] und leitet damit die Stornierung des Sendevorgangs ein [SWS_CanTp_00274]. Als Parameter wird die Kennung der betroffenen PDU (TxPduId) übergeben [SWS_CanTp_00246]. Als Rückgabewert signalisiert E_OK die erfolgreiche Durchführung des Abbruchs durch das Zielmodul, während E_NOT_OK eine Zurückweisung anzeigt [SWS_CanTp_00246].

Nach dem Funktionsaufruf wird die Übertragung auf der betroffenen Verbindung abgebrochen [SWS_CanTp_00243]. Wurde der Abbruch erfolgreich ausgeführt, ruft das Modul CanTp verpflichtend die Bestätigung PduR_CanTpTxConfirmation mit dem negativen Ergebnis E_NOT_OK auf, um die oberen Schichten über den Abbruch zu informieren [SWS_CanTp_00255].

Bei aktivierter Entwicklungserkennung (Development Error Detection) prüft CanTp_CancelTransmit die Gültigkeit von TxPduId: Bei einem ungültigen Parameter wird der Entwicklungsfehler CANTP_E_PARAM_ID erzeugt und E_NOT_OK zurückgegeben [SWS_CanTp_00254]. Falls der Abbruch für eine N-SDU angefordert wird, die sich derzeit nicht im Übertragungsprozess befindet, meldet das Modul den Laufzeitfehler CANTP_E_OPER_NOT_SUPPORTED an den Default Error Tracer (DET) und liefert ebenfalls E_NOT_OK [SWS_CanTp_00254].

Bezüglich der Nebenläufigkeit ist die Funktion reentrant für unterschiedliche PDU-IDs, darf jedoch für dieselbe TxPduId nicht nebenläufig aufgerufen werden [SWS_CanTp_00246].

Dieser Nutzungshinweis wurde automatisch auf Basis der AUTOSAR-Spezifikation erstellt.

Implementer's Guide folgt (Komplexität I2)

function CanTp_CancelReceive [SWS_CanTp_00257] 📄 PDF

Std_ReturnType CanTp_CancelReceive (PduIdType RxPduId);

Requests cancellation of an ongoing reception of a PDU in a lower layer transport protocol module.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: ccccdf72ba41 Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die Funktion CanTp_CancelReceive bricht den laufenden Empfang einer PDU in einem unterlagerten Transportprotokoll-Modul synchron ab [SWS_CanTp_00257]. Sie ist über die Header-Datei CanTp.h verfügbar und besitzt die Service-ID 0x4c [SWS_CanTp_00257].

Verwendung und Aufrufbedingungen

Über den Eingangsparameter RxPduId wird die Kennung der abzubrechenden PDU übergeben [SWS_CanTp_00257]. Der Aufruf wird synchron verarbeitet und ist als nicht reentrant (Non Reentrant) spezifiziert [SWS_CanTp_00257]. Als Rückgabewert liefert die Schnittstelle vom Typ Std_ReturnType:

Fehlerbehandlung

Bei aktivierter Entwicklungserkennung (Development Error Detection) validiert die Funktion den Parameter RxPduId [SWS_CanTp_00260]:

  • Ist der Wert von RxPduId ungültig, meldet CanTp_CancelReceive den Entwicklungsfehler CANTP_E_PARAM_ID und gibt E_NOT_OK zurück [SWS_CanTp_00260].
  • Wird ein Abbruch für eine N-SDU angefordert, die sich aktuell nicht im laufenden Empfangsprozess befindet, meldet das Modul den Laufzeitfehler CANTP_E_OPER_NOT_SUPPORTED an den Default Error Tracer und liefert E_NOT_OK zurück [SWS_CanTp_00260].

Zusammenspiel mit Nachbarmodulen

Wurde der Empfangsabbruch erfolgreich ausgeführt, ruft CanTp die Callback-Funktion PduR_CanTpRxIndication mit dem Benachrichtigungsergebnis E_NOT_OK auf, um die übergeordnete Schicht über den Abbruch zu informieren [SWS_CanTp_00263].

Dieser Nutzungshinweis basiert auf der Spezifikation AUTOSAR Classic R20-11 und wurde automatisch generiert.

Implementer's Guide folgt (Komplexität I1)

function CanTp_ChangeParameter [SWS_CanTp_00302] 📄 PDF

Std_ReturnType CanTp_ChangeParameter (PduIdType id, TPParameterType parameter, uint16 value);

Request to change a specific transport protocol parameter (e.g. block size).

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 2d391dbc31e8 Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die synchrone Funktion CanTp_ChangeParameter dient zur Laufzeitänderung eines spezifischen Transportprotokoll-Parameters wie beispielsweise der Blockgröße ([SWS_CanTp_00302]). Bereitgestellt über die Header-Datei CanTp.h, übernimmt der Dienst die PDU-Kennung (id), die Kennung des Parameters (parameter) sowie den neu zu setzenden Wert (value) ([SWS_CanTp_00302]). Bei erfolgreicher Durchführung gibt die Funktion E_OK zurück; schlägt die Änderung fehl oder wird sie abgewiesen, liefert sie E_NOT_OK ([SWS_CanTp_00302]).

Hinsichtlich Nebenläufigkeit und Aufrufbedingungen gelten folgende Vorgaben:

  • Die Schnittstelle ist nicht reentrant (Non Reentrant) ausgeführt ([SWS_CanTp_00302]).
  • Befindet sich die betroffene N-SDU zum Zeitpunkt des Aufrufs bereits in einem laufenden Empfangsprozess, bricht CanTp_ChangeParameter unverzüglich ab, liefert E_NOT_OK zurück und verändert den Parameterwert nicht ([SWS_CanTp_00304]).

Ein besonderes Zusammenspiel besteht bei generischen Verbindungen: Wird die Funktion für eine N-SDU mit MetaData aufgerufen, so wird die Parameteränderung auf alle generischen Verbindungen angewendet und für sämtliche nachfolgenden Empfangsvorgänge übernommen ([SWS_CanTp_00338]).

Dieser Nutzungshinweis wurde automatisiert auf Basis der Spezifikationsanforderungen generiert.

Implementer's Guide folgt (Komplexität I1)

function CanTp_ReadParameter [SWS_CanTp_00323] 📄 PDF

Std_ReturnType CanTp_ReadParameter (PduIdType id, TPParameterType parameter, uint16* value);

This service is used to read the current value of reception parameters BS and STmin for a specified N - SDU.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 949f6cb3df18 Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Verwendung

Die synchrone Funktion CanTp_ReadParameter dient dem Auslesen des aktuellen Werts der Empfangsparameter BS (Block Size) oder STmin (Separation Time minimum) für eine spezifizierte Empfangs-N-SDU [SWS_CanTp_00323]. Die Deklaration ist über die Header-Datei CanTp.h verfügbar [SWS_CanTp_00323].

Die Schnittstelle besitzt folgende Parameter:

  • id (in): Identifikator der empfangenen N-SDU (Typ PduIdType), für die der Empfangsparameter gelesen wird [SWS_CanTp_00323].
  • parameter (in): Bestimmt den auszulesenden Parameter (BS oder STmin vom Typ TPParameterType) [SWS_CanTp_00323].
  • value (out): Zeiger auf uint16, über den der ausgelesene Parameterwert bereitgestellt wird [SWS_CanTp_00323].

Als Rückgabewert liefert die Funktion Std_ReturnType; dabei signalisiert E_OK die Annahme der Anforderung und E_NOT_OK die Ablehnung [SWS_CanTp_00323].

Fehlerbehandlung

Sofern die Entwicklungserkennung (Development Error Detection) aktiviert ist, prüft CanTp_ReadParameter die Gültigkeit der Parameter id und parameter [SWS_CanTp_00324]. Ist einer dieser Parameter ungültig, meldet die Funktion den Entwicklungsfehler CANTP_E_PARAM_ID und gibt E_NOT_OK zurück [SWS_CanTp_00324].

Nebenläufigkeit und Einschränkungen

Die Funktion ist als nicht reentrant (Non Reentrant) spezifiziert [SWS_CanTp_00323]. Aufrufer müssen parallele Zugriffe auf dieselbe Schnittstelle vermeiden.

Dieser Text wurde von einer KI auf Basis der Spezifikationsdokumente von AUTOSAR R20-11 generiert.

Implementer's Guide folgt (Komplexität I1)

function CanTp_MainFunction [SWS_CanTp_00213] 📄 PDF

void CanTp_MainFunction (void);

The main function for scheduling the CAN TP.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 64a7b42182e1 Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die Funktion CanTp_MainFunction dient als zentraler Einstiegspunkt für das periodische Scheduling des CAN-Transport-Protokolls (CAN TP) [SWS_CanTp_00213], [SWS_CanTp_00164]. Sie besitzt die Service-ID 0x06, hat die Signatur void CanTp_MainFunction(void) und ist über den Header SchM_CanTp.h verfügbar [SWS_CanTp_00213]. Sie nimmt keine Parameter entgegen und liefert keinen Rückgabewert [SWS_CanTp_00213].

Aufrufkontext und zeitliche Steuerung

Der Aufruf wird gemäß der benötigten Periodendauer entweder durch den Schedule Manager oder durch das Modul Free Running Timer initiiert [SWS_CanTp_00164]. Innerhalb des Moduls übernimmt CanTp_MainFunction die zeitliche Überwachung und Steuerung der Protokollabläufe [SWS_CanTp_00164]. Konkret ist die Funktion an der Abwicklung folgender Timer und Zeitbedingungen beteiligt:

  • Die Protokoll-Timeouts der Übertragung und Bestätigung: N_As, N_Bs, N_Cs sowie N_Ar, N_Br und N_Cr [SWS_CanTp_00164].
  • Die Einhaltung der minimalen Frame-Separationszeit STMmin [SWS_CanTp_00164].

Fehlerbehandlung und Nebenläufigkeit

Spezifische Fehlercodes für DET oder DEM sind für diese Funktion im Payload nicht definiert. Interpretation: Als zyklisch aufgerufene Scheduling-Funktion dürfte CanTp_MainFunction nicht-reentrant sein und eine konsistente Aufrufrate erfordern, um ein korrektes Dekrementieren der internen Timer sicherzustellen. Frage Q-2fe22e31085abf49 (offen)

Dieser Text wurde von einer KI auf Basis der AUTOSAR-Spezifikation R20-11 generiert.

Implementer's Guide folgt (Komplexität I1)

function CanTp_RxIndication [SWS_CanTp_00214] 📄 PDF

void CanTp_RxIndication (PduIdType RxPduId, const PduInfoType* PduInfoPtr);

Indication of a received PDU from a lower layer communication interface module.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 38e732456055 Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Verwendung und Semantik

Die synchrone Funktion [SWS_CanTp_00214] meldet dem CAN-Transportmodul den Empfang einer N-PDU durch ein unterlagertes Kommunikationsschnittstellenmodul. Der Aufruf übergibt die Identifikation der empfangenen PDU (RxPduId) sowie über den Zeiger PduInfoPtr die Länge (SduLength), Nutzdaten (SduDataPtr) und zugehörige Metadaten. Die Funktion besitzt keinen Rückgabewert.

Nebenläufigkeit und Aufrufkontext

Die Funktion ist reentrant für unterschiedliche PDU-IDs, jedoch nicht reentrant für dieselbe PDU-ID [SWS_CanTp_00214]. CanTp_RxIndication darf im Interrupt-Kontext aufgerufen werden, beispielsweise direkt aus dem CAN-Empfangsinterrupt [SWS_CanTp_00235].

Zusammenspiel bei generischen Verbindungen

Bei Aufruf für Single Frames (SF) oder First Frames (FF) mit Metadaten speichert CanTp die enthaltenen Adressinformationen (wie N_SA und N_TA bei Normal-fixed- oder Mixed-29-Bit-Adressierung). Diese Informationen dienen dem Verbindungsaufbau zur oberen Schicht, dem Senden von Flow-Control-Frames (FC) und der Erkennung von Consecutive Frames (CF) [SWS_CanTp_00330]. Bei nachfolgenden CF- und empfangenen FC-Frames prüft CanTp die Adressdaten der Metadaten gegen die gespeicherten Werte [SWS_CanTp_00333], [SWS_CanTp_00336].

Fehlerbehandlung und Padding

Falls DET aktiviert ist und PduInfoPtr ein NULL-Zeiger ist, meldet die Funktion den Fehler CANTP_E_PARAM_POINTER und kehrt ohne Aktion zurück [SWS_CanTp_00322]. Ist die Padding-Prüfung für Frames mit einer Nutzlast bis 8 Byte aktiviert (CanTpRxPaddingActivation bzw. CanTpTxPaddingActivation gleich CANTP_ON), wird bei Längenfehlern der Laufzeitfehler CANTP_E_PADDING an den DET gemeldet:

  • Ein SF mit SduLength < 8 wird abgewiesen [SWS_CanTp_00345].
  • Ein letzter CF mit SduLength != 8 bricht den laufenden Empfang via PduR_CanTpRxIndication() mit E_NOT_OK ab [SWS_CanTp_00346].
  • Ein empfangener FC mit SduLength < 8 bricht die laufende Übertragung via PduR_CanTpTxConfirmation() mit E_NOT_OK ab [SWS_CanTp_00349].

Dieser Text wurde von einer KI generiert und dient als Orientierungshilfe. Maßgeblich ist die AUTOSAR-Spezifikation.

Implementer's Guide folgt (Komplexität I2)

function CanTp_TxConfirmation [SWS_CanTp_00215] 📄 PDF

void CanTp_TxConfirmation (PduIdType TxPduId, Std_ReturnType result);

The lower layer communication interface module confirms the transmission of a PDU, or the failure to transmit a PDU.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 2541d17fed91 Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Das CanTp-Modul stellt die synchrone Callback-Funktion CanTp_TxConfirmation (Service-ID 0x40) über den Header CanTp.h bereit, um Bestätigungsaufrufe für gesendete PDUs entgegenzunehmen [SWS_CanTp_00076] [SWS_CanTp_00215]. Über diese Schnittstelle meldet das unterlagerte Kommunikationsschnittstellenmodul den erfolgreichen Versand oder das Scheitern einer PDU-Übertragung [SWS_CanTp_00215].

Parameter und Rückgabewerte

Die Funktion liefert keinen Rückgabewert (void) und erwartet zwei Eingangsparameter [SWS_CanTp_00215]:

  • TxPduId: ID der übertragenen PDU [SWS_CanTp_00215].
  • result: Übertragungsstatus. Der Wert E_OK bestätigt die erfolgreiche Übertragung, während E_NOT_OK das Fehlschlagen der PDU-Übertragung signalisiert [SWS_CanTp_00215].

Fehlerbehandlung

Wird CanTp_TxConfirmation mit dem Ergebniswert E_NOT_OK aufgerufen, bricht das CanTp-Modul die zugehörige Übertragungssitzung ab [SWS_CanTp_00355].

Nebenläufigkeit und Ausführungskontext

Hinsichtlich der Nebenläufigkeit ist die Funktion reentrant für unterschiedliche PDU-IDs, jedoch nicht reentrant für dieselbe PDU-ID [SWS_CanTp_00215]. Sie muss im Interrupt-Kontext aufrufbar sein und darf beispielsweise direkt aus dem CAN-Sende-Interrupt aufgerufen werden [SWS_CanTp_00236].

Dieser Nutzungshinweis wurde automatisiert auf Basis der Spezifikation von AUTOSAR Classic Release R20-11 generiert.

Implementer's Guide folgt (Komplexität I2)

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_CanTp
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_CanTp@rel:R20-11#358cc7cc
Content hash
358cc7cc
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANTransportLayer.pdf#nameddest=SWS_CanTp_00208

Initialisierung und Status

This function returns the version information of the Can Tp module.

void CanTp_GetVersionInfo (Std_VersionInfoType* versioninfo);
CanTp_Init function

This function initializes the Can Tp module.

void CanTp_Init (const CanTp_ConfigType* CfgPtr);

Dienste

Requests cancellation of an ongoing reception of a PDU in a lower layer transport protocol module.

Std_ReturnType CanTp_CancelReceive (PduIdType RxPduId);

Requests cancellation of an ongoing transmission of a PDU in a lower layer communication module.

Std_ReturnType CanTp_CancelTransmit (PduIdType TxPduId);

Request to change a specific transport protocol parameter (e.g. block size).

Std_ReturnType CanTp_ChangeParameter (PduIdType id, TPParameterType parameter, uint16 value);

This service is used to read the current value of reception parameters BS and STmin for a specified N - SDU.

Std_ReturnType CanTp_ReadParameter (PduIdType id, TPParameterType parameter, uint16* value);

This function is called to shutdown the Can Tp module.

void CanTp_Shutdown (void);

Requests transmission of a PDU.

Std_ReturnType CanTp_Transmit (PduIdType TxPduId, const PduInfoType* PduInfoPtr);

Callbacks

Indication of a received PDU from a lower layer communication interface module.

void CanTp_RxIndication (PduIdType RxPduId, const PduInfoType* PduInfoPtr);

The lower layer communication interface module confirms the transmission of a PDU, or the failure to transmit a PDU.

void CanTp_TxConfirmation (PduIdType TxPduId, Std_ReturnType result);

Zyklisch

The main function for scheduling the CAN TP.

void CanTp_MainFunction (void);

Typen

Data structure type for the post - build configuration parameters.