AUTOSAR_SWS_PDURouter
FIG-8fa3bdc35ae652bb
927 × 846 px
3 Release(s)
Figure 9.13: Gateway of I-PDU from CAN to LIN
SHA-256 Inhalts-Fingerabdruck:
8fa3bdc35ae652bbbd962c0c5718ecfbdeca20c539c0c16085606f3d413b5c90
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07
1. Diagrammtyp & Architektur-Kontext
- Klassifikation: UML-Sequenzdiagramm (Interaktionsdiagramm mit bedingtem Ausführungsrahmen /
alt-Kombinationsfragment). - Technischer Zweck: Spezifikation des Gateway-Mechanismus für I-PDUs zwischen ereignisgesteuerten Kommunikationsschnittstellen (hier:
CanIf) und zeitgesteuerten bzw. abfragebasierten Schnittstellen (hier:LinIf, übertragbar aufFrIf/ FlexRay) im AUTOSAR Classic Platform Communication Stack (PduR, SWS PDU Router). - Funktionale Einordnung: Entkopplung von Empfang und Weitersenden über PDU-Pufferung (FIFO/Single-Buffer) im PduR unter Verwendung des AUTOSAR TriggerTransmit-Prinzips (Pull-Mechanismus durch den LIN-Master-Scheduler anstelle von direktem Push bei Übertragung).
2. Komponenten, Entitäten & Schnittstellen
Beteiligte BSW-Module (Akteure mit Stereotyp «module»):
PduR(PDU Router): Zentraler Vermittlungsknoten; übernimmt PDU-Identifikation, Routing-Tabellen-Auflösung, Pufferverwaltung (FIFO/Queue) und Datenduplikation/-bereitstellung.CanIf(CAN Interface): Untere Schicht der Quellseite (Lower Layer Producer); meldet asynchron eingegangene CAN-I-PDUs.LinIf(LIN Interface): Untere Schicht der Zielseite (Lower Layer Consumer); agiert im LIN-Cluster als Master und fordert Daten gemäß Schedule-Table an.
Schnittstellen & Datentypen (API-Signaturen):
PduR_<User:Lo>RxIndication(PduIdType RxPduId, const PduInfoType* PduInfoPtr):- Callback von
CanIfanPduRzur Übergabe der empfangenen I-PDU.
- Callback von
LinIf_Transmit(PduIdType TxPduId, const PduInfoType* PduInfoPtr)(im Diagramm inkl. Return-Typ dargestellt):- Steueraufruf zur Vormerkung eines sporadischen LIN-Frames.
PduR_<User:Lo>TriggerTransmit(PduIdType TxPduId, PduInfoType* PduInfoPtr):- Abruf-Callback von
LinIfanPduR, um Nutzdaten synchron in den LIN-Treiberpuffer bereitzustellen.
- Abruf-Callback von
PduR_<User:Lo>TxConfirmation(PduIdType TxPduId, Std_ReturnType result):- Bestätigungs-Callback nach erfolgreichem/fehlerhaftem Sendevorgang auf dem LIN-Bus.
- Datenstrukturen:
PduInfoType: Enthält Zeiger auf SDU-Daten (SduDataPtr), Metadaten (MetaDataPtr) und SDU-Länge (SduLength).PduIdType: Ganzzahlige ID zur Identifikation der Quell-/Ziel-I-PDU.
3. Dynamisches Verhalten & Sequenzablauf
- Empfang & Pufferung (Asynchroner Empfangspfad):
CanIfsignalisiert den Empfang viaPduR_<User:Lo>RxIndication(...).PduRspeichert die I-PDU intern (buffer IPDU()). Die Pufferung kann als FIFO für mehrere I-PDUs konfiguriert sein (PduRQueueDepth > 1).
- Bedingte Signalisierung (
alt-Block):- Zweig
[if LIN sporadic frame]:PduRtriggertLinIf_Transmit(...).LinIfsetzt intern ein Sendeflag (flag frame for transmission()), damit der LIN-Master den Frame im nächsten passenden Slot der Schedule-Table einplant. Synchroner Rücksprung. - Zweig
[otherwise](Unconditional / Event-triggered Frames): Keine explizite Benachrichtigung vonLinIferforderlich; der Schedule-Ablauf im LIN-Master ist rein deterministisch vorgegeben. PduRschließt die Bearbeitung vonRxIndicationab und kehrt zuCanIfzurück.
- Zweig
- Datenauslese via Pull-Prinzip (Zeitgesteuerter Sendepfad):
- Erreicht der LIN-Scheduler den entsprechenden Frame-Slot, fordert
LinIfdie aktuellen Nutzdaten viaPduR_<User:Lo>TriggerTransmit(...)an. PduRkopiert die älteste gepufferte I-PDU (copy data(), FIFO-Prinzip: „Get the oldest IPDU“) in den bereitgestellten Puffer vonPduInfoPtr.
- Erreicht der LIN-Scheduler den entsprechenden Frame-Slot, fordert
- Sendeabschluss:
- Nach physischem Bus-Versand meldet
LinIfden Status synchron oder asynchron viaPduR_<User:Lo>TxConfirmation(...)an denPduR. PduRquittiert und gibt den entsprechenden Pufferplatz frei.
- Nach physischem Bus-Versand meldet
4. Normative Relevanz & Entwickler-Hinweise
- PduR-Pufferkonfiguration (
PduRBuffer/PduRQueueDepth):- Für das Gatewaying CAN → LIN ist im PduR zwingend ein Puffer erforderlich, da
LinIf_Transmitdie Nutzdaten nicht kopiert, sondern das Versenden erst im späterenTriggerTransmit-Kontext stattfindet. - Bei
PduRQueueDepth = 1überschreiben neu eintreffende CAN-Nachrichten ältere Daten (Data Overwrite), sofern diese bis dahin nicht vom LIN-Scheduler abgerufen wurden. - Bei FIFO-Nutzung (
PduRQueueDepth > 1) muss auf Pufferüberlauf (BUFREQ_E_OVFL) geachtet und eine Overflow-Strategie konfiguriert werden.
- Für das Gatewaying CAN → LIN ist im PduR zwingend ein Puffer erforderlich, da
- Reentrant- & Task-Kontext-Anforderungen:
PduR_<User:Lo>RxIndicationläuft im Kontext des CAN-Interrupts bzw. derCan_MainFunction_Read/CanIf-Task.PduR_<User:Lo>TriggerTransmitwird im Schedule-Kontext derLinIf_MainFunctionaufgerufen.- Kritischer Bereich (Exclusive Area): Der PduR-Puffer muss threadsicher vor konkurrierendem Zugriff zwischen
RxIndication(Write/Enqueue) undTriggerTransmit(Read/Dequeue) geschützt werden.
- Return-Werte & Fehlerbehandlung bei
TriggerTransmit:- Ist der PduR-Puffer leer (keine Daten empfangen), gibt
PduR_<User:Lo>TriggerTransmitnormativE_NOT_OKzurück;LinIfbricht den Sendevorgang für diesen Slot ab oder sendet Null-Bytes (gemäß LIN-Spezifikation).
- Ist der PduR-Puffer leer (keine Daten empfangen), gibt
- Portabilität des Musters:
- Das dargestellte Interaktionsmuster gilt identisch für Gateways in Richtung FlexRay Interface (
FrIf), sofern dort I-PDUs ebenfalls überFrIf_TriggerTransmitbedient werden.
- Das dargestellte Interaktionsmuster gilt identisch für Gateways in Richtung FlexRay Interface (
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.