DEENESPTFRRUARHIKOZHNL
AUTOSAR_CP_SWS_CANTransceiverDriver FIG-f0dad889ee35c5f5 797 × 1158 px 1 Release(s)

Figure 9.5: CanTrcv Deinit SPI asynchronous II

SHA-256 Inhalts-Fingerabdruck: f0dad889ee35c5f557add193bc3c7cb430af056ef43ccca1829425694ace30db
✦ KI-generierte Bildanalyse & technische Beschreibung Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07

I have checked the status of the environment and am analyzing the AUTOSAR specification figure.

1. Diagrammtyp & Architektur-Kontext

  • Klassifikation: UML-Sequenzdiagramm mit kombinierten Fragmenten (alt-Blöcke zur Guard-gesteuerten Verzweigung).
  • Technischer Zweck: Spezifikation der asynchronen Deinitialisierungs- und Sleep-Sequenz eines über SPI angebundenen CAN-Transceivers (CanTrcv) – Teil II (Fortsetzung nach Übergang des Transceivers in STANDBY).
  • Funktionale Einordnung: Koordination des Herunterfahrens des CAN-Subsystems im AUTOSAR Classic ComStack: Synchrones Versetzen des CAN-Controllers in den Sleep-Modus (CAN_T_SLEEP), asynchrones Prüfen und Bereinigen von Wakeup-Flags via SPI (Read/Clear Wake Flag via Spi_AsyncTransmit()) sowie geregelte Statusmeldung (NO_COMMUNICATION) an das State Management (CanSM, ComM).

2. Komponenten, Entitäten & Schnittstellen

  • Module & Akteure (Lifelines, Stereotyp «module»):
    • ComM (Communication Manager): Koordiniert Kommunikationsanforderungen der Anwenderkanäle (COMM_NO_COMMUNICATION).
    • EcuM (ECU State Manager, Instanzsymbol oo): Zentrale Erfassung und Validierung von Wakeup-Ereignissen.
    • CanSM (CAN State Manager): Zustandsmaschine für CAN-Netzwerke, orchestriert Controller- und Transceiver-Zustände.
    • CanIf (CAN Interface): Hardware-Abstraktionsschicht zwischen State Manager und Treibern.
    • CanTrcv (CAN Transceiver Driver, SPI-basiert, oo): Verwaltet externe Transceiver-Hardware über Register-Zugriffe via SPI.
    • Can (CAN Driver, MCAL, oo): Steuert den On-Chip CAN-Controller.
    • Spi (SPI Handler/Driver, MCAL): Führt die asynchronen SPI-Transfers für Registerzugriffe aus.
  • Verwendete Schnittstellen & Parameter:
    • CanIf_SetControllerMode(ControllerId, CANIF_CS_SLEEP) / Can_SetControllerMode(Controller, CAN_T_SLEEP)
    • CanIf_CheckTrcvWakeFlag(TransceiverId) / CanTrcv_CheckWakeFlag(Transceiver)
    • Spi_AsyncTransmit(): Asynchroner Bus-Transfer für Read/Clear von Registerwerten.
    • EcuM_SetWakeupEvent(WuSourceBus) / [optional]:EcuM_SetWakeupEvent(WuSourcePin)
    • CanIf_CheckTrcvWakeFlagIndication(TransceiverId) / CanSM_CheckTransceiverWakeFlagIndication(Transceiver)
    • ComM_BusSM_ModeIndication(NetworkA, NoCom) bzw. ComM_CanSM_ModeIndication(NetworkA, NoCom)

3. Dynamisches Verhalten & Sequenzablauf

Vorbedingung / Trigger
  • Eintrittsbedingung: alt CanSM_TransceiverModeIndication was called with TransceiverMode == STANDBY. Der Transceiver befindet sich bereits im Modus STANDBY.
Phase 1: Controller Sleep Request (Synchron)
  1. CanSM ruft CanIf_SetControllerMode(ControllerId, CANIF_CS_SLEEP).
  2. CanIf delegiert synchron an Can_SetControllerMode(Controller, CAN_T_SLEEP).
  3. Rückmeldung :CAN_OK / :CAN_NOT_OK an CanIf, weitergereicht als :E_OK / :E_NOT_OK an CanSM.
  4. Pufferung: Nur wenn :E_OK zurückgegeben wird, speichert CanSM den intern gepufferten Controller-Zustand als CANIF_CS_SLEEP. Bei E_NOT_OK bleibt der vorherige Zustand erhalten.
Phase 2: Wake-Flag-Abfrage via SPI (Asynchron)
  1. CanSM initiiert CanIf_CheckTrcvWakeFlag(TransceiverId).
  2. CanIf leitet an CanTrcv_CheckWakeFlag(Transceiver) weiter.
  3. CanTrcv triggert Read Wake Flag via Spi_AsyncTransmit() am Spi-Treiber.
Phase 3: Verzweigung nach Weckquelle (alt Wakeup Source)
  • Pfad 1: [bus (priority_high)]
    • CanTrcv meldet das Ereignis an den State Manager: EcuM_SetWakeupEvent(WuSourceBus).
  • Pfad 2: [pin (prio_medium)]
    • CanTrcv meldet optional: EcuM_SetWakeupEvent(WuSourcePin).
    • Hardware-Sonderbehandlung: Werden Wake-Flags gelöscht, muss der dominante Pegel auf RxD gelöscht werden (OEM-HW-Requirement).
    • CanTrcv führt Clear Wake Flag via Spi_AsyncTransmit() aus.
    • CanTrcv signalisiert Abschluss via Callback CanIf_CheckTrcvWakeFlagIndication(TransceiverId) an CanSM_CheckTransceiverWakeFlagIndication(Transceiver).
    • alt return value of SetCtrlMode (SLEEP):
      • [E_OK]: CanSM meldet an ComM den Zustand NoCom via ComM_CanSM_ModeIndication(NetworkA, NoCom).
      • [E_NOT_OK]: Keine NoCom-Meldung; der Kanal verbleibt im fehlerhaften Zustand.
  • Pfad 3: [no wakeup (prio_low)]
    • Kein Weckereignis detektiert.
    • CanTrcv benachrichtigt CanIf_CheckTrcvWakeFlagIndication(TransceiverId) → CanSM_CheckTransceiverWakeFlagIndication(Transceiver).
    • alt return value of SetCtrlMode (SLEEP):
      • [E_OK]: CanSM meldet an ComM den Zustand NoCom via ComM_BusSM_ModeIndication(NetworkA, NoCom).
      • [E_NOT_OK]: Abbruch ohne NoCom-Indikation.

4. Normative Relevanz & Entwickler-Hinweise

  • Asynchrone SPI-Verkettung: Der Treiber CanTrcv darf während der Deinitialisierung keine blockierenden Wartereisen auf SPI-Ebene ausführen. Er muss zustandsbasiert über SPI-Sequenz-/Job-End-Benachrichtigungen (Spi_JobEndNotification) arbeiten, um das Auslesen und anschließende Löschen der Register abzubilden.
  • RxD Dominant State Handling: Hardware-Transceiver halten die RxD-Leitung dominant, solange Wakeup-Flags im Chip-Register gesetzt sind. Das Löschen des Wake-Flags via SPI vor Abschluss des Deinit-Prozesses ist zwingend, da ein dominanter RxD-Pegel den CAN-Controller sonst sofort wieder wecken oder einen Busfehler vortäuschen würde.
  • Zustands-Synchronisation (SetCtrlMode Rückgabewert): Ein Aufruf von ComM_*_ModeIndication(..., NoCom) ist strikt daran gekoppelt, dass der Controller-Sleep mit E_OK quittiert wurde. Ein Scheitern von Can_SetControllerMode blockiert den geordneten Übergang nach NO_COMMUNICATION.
  • EcuM-Wakeup-Quellen-Mapping: Entwickler müssen sicherstellen, dass die symbolischen Wakeup-Quellen (WuSourceBus, WuSourcePin) in EcuM mit entsprechender Priorisierung und Validierungs-Timeouts konfiguriert sind.

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

R23-11 → R24-11 keine inhaltliche Änderung Nachfolger: FIG-219b251f222f8da2

Keine inhaltlichen Änderungen erkennbar.

Zugeordnete Anforderungen

Diese Angaben zeigt der Versions-Explorer.

Aus dem Dokument extrahierter Text & Kontext

Beschriftungen im Schaubild:

«module» | CanTrcv | «module» | EcuM | «module» | CanIf | «module» | ComM | «module» | CanSM | «module» | Spi | «module» | Can | alt CanSM_TransceiverModeIndication was called with TransceiverMode == STANDBY | In CanSM buffered CtrlMode = CANIF_CS_SLEEP if E_OK has | been returned |                              |                         | ! |   | " |              | alt Wakeup Source | [bus (priority_high)] | [pin (prio_medium)] | [no wakeup (prio_low)] |   #$ % |   #$ %   & '   | " |   | ! |   |  | ( |    | ) |  | * + , |   | ! |  - ./    0 & 1 | ( |  | alt return value of SetCtrlMode (SLEEP) | [E_OK] | [E_NOT_OK] | alt return value of SetCtrlMode (SLEEP) | [E_OK] | [E_NOT_OK] |   #$ % |    | " |  | ( |  | ! |         | " |  | ( |  2 | ) |   2  | " | - |   | " |  | ) | 3  | " |  | ) |   -   4     2  3 2 2    3 -  | CanSM_CheckTransceiverWakeFlagIndication(Transceiver) | Clear Wake Flag via Spi_AsyncTransmit() | CanIf_CheckTrcvWakeFlagIndication(TransceiverId) | [optional]:EcuM_SetWakeupEvent(WuSourcePin) | :E_OK / E_NOT_OK | CanSM_CheckTransceiverWakeFlagIndication(Transceiver) | CanIf_SetControllerMode(ControllerId, CANIF_CS_SLEEP) | Read Wake Flag via Spi_AsyncTransmit() | Can_SetControllerMode(Controller, CAN_T_SLEEP) | CanTrcv_CheckWakeFlag(Transceiver) | CanIf_CheckTrcvWakeFlagIndication(TransceiverId) | CanIf_CheckTrcvWakeFlag(TransceiverId) | ComM_BusSM_ModeIndication(NetworkA, NoCom) | EcuM_SetWakeupEvent(WuSourceBus) | :CAN_OK / CAN_NOT_OK | ComM_CanSM_ModeIndication(NetworkA, NoCom)

Vorkommen in AUTOSAR-Releases (1)

Release Dokument Seite Nr. Bildunterschrift im Dokument
R23-11 AUTOSAR_CP_SWS_CANTransceiverDriver S. 55 9.5 Figure 9.5: CanTrcv Deinit SPI asynchronous II