AUTOSAR_CP_SWS_CANTransceiverDriver
FIG-219b251f222f8da2
797 × 1158 px
1 Release(s)
Figure 9.5: CanTrcv Deinit SPI asynchronous II
SHA-256 Inhalts-Fingerabdruck:
219b251f222f8da238f57aea4bef382b05187ff473c9c9e0156503aa169317d4
✦
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
- 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 inSTANDBY). - 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, Instanzsymboloo): 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 ModusSTANDBY.
Phase 1: Controller Sleep Request (Synchron)
CanSMruftCanIf_SetControllerMode(ControllerId, CANIF_CS_SLEEP).CanIfdelegiert synchron anCan_SetControllerMode(Controller, CAN_T_SLEEP).- Rückmeldung
:CAN_OK/:CAN_NOT_OKanCanIf, weitergereicht als:E_OK/:E_NOT_OKanCanSM. - Pufferung: Nur wenn
:E_OKzurückgegeben wird, speichertCanSMden intern gepufferten Controller-Zustand alsCANIF_CS_SLEEP. BeiE_NOT_OKbleibt der vorherige Zustand erhalten.
Phase 2: Wake-Flag-Abfrage via SPI (Asynchron)
CanSMinitiiertCanIf_CheckTrcvWakeFlag(TransceiverId).CanIfleitet anCanTrcv_CheckWakeFlag(Transceiver)weiter.CanTrcvtriggertRead Wake Flag via Spi_AsyncTransmit()amSpi-Treiber.
Phase 3: Verzweigung nach Weckquelle (alt Wakeup Source)
- Pfad 1:
[bus (priority_high)]CanTrcvmeldet das Ereignis an den State Manager:EcuM_SetWakeupEvent(WuSourceBus).
- Pfad 2:
[pin (prio_medium)]CanTrcvmeldet optional:EcuM_SetWakeupEvent(WuSourcePin).- Hardware-Sonderbehandlung: Werden Wake-Flags gelöscht, muss der dominante Pegel auf RxD gelöscht werden (OEM-HW-Requirement).
CanTrcvführtClear Wake Flag via Spi_AsyncTransmit()aus.CanTrcvsignalisiert Abschluss via CallbackCanIf_CheckTrcvWakeFlagIndication(TransceiverId)anCanSM_CheckTransceiverWakeFlagIndication(Transceiver).alt return value of SetCtrlMode (SLEEP):[E_OK]:CanSMmeldet anComMden ZustandNoComviaComM_CanSM_ModeIndication(NetworkA, NoCom).[E_NOT_OK]: KeineNoCom-Meldung; der Kanal verbleibt im fehlerhaften Zustand.
- Pfad 3:
[no wakeup (prio_low)]- Kein Weckereignis detektiert.
CanTrcvbenachrichtigtCanIf_CheckTrcvWakeFlagIndication(TransceiverId)→CanSM_CheckTransceiverWakeFlagIndication(Transceiver).alt return value of SetCtrlMode (SLEEP):[E_OK]:CanSMmeldet anComMden ZustandNoComviaComM_BusSM_ModeIndication(NetworkA, NoCom).[E_NOT_OK]: Abbruch ohneNoCom-Indikation.
4. Normative Relevanz & Entwickler-Hinweise
- Asynchrone SPI-Verkettung: Der Treiber
CanTrcvdarf 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 (
SetCtrlModeRückgabewert): Ein Aufruf vonComM_*_ModeIndication(..., NoCom)ist strikt daran gekoppelt, dass der Controller-Sleep mitE_OKquittiert wurde. Ein Scheitern vonCan_SetControllerModeblockiert den geordneten Übergang nachNO_COMMUNICATION. - EcuM-Wakeup-Quellen-Mapping: Entwickler müssen sicherstellen, dass die symbolischen Wakeup-Quellen (
WuSourceBus,WuSourcePin) inEcuMmit entsprechender Priorisierung und Validierungs-Timeouts konfiguriert sind.
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.