AUTOSAR_CP_SWS_CANDriver
FIG-51cbf768b3377f19
481 × 450 px
1 Release(s)
Figure 7.2: Controller State Machine
SHA-256 Inhalts-Fingerabdruck:
51cbf768b3377f19be58a19c43a8f6220bdbd2010fc4364859dcda3622ab0e8c
✦
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-Zustandsautomat (State Machine / Statechart Diagram).
- Technischer Zweck & Einordnung:
- Definiert den normativen hardwarenahen Lebenszyklus und die Betriebsmodi eines einzelnen CAN-Controllers innerhalb des MCAL-Treibers (
Can, Modul-ID 80). - Dient als Zustandsreferenz für die Steuerung durch das CAN-Interface (
CanIf) bzw. den CAN State Manager (CanSM). - Trennt die globale Modul-Initialisierung (
Can_Init()/Can_DeInit()) von den individuellen logischen Betriebszuständen der einzelnen Hardware-Controller.
- Definiert den normativen hardwarenahen Lebenszyklus und die Betriebsmodi eines einzelnen CAN-Controllers innerhalb des MCAL-Treibers (
2. Komponenten, Entitäten & Schnittstellen
- Zustände (
Can_ControllerStateTypegemäß SWS_Can_00259):UNINIT(CAN_CS_UNINIT): Grundzustand nach Reset oder vollständiger De-Initialisierung. Hardware-Register befinden sich im Reset-/Power-Down-Zustand; Interrupts sind maskiert, Clocks ggf. gegated.STOPPED(CAN_CS_STOPPED): Controller ist konfiguriert und initialisiert, jedoch logisch vom CAN-Bus getrennt (kein Senden, kein Empfangen, keine ACKs auf dem Bus). Dies ist der deterministische Einstiegszustand nach der Initialisierung.STARTED(CAN_CS_STARTED): Operativer Betriebszustand. Der Controller nimmt vollumfänglich an der Buskommunikation teil (Tx/Rx aktiv, ACK-Erzeugung, Fehler-Frames).SLEEP(CAN_CS_SLEEP): Energiesparmodus des Controllers mit aktivierter Wake-up-Erkennung (sofern hardwareseitig unterstützt).
- Trigger & Schnittstellenfunktionen:
- Modul-APIs:
Can_Init(ConfigPtr),Can_DeInit()(SWS_Can_00408). - Controller-Modus-API:
Can_SetControllerMode(Controller, Transition)(SWS_Can_00174) mit ZielzuständenCAN_CS_STARTED,CAN_CS_STOPPED,CAN_CS_SLEEP. - Asynchrone Rückmeldung:
CanIf_ControllerModeIndication(Controller, ControllerMode).
- Modul-APIs:
- Kardinalitäten:
1 : nBeziehung zwischen dem CAN-Treiber-Modul und den physikalischen CAN-Controllern. Der Zustand jedes Controllers wird unabhängig verwaltet, währendCan_InitundCan_DeInittreiberweit wirken.
3. Dynamisches Verhalten & Sequenzablauf
- Initialisierungssequenz:
- PowerON reset führt in den Pseudozustand
UNINIT. - Aufruf von
Can_Init()überführt alle konfigurierten CAN-Controller synchron vonUNINITnachSTOPPED.
- PowerON reset führt in den Pseudozustand
- Modusübergänge im Betrieb:
STOPPED -> STARTED: Aufruf vonCan_SetControllerMode(Controller, CAN_CS_STARTED). Aktiviert Rx/Tx-Puffer und Bit-Timing-Logik.STARTED -> STOPPED: Aufruf vonCan_SetControllerMode(Controller, CAN_CS_STOPPED). Bricht laufende Tx-Übertragungen ab und unterdrückt Rx.STOPPED -> SLEEP: Aufruf vonCan_SetControllerMode(Controller, CAN_CS_SLEEP). Versetzt den Controller in den Sleep-Modus.SLEEP -> STOPPED: Aufruf vonCan_SetControllerMode(Controller, CAN_CS_STOPPED)(z. B. nach Wake-up-Event via CAN-Transceiver/Busaktivität).
- Invariante der Moduswechsel (Verbotene Direktpfade):
- Es existiert keine direkte Transition zwischen
STARTEDundSLEEP. Ein Übergang in oder aus dem Schlafmodus muss zwingend über den ZwischenzustandSTOPPEDgeführt werden (STARTED↔STOPPED↔SLEEP).
- Es existiert keine direkte Transition zwischen
- Selbst-Transitionen (Idempotenz):
- Die Schleifen an
STOPPEDundSLEEPstellen sicher, dass ein erneuter Request auf den bereits aktiven Zustand idempotent behandelt wird (liefertE_OK, führt ggf. die Mode-Indication aus).
- Die Schleifen an
- De-Initialisierung:
Can_DeInit()ist ausschließlich aus den ZuständenSTOPPEDoderSLEEPzulässig und überführt den Controller zurück nachUNINIT.- Eine De-Initialisierung direkt aus
STARTEDist verboten.
4. Normative Relevanz & Entwickler-Hinweise
- Asynchronität & Hardware-Latenz:
- Zustandswechsel via
Can_SetControllerMode()sind hardwarebedingt oft asynchron (Warten auf Bus-Idle, Synchronisation auf Bit-Grenzen oder Bestätigung des Freeze-/Init-Modes im Silizium). - Treiber-Implementierer müssen die Umschaltung entweder über Polling (mit harter Timeout-Begrenzung) oder über Interrupts abwickeln und den erfolgreichen Wechsel via
CanIf_ControllerModeIndication()signalisieren.
- Zustandswechsel via
- Vorbedingungen für
Can_DeInit()(SWS_Can_00408):- Bevor
Can_DeInit()aufgerufen werden darf, müssen alle Controller des CAN-Treibers inSTOPPEDoderSLEEPsein. - Befindet sich mindestens ein Controller im Zustand
STARTED, muss der Aufruf abgewiesen und bei aktiviertem DET der FehlerCAN_E_TRANSITIONgemeldet werden.
- Bevor
- Puffer-Bereinigung bei
STARTED -> STOPPED:- Beim Verlassen von
STARTEDmüssen ausstehende Transmit-Requests in Hardware-Mailboxen sicher abgebrochen werden (Hardware Transmission Cancellation). - Für stornierte Frames dürfen keine
CanIf_TxConfirmation()-Callbacks generiert werden.
- Beim Verlassen von
- Fehlerbehandlung (DET):
- Aufrufe von
Can_SetControllerMode()im ZustandUNINITführen zwingend zuCAN_E_UNINIT. - Illegale Transitionsanfragen (z. B. Direktanforderung
STARTED -> SLEEP) müssen mitCAN_E_TRANSITIONzurückgewiesen werden.
- Aufrufe von
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.