DEENESPTFRRUARHIKOZHNL
AUTOSAR_CP_SWS_CANTransportLayer FIG-02d50aafe45d8a64 986 × 1264 px 4 Release(s)

Figure 9.5: Large N-SDU Reception

SHA-256 Inhalts-Fingerabdruck: 02d50aafe45d8a647dd53575caa45592012bf2991830710f755198aee07c2695
✦ KI-generierte Bildanalyse & technische Beschreibung Modell: gemini-3.8-flash (via agy) · Rezept figure-series@1 · erstellt am 2026-10-08

1. Diagrammtyp & Architektur-Kontext

  • Diagrammtyp: UML-Sequenzdiagramm mit kombinierten Fragmenten (alt-Blöcke für die Ausführungskontexte alt CanTp task [interrupt / cyclic task] und die Indikationspfade alt Indication [normal case / Buffer full / Last CF received]).
  • Funktionale Einordnung: AUTOSAR Classic Platform, Schicht der Kommunikationsdienste (Communication Services / Transport Layer), Spezifikation AUTOSAR_CP_SWS_CANTransportLayer (ISO 15765-2).
  • Technischer Zweck: Spezifikation des standardisierten Ablaufs für den segmentierten Empfang einer großen N-SDU (Large N-SDU Reception) via First Frame (FF), Flow Control (FC) und Consecutive Frames (CF) im Zusammenspiel zwischen CAN Interface («module» CanIf), CAN Transport Layer («module» :CanTp) und oberer Schnittstelle («interface», de facto PDU Router / PduR).

2. Komponenten, Entitäten & Schnittstellen

  • Akteure / Module:
    • «interface»: Schnittstelle der oberen Kommunikationsschicht (de facto PDU Router PduR) zur Pufferallokation, Datenübernahme und Statusquittierung.
    • «module» :CanTp: Instanz des CAN Transport Layers (CanTp), zuständig für Segmentierung, Reassembly, Timer-Überwachung (N_Ar, N_Br, N_Cr) und Flusssteuerung (Flow Control).
    • «module» CanIf: CAN Interface, untere Schicht zur Treiberabstraktion für L-PDU-Empfang und L-PDU-Versand auf CAN-Ebene.
  • Schnittstellen & Callbacks (mit Parametern und Datentypen):
    • Rx-Pfad (Empfang & Reassembly):
      • CanTp_RxIndication(PduIdType, const PduInfoType*): Benachrichtigung über das Eintreffen einer L-PDU (FF oder CF) von CanIf an :CanTp.
      • PduR_CanTpStartOfReception(PduIdType, PduLengthType, PduLengthType*): Initiale Pufferanforderung bei First Frame von :CanTp an «interface» (Übergabe der PduId, Gesamtlänge TpSduLength und Zeiger auf verfügbare Puffergröße bufferSizePtr).
      • PduR_CanTpCopyRxData(BufReq_ReturnType, PduIdType, PduInfoType*, PduLengthType*): Synchroner Callback beim First-Frame-Empfang zur Übergabe der ersten Nutzdatenbytes in den Zielpuffer (im Diagramm mit vorangestelltem Rückgabetyp annotiert).
      • PduR_CanTpCopyRxData(PduIdType, PduInfoType*, PduLengthType*): Synchroner Callback beim Consecutive-Frame-Empfang zur sequentiellen Nutzdatenübernahme.
      • PduR_CanTpRxIndication(PduIdType, Std_ReturnType): Abschlussbenachrichtigung der N-SDU-Rezeption von :CanTp an «interface» mit Statusquittierung.
    • Tx-Pfad (Flusssteuerung / Flow Control):
      • CanIf_Transmit(PduIdType, const PduInfoType*): Sendeanforderung für Flow Control Frames (FC) von :CanTp an CanIf (im Zweig [Buffer full] oder im zyklischen Task).
      • CanTp_TxConfirmation(PduIdType, Std_ReturnType): Sende-Bestätigung von CanIf an :CanTp nach erfolgreicher Übertragung des FC-Frames auf dem Bus.

3. Dynamisches Verhalten & Sequenzablauf

Phase 1: Empfang First Frame (FF)
  1. Trigger: CanIf meldet über den synchronen Callback CanTp_RxIndication(PduIdType, const PduInfoType*) das Eintreffen eines First Frame an :CanTp.
  2. Pufferallokation: :CanTp fordert mit PduR_CanTpStartOfReception(PduIdType, PduLengthType, PduLengthType*) an «interface» einen Empfangspuffer unter Angabe der Gesamtlänge an.
  3. Interne Zustandsprüfung: :CanTp evaluiert die Verbindungsannahme („Check connection acceptance and prepare FC.“) und aktiviert den Sende-Task („Activate Tx task.“).
  4. Initialer Payload-Transfer: :CanTp ruft PduR_CanTpCopyRxData(BufReq_ReturnType, PduIdType, PduInfoType*, PduLengthType*) auf, um die ersten Nutzdaten (FF-Data) direkt in den oberen Puffer zu kopieren („Copy FF data.“).
  5. Rückkehr: CanTp_RxIndication() kehrt synchron zu CanIf zurück.
Phase 2: Empfang Consecutive Frames (CF)
  • Kombiniertes Fragment alt CanTp task:
    • Pfad [interrupt] (ISR-Kontext):
      1. CanIf signalisiert pro eingetroffenem CF CanTp_RxIndication(PduIdType, const PduInfoType*).
      2. :CanTp kopiert die CF-Nutzdaten synchron via PduR_CanTpCopyRxData(PduIdType, PduInfoType*, PduLengthType*) in den Zielpuffer („Copy CF data.“).
      3. Sub-Fragment alt Indication:
        • [normal case]: Reguläre Datenübernahme erfolgreich; der Reassembly-Vorgang läuft fort.
        • [Buffer full]: Bei Pufferengpass oder Erreichen der Block Size (BS) wird via CanIf_Transmit(PduIdType, const PduInfoType*) ein Wait Flow Control Frame abgesetzt („A Wait FC is sent if last CF on a block.“).
        • [Last CF received]: Nach Empfang des letzten Consecutive Frame schließt :CanTp die Rezeption ab und signalisiert dem PDU Router das vollständige Vorliegen der N-SDU via PduR_CanTpRxIndication(PduIdType, Std_ReturnType).
      4. Synchroner Rücksprung zu CanIf.
    • Pfad [cyclic task] (Periodischer Task / CanTp_MainFunction):
      1. Flusssteuerungs-Frames (FC) werden entkoppelt über CanIf_Transmit(PduIdType, const PduInfoType*) an das CAN Interface übergeben.
      2. Nach erfolgreicher Aussendung quittiert CanIf die Übertragung via CanTp_TxConfirmation(PduIdType, Std_ReturnType) an :CanTp.

4. Normative Relevanz & Entwickler-Hinweise

  • Ausführungskontext & Echtzeitanforderungen:
    • CanTp_RxIndication() und die darin synchron aufgerufenen PduR-APIs (StartOfReception, CopyRxData) laufen im Interrupt-Kontext des CAN-Treibers bzw. CanIf. Entwickler müssen diese Callbacks strikt nicht-blockierend implementieren (keine Mutex-Locks, keine dynamischen Heap-Allokationen, minimale Rechenzeit).
  • Puffer- und Flusssteuerungsverhalten:
    • Die Flow-Control-Logik wird direkt an CanIf_Transmit() übergeben. Bei Pufferengpässen ([Buffer full]) muss ein FC(WAIT) generiert werden; die Anzahl aufeinanderfolgender Wait-Frames ist durch CanTpMaxWaitCount limitiert, bevor Timeout N_Br bzw. N_Cr mit Verbindungsabbruch greift.
  • Task-Entkopplung:
    • Das Diagramm trennt explizit zwischen ereignisgesteuertem Empfang ([interrupt]) und periodischer Verarbeitung ([cyclic task], CanTp_MainFunction). Dies ermöglicht es, das Senden von FC-Frames aus dem Interrupt- in den Task-Kontext zu verlagern.
  • Spezifikationsunterschiede zu Folge-Releases:
    • Im Release R23-11 sind die Funktionsaufrufe noch mit konkreten AUTOSAR-Parametern (PduIdType, PduInfoType, PduLengthType, BufReq_ReturnType, Std_ReturnType) und die untere Schicht konkret als CanIf ausgewiesen. In nachfolgenden Releases wurde dies zu LSduR abstrahiert und die Parametersignaturen wurden aus der UML-Darstellung entfernt.

Versionsvergleich KI-generiert · gemini-3.8-flash (via agy)

R23-11 → R24-11 normative Änderung Nachfolger: FIG-b67cd113aa539402
  • «interface»: Linke Lebenslinie zu konkretem Modul «module» PduR geändert.
  • «module» :CanTp: Mittlere Lebenslinie von Instanznotation zu Moduldefinition «module» CanTp umbenannt.
  • «module» CanIf: Rechte Lebenslinie zu abstrahierter Schicht «module» LSduR umbenannt.
  • CanIf_Transmit(): Aufruf durch LSduR_CanTpTransmit() ersetzt (sowohl in [Buffer full] als auch in [cyclic task]).
  • Schnittstellensignaturen: Datentypen und Parameter (PduIdType, const PduInfoType*, PduLengthType, BufReq_ReturnType, Std_ReturnType) an allen Nachrichtenaufrufen (CanTp_RxIndication, PduR_CanTpStartOfReception, PduR_CanTpCopyRxData, PduR_CanTpRxIndication, CanTp_TxConfirmation) entfernt und durch parameterlose Aufrufe () ersetzt.

Zugeordnete Anforderungen

Diese Angaben zeigt der Versions-Explorer.

Vorkommen in AUTOSAR-Releases (4)

Release Dokument Seite Nr. Bildunterschrift im Dokument
EXTERN AUTOSAR_SWS_CANTransportLayer S. 73 9.5 Figure 9.5: Large N-SDU Reception
R21-11 AUTOSAR_SWS_CANTransportLayer S. 67 9.5 Figure 9.5: Large N-SDU Reception
R22-11 AUTOSAR_SWS_CANTransportLayer S. 73 9.5 Figure 9.5: Large N-SDU Reception
R23-11 AUTOSAR_CP_SWS_CANTransportLayer S. 73 9.5 Figure 9.5: Large N-SDU Reception