DEENESPTFRRUARHIKOZHNL

CAN Driver (Can)

ModulCan (CAN Driver)
BSW-Modul-ID80
Standard-Header#include "Can.h"
SWS-SpezifikationAUTOSAR_SWS_CANDriver.pdf
ClusterCAN

Modul-GuideKI-GENERIERT

Steuert die CAN-Controller-Hardware und vermittelt Senden, Empfangen und Zustandswechsel zum CAN Interface.
KI-GENERIERT ungeprüft Modell: claude-opus-5-5 · Aufwand: high · Temperatur: nicht steuerbar · Prompt: b6833c934a77 Herkunft Offene Fragen (2)
Kausaler Anker: R20-11 Gültig ab R20-11 Neu synthetisiert für diesen Spezifikationsstand.
KI-generiertclaude-opus-5-5 · 2026-10-13

Steuert die CAN-Controller-Hardware und vermittelt Senden, Empfangen und Zustandswechsel zum CAN Interface.

Der CAN-Treiber steuert die CAN-Controller einer Hardware-Unit und ist die Hardwareschicht unter dem CAN Interface. An dieses meldet er Empfang, Sendebestätigung, Bus-off und Moduswechsel per Callback [SWS_Can_00234]. Nach Can_Init sind alle Controller in STOPPED. Jeder Controller wird einzeln und asynchron mit Can_SetControllerMode gestartet; der Erfolg wird erst nachträglich gemeldet [SWS_Can_00230]. Gesendet wird mit Can_Write über Hardware-Transmit-Handles. Ist kein Sendeobjekt frei, liefert der Treiber CAN_BUSY, und CanIf puffert die Anforderung.

Der CAN-Treiber kapselt jeden Zugriff auf die CAN-Controller einer Hardware-Unit. Er dient dem CAN Interface als einzigem Nutzer und meldet Empfang, Sendebestätigung, Bus-off und Moduswechsel über fest vorgegebene CanIf-Callbacks [SWS_Can_00234]. Der ECU State Manager initialisiert ihn mit Can_Init und einem hardwarespezifischen Can_ConfigType [SWS_Can_00223]. Danach ist der Treiber in CAN_READY und alle Controller in STOPPED SWS CANDriver S. 29.

kontext EcuM EcuM Can Can (CAN-Treiber) EcuM->Can Can_Init / Can_DeInit SchM BSW Scheduler SchM->Can Can_MainFunction_* CanSM CanSM CanIf CanIf CanSM->CanIf Moduswünsche CanIf->CanSM Modus- und Bus-off-Meldungen CanIf->Can Can_Write, Can_SetControllerMode, Can_CheckWakeup, Abfragen Can->EcuM EcuM_CheckWakeup, EcuM_SetWakeupEvent Can->CanIf CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff, CanIf_ControllerModeIndication HW CAN-Controller (Hardware) Can->HW Registerzugriff Det DET Can->Det Det_ReportError / Det_ReportRuntimeError Os Os Can->Os GetCounterValue HW->Can Interrupts / Statusflags

Kontextdiagramm: Einbettung von Can zwischen EcuM, BSW Scheduler, CanIf, DET, Os und der Controller-Hardware. Quellen: [SWS_Can_00234], SWS CANDriver S. 78

Jeder Controller durchläuft die Zustände UNINIT, STOPPED, STARTED und SLEEP [SWS_Can_91013]. Gestartet wird er einzeln und asynchron mit Can_SetControllerMode: E_OK heißt nur „angenommen“ [SWS_Can_00230]. Den erreichten Zustand meldet der Treiber später über CanIf_ControllerModeIndication SWS CANDriver S. 33. Bus-off führt den Controller ohne Hardware-Recovery nach STOPPED; ein Bus-Wakeup führt ihn aus SLEEP nach STOPPED SWS CANDriver S. 35.

controllerzustand reset Power-on-Reset UNINIT CAN_CS_UNINIT reset->UNINIT STOPPED CAN_CS_STOPPED UNINIT->STOPPED Can_Init STOPPED->UNINIT Can_DeInit STOPPED->STOPPED Can_SetBaudrate STARTED CAN_CS_STARTED STOPPED->STARTED Can_SetControllerMode(CAN_CS_STARTED) SLEEP CAN_CS_SLEEP STOPPED->SLEEP Can_SetControllerMode(CAN_CS_SLEEP) STARTED->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) oder Bus-off (Hardware) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) oder Wakeup vom Bus SLEEP->SLEEP Can_SetBaudrate

Zustandsdiagramm: Übergänge eines Controllers durch Software-Aufrufe sowie Bus-off- und Wakeup-Ereignisse. Quellen: [SWS_Can_91010], SWS CANDriver S. 38

Gesendet wird mit Can_Write(Hth, PduInfo). Die beiden obersten Bits von Can_IdType unterscheiden CAN 2.0 und CAN FD sowie Standard- und Extended-ID [SWS_Can_00233] [SWS_Can_00416]. Ist kein Sendeobjekt frei, liefert der Treiber CAN_BUSY, und CanIf puffert die Anforderung [SWS_Can_00039] SWS CANDriver S. 47. Ereignisse werden per Interrupt oder durch Polling erkannt. Für das Polling gibt es zyklische Hauptfunktionen SWS CANDriver S. 41:

  • Write und Read: Sendebestätigungen und Empfang
  • BusOff und Wakeup: Bus-off- und Wakeup-Ereignisse
  • Mode: Modusübergänge

Die Hauptfunktionen sind in [SWS_Can_00225] bis [SWS_Can_00228] und [SWS_Can_00368] definiert.

Im Fehlerfall meldet der Treiber Entwicklungsfehler wie CAN_E_UNINIT oder CAN_E_TRANSITION an das DET [SWS_Can_91019]. Funktionen mit Rückgabewert liefern dann E_NOT_OK SWS CANDriver S. 48. Die Bus-off-Recovery übernimmt der CanSM über CanIf. Der Neustart dürfte wieder über Can_SetControllerMode(CAN_CS_STARTED) erfolgen SWS CANInterface S. 138. Fehlerzustand und Fehlerzähler sind abfragbar; die Zählerwerte gelten aber nicht als verlässlicher Buszustand [SWS_Can_91004] [SWS_Can_00516]. Frage (offen)

Rolle: hardwarenaher Treiber zwischen CanIf und CAN-Controllern

Der CAN-Treiber kapselt jeden Zugriff auf die CAN-Hardware einer Hardware-Unit. Zustandsänderungen der Controller laufen nur über Can_Init, Can_SetBaudrate und Can_SetControllerMode. Der Treiber speichert die Zustandswechsel dabei nicht selbst SWS CANDriver S. 30. Sein Partner nach oben ist das CAN Interface. Alle Callbacks, die der Treiber aufruft, sind in CanIf implementiert und nicht konfigurierbar: CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff und CanIf_ControllerModeIndication. Zusätzlich benötigt er Det_ReportRuntimeError und den Os-Dienst GetCounterValue [SWS_Can_00234] SWS CANDriver S. 73. Importierte Typen stammen u. a. aus ComStack_Types, EcuM und Os [SWS_Can_00222].

Der ECU State Manager initialisiert den Treiber über Can_Init. Laut Implementierungshinweis ruft er die Funktion höchstens einmal zur Laufzeit auf [SWS_Can_00223] SWS CANDriver S. 29. Die zyklischen Hauptfunktionen ruft der BSW Scheduler direkt auf. Sie haben weder Parameter noch Rückgabewert und sind nicht reentrant; eine Ausführungsreihenfolge ist nicht vorgeschrieben SWS CANDriver S. 78. Nach unten bietet der Treiber keine Callbacks an. Externe CAN-Controller dürfen nur über synchrone MCAL-APIs wie SPI angesprochen werden SWS CANDriver S. 76.

kontext EcuM EcuM Can Can (CAN-Treiber) EcuM->Can Can_Init / Can_DeInit SchM BSW Scheduler SchM->Can Can_MainFunction_* CanSM CanSM CanIf CanIf CanSM->CanIf Moduswünsche CanIf->CanSM Modus- und Bus-off-Meldungen CanIf->Can Can_Write, Can_SetControllerMode, Can_CheckWakeup, Abfragen Can->EcuM EcuM_CheckWakeup, EcuM_SetWakeupEvent Can->CanIf CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff, CanIf_ControllerModeIndication HW CAN-Controller (Hardware) Can->HW Registerzugriff Det DET Can->Det Det_ReportError / Det_ReportRuntimeError Os Os Can->Os GetCounterValue HW->Can Interrupts / Statusflags

Kontextdiagramm: Can wird von EcuM initialisiert, vom BSW Scheduler zyklisch aufgerufen und von CanIf genutzt. Es meldet an CanIf, EcuM und DET und nutzt Os für Timeouts. Quellen: [SWS_Can_00234], SWS CANDriver S. 45, SWS CANDriver S. 78

Vom Power-on bis STARTED: Treiber- und Controllerzustände

Der Treiber als Ganzes kennt nur die Zustände CAN_UNINIT und CAN_READY. Nach dem Reset befindet er sich in CAN_UNINIT. Can_Init initialisiert alle Controller gemäß Konfiguration und wechselt danach nach CAN_READY. Can_DeInit setzt den Modulzustand auf CAN_UNINIT, bevor es die Controller deinitialisiert [SWS_Can_00223] [SWS_Can_91002] SWS CANDriver S. 29.

Davon getrennt hat jeder Controller vier Zustände aus Can_ControllerStateType: CAN_CS_UNINIT, CAN_CS_STOPPED, CAN_CS_STARTED und CAN_CS_SLEEP [SWS_Can_91013].

  • In STOPPED ist der Controller initialisiert, nimmt aber nicht am Bus teil und sendet weder Error Frames noch Acknowledges.
  • STARTED ist der normale Betrieb.
  • SLEEP unterscheidet sich nur bei Hardware mit Sleep-Modus von STOPPED SWS CANDriver S. 31.

Can_Init versetzt alle Controller nach STOPPED SWS CANDriver S. 32. Can_DeInit führt sie aus STOPPED oder SLEEP nach UNINIT [SWS_Can_91010] SWS CANDriver S. 38. Aus STARTED gibt es keinen direkten Weg nach UNINIT SWS CANDriver S. 38.

controllerzustand reset Power-on-Reset UNINIT CAN_CS_UNINIT reset->UNINIT STOPPED CAN_CS_STOPPED UNINIT->STOPPED Can_Init STOPPED->UNINIT Can_DeInit STOPPED->STOPPED Can_SetBaudrate STARTED CAN_CS_STARTED STOPPED->STARTED Can_SetControllerMode(CAN_CS_STARTED) SLEEP CAN_CS_SLEEP STOPPED->SLEEP Can_SetControllerMode(CAN_CS_SLEEP) STARTED->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) oder Bus-off (Hardware) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) oder Wakeup vom Bus SLEEP->SLEEP Can_SetBaudrate

Zustandsdiagramm: Lebenszyklus eines CAN-Controllers. Software und Bus-Ereignisse lösen Übergänge aus; zurück nach UNINIT führt nur Can_DeInit aus STOPPED oder SLEEP. Quellen: [SWS_Can_91013], [SWS_Can_91010], SWS CANDriver S. 38, SWS CANDriver S. 34, SWS CANDriver S. 35

Jeder Controller wird einzeln mit Can_SetControllerMode(CAN_CS_STARTED) gestartet SWS CANDriver S. 29. Der Dienst arbeitet asynchron: E_OK bedeutet nur, dass die Anforderung angenommen wurde [SWS_Can_00230]. Bei jedem Übergang nach STARTED wird der Controller neu initialisiert, und zwar mit der zuletzt von Can_Init oder Can_SetBaudrate verwendeten Konfiguration SWS CANDriver S. 59. Die Hardware kann den Wechsel verzögert übernehmen. Deshalb meldet der Treiber den erreichten Zustand erst nachträglich über CanIf_ControllerModeIndication; ob das Ziel erreicht wird, überwacht eine obere Schicht SWS CANDriver S. 33. Gepollte Modusübergänge erkennt Can_MainFunction_Mode [SWS_Can_00368]. Can_GetControllerMode fragt den aktuellen Modus synchron ab [SWS_Can_91014].

Initialisierung und Start eines CAN-ControllersEcuMCanIf-Nutzer (z. B. CanSM)CanIfCanBSW SchedulerCAN-ControllerUse Case: InitialisierungCan_Init(Config)alle Controller konfigurierenController: CAN_CS_STOPPEDModul: CAN_READYUse Case: Controller einzeln startenCanIf_SetControllerMode(STARTED)Can_SetControllerMode(Controller, CAN_CS_STARTED)Neuinitialisierung,Start anfordernE_OK (Anforderung angenommen)E_OKloopbis der Übergang wirksam istCan_MainFunction_Mode()Statusflag lesenCanIf_ControllerModeIndication(ControllerId, CAN_CS_STARTED)<User_ControllerModeIndication>

Sequenzdiagramm: Initialisierung durch EcuM und asynchroner Start eines Controllers. Die Erfolgsmeldung folgt erst nach dem Polling in Can_MainFunction_Mode. Quellen: [SWS_Can_00230], [SWS_Can_00368], SWS CANInterface S. 156, SWS CANDriver S. 29

Senden über Hardware-Transmit-Handles

CanIf übergibt Sendeaufträge mit Can_Write(Hth, PduInfo). Die Hth benennt das Hardware-Sendeobjekt und damit auch den Controller, weil HTH-Nummern innerhalb einer Hardware-Unit eindeutig sind [SWS_Can_00233]. Can_HwHandleType umfasst standardmäßig 0..0x0FF und bei mehr als 255 Hardwareobjekten den erweiterten Bereich bis 0xFFFF [SWS_Can_00429]. Can_PduType bündelt die Felder swPduHandle, length, id und sdu [SWS_Can_00415].

In Can_IdType kodieren die beiden höchstwertigen Bits den Frametyp [SWS_Can_00416]:

  • 00: CAN mit Standard-ID
  • 01: CAN FD mit Standard-ID
  • 10: CAN mit Extended-ID
  • 11: CAN FD mit Extended-ID

So lassen sich CAN-2.0- und CAN-FD-Frames auf Frame-Ebene mischen, sofern für den Controller eine FD-Baudratenkonfiguration aktiv ist SWS CANDriver S. 49 SWS CANInterface S. 71.

Can_Write muss thread-safe sein, weil CanIf_Transmit reentrant ist. Der Treiber liefert CAN_BUSY, wenn kein Sendeobjekt frei ist oder wenn ein präemptiver Aufruf nicht reentrant ausgeführt werden kann [SWS_Can_00039] SWS CANDriver S. 47. CanIf puffert die Anforderung dann. Wird ein Objekt frei, ruft CanIf Can_Write in Prioritätsreihenfolge erneut auf SWS CANInterface S. 48. Den swPduHandle hält der Treiber bis zur zugehörigen CanIf_TxConfirmation vor SWS CANDriver S. 35. Gegen Prioritätsinversion lässt sich Multiplexed Transmission statisch konfigurieren; dabei bilden mehrere Hardwareobjekte eine HTH SWS CANDriver S. 40.

Senden einer L-PDU mit BestätigungCanIfCanCAN-ControllerBSW SchedulerCan_Write(Hth, PduInfo)altHardware-Sendeobjekt freiswPduHandle je HTH merkenL-PDU ins Hardwareobjekt,Senden auslösenE_OKkein Objekt frei oder nicht reentrant ausführbarCAN_BUSYL-PDU im CanIfTxBuffer puffernFrame gesendet und vom Bus bestätigtaltInterrupt-BetriebTX-InterruptPolling-BetriebCan_MainFunction_Write()anstehende Bestätigungen prüfenCanIf_TxConfirmation(swPduHandle)optgepufferte L-PDU für diese HTHCan_Write(Hth, höchstpriore L-PDU)

Sequenzdiagramm: Sendeauftrag mit den Pfaden E_OK und CAN_BUSY, anschließend die Bestätigung per Interrupt oder Polling. Danach kann CanIf eine gepufferte L-PDU nachschieben. Quellen: [SWS_Can_00233], [SWS_Can_00039], SWS CANInterface S. 142, SWS CANInterface S. 48

Empfangen und die zyklischen Hauptfunktionen

Bei Empfang ruft der Treiber CanIf_RxIndication auf. Er übergibt ID, Hardwareobjekt und abstrakte CanIf-ControllerId sowie Länge und Zeiger auf die L-SDU. Bei Extended-Frames setzt er das MSB der ID, damit CanIf den Frametyp erkennt SWS CANDriver S. 43. Optional ist vorher ein konfigurierbarer L-PDU-Callout <LPDU_CalloutName> geschaltet [SWS_Can_00443]. Liefert er false, wird die L-PDU laut Dokumentstelle (R25-11) nicht weiterverarbeitet SWS CANDriver S. 77.

Ereignisse werden per Interrupt oder durch Polling von Statusflags erkannt. Ein reiner Polling-Betrieb ganz ohne Interrupts muss konfigurierbar sein. Beim Polling rufen die Hauptfunktionen dieselben Callbacks auf, nur aus dem Task- statt dem ISR-Kontext SWS CANDriver S. 41. Jede Hauptfunktion pollt eine Ereignisart:

Die R20-11-Beschreibungen von Read und Write nennen nur den Fall POLLING [SWS_Can_00225] [SWS_Can_00226]. Die Dokumentstellen späterer Releases ergänzen MIXED; dann werden nur Objekte mit CanHardwareObjectUsesPolling = TRUE gepollt SWS CANDriver S. 81 SWS CANDriver S. 79. Diese Erweiterung belegen die R20-11-Requirements nicht. Sind über CanMainFunctionRWPeriods mehrere Perioden konfiguriert, erhalten die Funktionsnamen das Suffix _<ShortName> [SWS_Can_00441] SWS CANDriver S. 122. Ohne jedes Polling darf eine Hauptfunktion als leeres Define umgesetzt werden SWS CANDriver S. 81.

Empfang einer L-PDU im Polling-BetriebBSW SchedulerCanCAN-ControllerL-PDU-CalloutCanIfCanIf-NutzerloopzyklischCan_MainFunction_Read()auf neue L-PDUs prüfenaltneue L-PDU vorhandenID normieren (Extended: MSB = 1),Daten ggf. in angepassten PufferoptL-PDU-Callout konfiguriert<LPDU_CalloutName>(Hrh, CanId, CanDataLegth, CanSduPtr)true / falsebei false: L-PDU verwerfenCanIf_RxIndication(Mailbox, PduInfoPtr)Rx-Indikation an den Nutzerkeine neue L-PDU

Sequenzdiagramm: Empfang im Polling-Betrieb mit ID-Normierung, optionalem L-PDU-Callout und Weitergabe an CanIf. Quellen: [SWS_Can_00226], [SWS_Can_00443], SWS CANInterface S. 153, SWS CANDriver S. 43

Sleep, Wakeup und Interruptsteuerung

Der Treiber behandelt nur Wakeups, die der Controller selbst erkennt, nicht solche über den Transceiver SWS CANDriver S. 45. Bei einem Hardware-Wakeup geht der Controller von SLEEP nach STOPPED. Die auslösende L-PDU wird nicht weiterverarbeitet. EcuM_CheckWakeup wird im Interrupt oder in Can_MainFunction_Wakeup aufgerufen, mit der über CanWakeupSourceRef konfigurierten Quelle SWS CANDriver S. 35. Der EcuM ruft dann über CanIf Can_CheckWakeup auf. Diese Funktion meldet ein erkanntes Wakeup per EcuM_SetWakeupEvent [SWS_Can_00360] SWS CANDriver S. 63. Gegen Fehlwakeups validieren EcuM und CanIf ohne Beteiligung des Treibers SWS CANDriver S. 45.

Can_DisableControllerInterrupts und Can_EnableControllerInterrupts sind reentrant und wirken geschachtelt. Nach n Disable-Aufrufen sind n Enable-Aufrufe nötig. Ein Enable ohne vorheriges Disable bleibt wirkungslos [SWS_Can_00231] [SWS_Can_00232] SWS CANDriver S. 61 SWS CANDriver S. 62.

Wakeup vom CAN-BusCAN-ControllerCanEcuMCanIfUse Case: Controller in CAN_CS_SLEEPWakeup-Ereignis vom BusaltInterrupt-BetriebWakeup-ISRPolling-BetriebCan_MainFunction_Wakeup()Controller SLEEP -> STOPPED,auslösende L-PDU nicht verarbeitenEcuM_CheckWakeup(Quelle aus CanWakeupSourceRef)Wakeup-Quelle über CanIf prüfenCan_CheckWakeup(Controller)optWakeup erkanntEcuM_SetWakeupEventE_OKValidierung gegen Fehlwakeupsdurch EcuM und CanIf, ohne Can

Sequenzdiagramm: Bus-Wakeup aus SLEEP, Meldung an EcuM und Rückfrage über CanIf mit Can_CheckWakeup. Quellen: [SWS_Can_00360], [SWS_Can_00228], SWS CANDriver S. 45, SWS CANDriver S. 35

Konfigurationssätze, Partitionen und Instanzbezug

Can_Init erhält einen Zeiger auf Can_ConfigType. Diese hardwarespezifische Struktur enthält Einstellungen für alle Controller und Verweise auf die einzelnen Controller-Konfigurationen [SWS_Can_00223] [SWS_Can_00413]. Das Modul unterstützt VARIANT-PRE-COMPILE und VARIANT-POST-BUILD SWS CANDriver S. 96. Im Post-build-Beispiel wird beim Aufruf von Can_Init einer von mehreren Konfigurationssätzen gewählt EXP LayeredSoftwareArchitecture S. 120. Je Controller legt CanController unter anderem CanRxProcessing, CanTxProcessing, CanBusoffProcessing, CanWakeupProcessing und mindestens eine CanControllerBaudrateConfig fest SWS CANDriver S. 101.

In Multi-Partition-Systemen arbeitet das Modul in jeder Partition als unabhängige Instanz. Ein API-Aufruf wirkt nur in seiner eigenen Partition [SWS_Can_CONSTR_00508]. Für die Partitionszuordnung gelten drei Regeln:

  • Die Partitionen in CanControllerEcucPartitionRef müssen eine Teilmenge der Partitionen in CanEcucPartitionRef sein [SWS_Can_CONSTR_00509].
  • Controller und Transceiver-Kanal eines Kommunikationskanals referenzieren dieselbe Partition [SWS_Can_CONSTR_00510].
  • Nicht unterstützte Zuordnungen weist der Treiber zurück [SWS_Can_00507].

Mehrere Can-Module in einem Steuergerät unterscheiden sich durch ein geändertes Funktionspräfix SWS CANDriver S. 51.

Verhalten im Fehlerfall

Bei aktivierter Development Error Detection meldet der Treiber Entwicklungsfehler an das DET. Die Codes reichen von CAN_E_PARAM_POINTER (0x01) über CAN_E_UNINIT (0x05) und CAN_E_TRANSITION (0x06) bis CAN_E_INIT_FAILED (0x09) [SWS_Can_91019]. Nach der Rückkehr aus dem DET kehrt die Funktion sofort zurück; Funktionen mit Rückgabewert liefern dann E_NOT_OK SWS CANDriver S. 48. Einige Beispiele:

Als Laufzeitfehler ist CAN_E_DATALOST für verlorene Empfangsnachrichten definiert [SWS_Can_91020]. Er dürfte über das geforderte Det_ReportRuntimeError gemeldet werden [SWS_Can_00234]. Frage Q-50225b25430c9660 (offen)

Geht ein Controller in Bus-off, wechselt er von STARTED nach STOPPED. Der Treiber führt keine Hardware-Recovery aus. Er meldet das Ereignis per Interrupt oder in Can_MainFunction_BusOff über CanIf_ControllerBusOff [SWS_Can_00227] SWS CANDriver S. 35. Die Recovery übernimmt der CanSM, den CanIf mit CanSM_ControllerBusOff informiert SWS CANInterface S. 138. Interpretation: Der Neustart dürfte wieder über Can_SetControllerMode(CAN_CS_STARTED) laufen, das dabei die Konfiguration neu lädt SWS CANDriver S. 59. Frage Q-83e484ab9f8b1aac (offen)

Bus-off-Erkennung und MeldungCAN-ControllerCanBSW SchedulerCanIfCanSMController erreicht Bus-offaltInterrupt-BetriebBus-off-InterruptPolling-BetriebCan_MainFunction_BusOff()Statusbit lesenSTARTED -> STOPPED,keine Hardware-RecoveryCanIf_ControllerBusOff(ControllerId)CanSM_ControllerBusOffBus-off-Recovery liegt beim CanSMUse Case: Neustart (Interpretation)Neustart anfordern (Interpretation)Can_SetControllerMode(Controller, CAN_CS_STARTED)Neuinitialisierung mitzuletzt verwendeter Konfiguration

Sequenzdiagramm: Erkennung und Meldung eines Bus-off bis zum CanSM. Der als Interpretation markierte Neustart ist nicht explizit belegt. Quellen: [SWS_Can_00227], [SWS_Can_00234], SWS CANDriver S. 35, SWS CANInterface S. 138

Für die Diagnose liefert Can_GetControllerErrorState den Fehlerzustand: ACTIVE, PASSIVE oder BUSOFF [SWS_Can_91004] [SWS_Can_91003]. Die Rx- und Tx-Fehlerzähler lassen sich ebenfalls abfragen. Stellt der Controller sie nicht bereit, liefern die Funktionen E_NOT_OK. Da die Hardware die Zähler asynchron führt, taugen die Werte nicht für Annahmen über den Buszustand [SWS_Can_00511] [SWS_Can_00516] SWS CANDriver S. 67. Can_ErrorType beschreibt eine Obermenge typischer Hardware-Fehlerarten, von Bitfehlern bis zum Bus-Lock [SWS_Can_91021].

Gegen nicht reagierende Hardware nutzt der Treiber einen OsCounter für Timeouts SWS CANDriver S. 23. Wird ein Moduswechsel innerhalb von CanTimeoutDuration nicht wirksam, verlässt Can_SetControllerMode die Funktion, statt zu blockieren SWS CANDriver S. 33. Tritt während des Übergangs in den Sleep-Modus ein Bus-Wakeup auf, liefert Can_SetControllerMode(CAN_CS_STOPPED) E_NOT_OK SWS CANDriver S. 35.

Weiterführende Detailbelege

Viele Dokumentstellen stammen aus R23-11 bis R25-11. Normativ für R20-11 sind die zitierten Requirements. Direkt aus R20-11 stammt das Zustandsschaubild SWS CANDriver S. 38.

KI-generierter Leitfaden auf Basis der im Payload bereitgestellten Requirements und Dokumentstellen für R20-11. Annahmen sind als Interpretation gekennzeichnet; maßgeblich bleibt die Spezifikation.

CAN Driver (Can)

The CAN driver provides hardware-dependent access to the internal and external CAN controllers (CAN 2.0B, CAN FD, CAN XL).

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

function Can_Init [SWS_Can_00223] 📄 PDF

void Can_Init (const Can_ConfigType* Config);

This function initializes the module.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 8afbe47dbadd Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die synchrone, nicht reentrante Funktion Can_Init initialisiert das gesamte CAN-Treibermodul sowie die zugehörigen Hardware-Einheiten gemäß der übergebenen Konfiguration [SWS_Can_00223].

Verwendung und Aufrufkontext

Der Aufruf von Can_Init erfolgt während der Startphase des Steuergeräts verbindlich durch den ECU State Manager, noch bevor irgendeine andere Funktion des CAN-Treibers aufgerufen werden darf [SWS_Can_91012]. Als Parameter übernimmt die Funktion über Config einen Zeiger auf die Treiberkonfiguration (const Can_ConfigType*) und liefert keinen Rückgabewert zurück [SWS_Can_00223].

Initialisierungsumfang und Zustandsübergänge

Im Rahmen der Initialisierung setzt die Funktion alle erforderlichen Hardwareregister und initialisiert sämtliche CAN-Controller AUTOSAR_SWS_CANDriver S. 33:

  • Initialisierung statischer Variablen und interner Flags [SWS_Can_91012],
  • Konfiguration gemeinsamer Einstellungen für die vollständige CAN-Hardware-Einheit [SWS_Can_91012],
  • controllerspezifische Einstellungen für jeden einzelnen CAN-Controller [SWS_Can_91012].

Durch den Funktionsaufruf werden Zustandsübergänge der CAN-Hardware ausgelöst AUTOSAR_SWS_CANDriver S. 10, wobei Can_Init die Registerkonfiguration vornimmt, um die Controller in den vorgesehenen Basiszustand zu überführen [SWS_Can_91010] AUTOSAR_SWS_CANDriver S. 36.

Nebenläufigkeit und Einschränkungen

Da Can_Init als nicht reentrant spezifiziert ist, darf kein paralleler oder wiederholter Aufruf während einer laufenden Initialisierung stattfinden [SWS_Can_00223]. Zudem können bestimmte globale Einstellungen der Hardware-Einheit ausschließlich innerhalb von Can_Init gesetzt werden AUTOSAR_SWS_CANDriver S. 33.

Dieser Nutzungshinweis wurde automatisiert anhand der Spezifikationsdaten von AUTOSAR Classic R20-11 generiert.

Implementer's Guide folgt (Komplexität I1)

function Can_DeInit [SWS_Can_91002] 📄 PDF

void Can_DeInit (void);

This function de - initializes the module.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 982976925c7a Herkunft Offene Fragen (2)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die Funktion Can_DeInit dient der Deinitialisierung des CAN-Treibermoduls ([SWS_Can_91002]). Sie besitzt die Signatur void Can_DeInit(void), nimmt keine Parameter entgegen, liefert keinen Rückgabewert und wird synchron sowie nicht-reentrant ausgeführt ([SWS_Can_91002]). Die Schnittstelle ist über den Header Can.h verfügbar ([SWS_Can_91002]).

Der Aufruf stößt einen softwaregesteuerten Zustandsübergang an (AUTOSAR_SWS_CANDriver S. 10; AUTOSAR_SWS_CANDriver S. 41). Hierbei wechselt Can_DeInit den Modulzustand (AUTOSAR_SWS_CANDriver S. 33) und setzt alle CAN-Controller zurück (AUTOSAR_SWS_CANDriver S. 41).

Nebenläufigkeit und Einschränkungen

Für die Ausführung gelten strikte Vorbedingungen und Reihenfolgeanforderungen bezüglich der Hardware- und Modulzustände:

Zusammenspiel

Das Fehler- und Übergangsverhalten spiegelt die bereinigten Treiberabläufe wider, nach denen ungültige Zustandsübergänge einheitlich abgefangen werden ([SWS_Can_00441]).

Dieser Text wurde von einer KI basierend auf der Spezifikation AUTOSAR CP R20-11 generiert.

function Can_SetBaudrate [SWS_CAN_00491] 📄 PDF

Std_ReturnType Can_SetBaudrate (uint8 Controller, uint16 BaudRateConfig ID); ⚠️

This service shall set the baud rate configuration of the CAN controller. Depending on necessary baud rate modifications the controller might have to reset.

function Can_SetControllerMode [SWS_Can_00230] 📄 PDF

Std_ReturnType Can_SetControllerMode (uint8 Controller, Can_ControllerStateType Transition);

This function performs software triggered state transitions of the CAN controller State machine.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: a4b356b48b8a Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die Funktion Can_SetControllerMode (bereitgestellt über Can.h mit der Service-ID 0x03) führt software-getriggerte Zustandsübergänge der CAN-Controller-Zustandsmaschine durch ([SWS_Can_00230], AUTOSAR_SWS_CANDriver S. 35). Sie nimmt die hardwarebezogenen Registereinstellungen vor, um die Übergänge zwischen den grundlegenden Controller-Zuständen UNINIT, STOPPED, STARTED und SLEEP herbeizuführen ([SWS_Can_91010], AUTOSAR_SWS_CANDriver §7.3 „CAN Controller State Machine“).

Verwendung und Semantik

Der Aufruf erfolgt mit dem Parameter Controller zur Identifikation des CAN-Controllers sowie Transition vom Typ Can_ControllerStateType zur Vorgabe des gewünschten Zustandsübergangs ([SWS_Can_00230]). Der Dienst ist als asynchron und nicht reentrant (Non Reentrant) definiert ([SWS_Can_00230]). Ein Rückgabewert von E_OK bestätigt, dass die Anforderung akzeptiert wurde; E_NOT_OK zeigt an, dass die Anforderung abgewiesen wurde und ein Entwicklungsfehler vorliegt ([SWS_Can_00230], [SWS_Can_00441]).

Ablauf und Zusammenspiel

Nach Setzen der Registerkonfiguration wird Can_SetControllerMode wieder verlassen (AUTOSAR_SWS_CANDriver S. 38). Da das Can-Modul die Zustandswechsel der Hardware selbst nicht speichert ([SWS_Can_91010]), übernimmt vermutlich die zyklische Funktion Can_Mainfunction_Mode die asynchrone Vollendung beziehungsweise Überprüfung des durch Can_SetControllerMode angestoßenen Übergangs (AUTOSAR_SWS_CANDriver S. 38). Frage Q-03edb1b665a1624b (offen)

Dieser Text wurde von einer KI auf Basis der Spezifikationsdaten von AUTOSAR R20-11 generiert.

Implementer's Guide folgt (Komplexität I1)

function Can_DisableControllerInterrupts [SWS_Can_00231] 📄 PDF

void Can_DisableControllerInterrupts (uint8 Controller);

This function disables all interrupts for this CAN controller.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 9d72b1d46d5d Herkunft Offene Fragen (2)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die synchrone und reentrante Funktion Can_DisableControllerInterrupts deaktiviert alle Interrupts für einen spezifizierten CAN-Controller ([SWS_Can_00231]). Die Übergabe erfolgt über den Parameter Controller ohne Rückgabewert ([SWS_Can_00231]).

Hinsichtlich des Aufrufkontexts und der Nebenläufigkeit ist die Funktion reentrant ausgelegt und unterstützt mehrfache Aufrufe (AUTOSAR_SWS_CANDriver §8.3 „Can_DisableControllerInterrupts“). Interpretation: Ein mehrfacher Aufruf dürfte einen internen Schachtelungszähler erhöhen, sodass die Interrupts erst nach einer entsprechenden Anzahl von Freigabeaufrufen wieder aktiv geschaltet werden (AUTOSAR_SWS_CANDriver §8.3 „Can_DisableControllerInterrupts“, AUTOSAR_SWS_CANDriver §8.3 „Can_DisableControllerInterrupts“). Frage Q-61be56207aa92ee0 (offen)

Im Bereich der Fehlerbehandlung fordert die Spezifikation das Auslösen des Fehlers CAN_E_UNINIT, falls das Treibermodul beim Aufruf noch nicht initialisiert ist (AUTOSAR_SWS_CANDriver §8.3 „Can_DisableControllerInterrupts“). Zudem verlangt die Spezifikation das Auslösen eines weiteren Fehlers (AUTOSAR_SWS_CANDriver §8.3 „Can_DisableControllerInterrupts“); vermutlich dient dies der Überprüfung auf eine ungültige Controller-Kennung. Frage (offen)

Im Zusammenspiel innerhalb des CAN-Treibers dient der Aufruf dazu, controllerbezogene kritische Bereiche abzusichern, während der Controller aktiv bleibt (AUTOSAR_SWS_CANDriver §7.5 „Interrupt handling“). Formale Bereinigungen und historische Schnittstellenänderungen des Treibers sind in den Release-Hinweisen dokumentiert ([SWS_Can_00441]).

Dieser Text wurde von einer KI erstellt und dient als ergänzender Nutzungshinweis zur Spezifikation.

function Can_EnableControllerInterrupts [SWS_Can_00232] 📄 PDF

void Can_EnableControllerInterrupts (uint8 Controller);

This function enables all allowed interrupts.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 374e141963cb Herkunft Offene Fragen (2)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die synchrone und reentrante Funktion Can_EnableControllerInterrupts reaktiviert alle zulässigen Interrupts für den über den Parameter Controller angegebenen CAN-Controller ([SWS_Can_00232]). Sie besitzt keinen Rückgabewert und wird über die Header-Datei Can.h bereitgestellt ([SWS_Can_00232]).

Hinsichtlich des Ablaufs liest die Funktion softwareseitige Steuerflags aus (AUTOSAR_SWS_CANDriver S. 65). Wurden die Interrupts des Controllers zuvor mehrfach deaktiviert, muss Can_EnableControllerInterrupts vor der eigentlichen Freigabe ebenso oft aufgerufen werden (AUTOSAR_SWS_CANDriver S. 65). Interpretation: Der Treiber verwaltet geschachtelte Sperrabschnitte vermutlich über interne Zähler oder Flags, sodass die Hardware-Interrupts erst nach vollständigem Ausgleich aller Deaktivierungsaufrufe reaktiviert werden. Frage Q-6781f0fc9ad7d221 (offen)

Wird die Funktion aufgerufen, bevor der CAN-Treiber ordnungsgemäß initialisiert wurde, meldet sie den Fehler CAN_E_UNINIT (AUTOSAR_SWS_CANDriver S. 66). Dies dürfte im Treiberkontext als Development-Error behandelt werden ([SWS_Can_00441]). Frage Q-efbbcf03a2589e4e (offen) Im uninitialisierten Zustand führt die Funktion keine weiteren Aktionen am Controller aus (AUTOSAR_SWS_CANDriver S. 66).

Dieser Nutzungshinweis wurde automatisch auf Basis der Spezifikation generiert.

function Can_CheckWakeup [SWS_Can_00360] 📄 PDF

Std_ReturnType Can_CheckWakeup (uint8 Controller);

This function checks if a wakeup has occurred for the given controller.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 720a4fc64f2a Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Verwendung und Verhalten

Die synchrone Funktion Can_CheckWakeup prüft für einen bestimmten CAN-Controller, ob ein Wake-up-Ereignis erkannt wurde ([SWS_Can_00360], AUTOSAR_SWS_CANDriver S. 48, AUTOSAR_SWS_CANDriver S. 67). Sie ist über die Header-Datei Can.h verfügbar und besitzt die Service-ID 0x0b ([SWS_Can_00360]).

  • Parameter: Controller (in) bezeichnet die Kennung des CAN-Controllers, dessen Zustand auf ein Wake-up geprüft werden soll ([SWS_Can_00360]).
  • Rückgabewert: Gibt Std_ReturnType zurück. Der Rückgabewert E_OK signalisiert, dass der API-Aufruf akzeptiert wurde, während E_NOT_OK die Ablehnung anzeigt ([SWS_Can_00360]).
  • Nebenläufigkeit: Die Funktion ist als nicht reentrant (Non Reentrant) definiert ([SWS_Can_00360]).

Konfiguration und Fehlerbehandlung

Die Verfügbarkeit der Funktion ist zur Vorkompilierzeit konfigurierbar; der Service Can_CheckWakeup kann darüber in den Code eingebunden oder aus ihm entfernt werden (AUTOSAR_SWS_CANDriver S. 67, AUTOSAR_SWS_CANDriver S. 97). Wird die Funktion aufgerufen, bevor der CAN-Treiber initialisiert wurde, meldet sie den Fehler CAN_E_UNINIT (AUTOSAR_SWS_CANDriver S. 67).

Zusammenspiel

Der Aufruf von Can_CheckWakeup wird typischerweise durch das CAN-Interface ausgelöst (AUTOSAR_SWS_CANDriver S. 48). Im Falle eines Wake-up-Ereignisses am Bus kann CanIf_CheckWakeup während der Abarbeitung von EcuM_CheckWakeup aufgerufen werden (AUTOSAR_SWS_CANInterface §7.18.4.1 „Wake-up detection“). Gemäß [SWS_CANIF_00395] fragt CanIf hierbei über Can_CheckWakeup() oder CanTrcv_CheckWakeup() ab, welches konkrete Hardwaregerät den Bus-Wake-up ausgelöst hat (AUTOSAR_SWS_CANInterface S. 55).

Dieser Nutzungshinweis wurde automatisiert erstellt und basiert ausschließlich auf den Spezifikationen des AUTOSAR-Releases R20-11.

function Can_GetControllerRxErrorCounter [SWS_Can_00511] 📄 PDF

Std_ReturnType Can_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);

Returns the Rx error counter for a CAN controller. This value might not be available for all CAN controllers, in which cas e E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Rx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

function Can_GetControllerTxErrorCounter [SWS_Can_00516] 📄 PDF

Std_ReturnType Can_GetControllerTxErrorCounter (uint8 ControllerId, uint8* TxErrorCounterPtr);

Returns the Tx error counter for a CAN controller. This value might not be available for all CAN controllers, in which case E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Tx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

function Can_Write [SWS_Can_00233] 📄 PDF

Std_ReturnType Can_Write (Can_HwHandleType Hth, const Can_PduType* PduInfo);

This function is called by Can If to pass a CAN message to Can Drv for transmission.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: f2d4ad3f2f32 Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Verwendung und Semantik

Die Funktion Can_Write wird synchron vom Modul CanIf aufgerufen, um eine CAN-Nachricht zur Übertragung an den CAN-Treiber (CanDrv) zu übergeben ([SWS_Can_00233]). Der Aufrufer übergibt dabei zwei Parameter:

  • Hth: Hardware-Sende-Handle, welches das zu verwendende Sendeobjekt festlegt und implizit den Controller bestimmt, da die Handle-Nummern innerhalb einer Hardware-Einheit eindeutig sind ([SWS_Can_00233]).
  • PduInfo: Zeiger auf eine Struktur mit SDU-Nutzdaten, Datenlänge und CAN-Identifier ([SWS_Can_00233]).

Vor dem Senden prüft die Funktion das adressierte Hardware-Sendeobjekt (SWS_CANDriver S. 73) und sichert das übergebene swPduHandle (SWS_CANDriver S. 43). Über den Rückgabewert vom Typ Std_ReturnType (SRS_BSWGeneral §5.2.3.6 „Types and keywords“) signalisiert E_OK die Annahme des Auftrags, während CAN_BUSY anzeigt, dass kein Hardware-Sendepuffer verfügbar ist ([SWS_Can_00233], SWS_CANDriver S. 51).

Fehlerbehandlung

Tritt während der Ausführung ein Entwicklungsfehler auf, gibt die Funktion E_NOT_OK zurück ([SWS_Can_00233], [SWS_Can_00441]). Interpretation: Spezifische DET-Fehlercodes werden im verfügbaren Auszug nicht explizit genannt; fehlerhafte Handles oder ungültige Zeiger dürften jedoch zur Rückgabe von E_NOT_OK führen. Frage Q-ca947a7e0e4fd7d6 (offen)

Nebenläufigkeit und Einschränkungen

Can_Write ist als reentrant bzw. thread-safe spezifiziert ([SWS_Can_00233], SWS_CANDriver S. 49). Kann ein präemptiver Aufruf treiberseitig nicht reentrant ausgeführt werden, wird dies dem CanIf ebenfalls über den Rückgabewert CAN_BUSY gemeldet ([SWS_Can_00233]). Der Aufrufer muss gewährleisten, dass der PDU-Speicher bis zur Rückkehr des Funktionsaufrufs unverändert gültig bleibt (SWS_CANDriver S. 45).

Zusammenspiel

Über [SWS_Can_00416] wird beim Aufruf übermittelt, um welche PDU-Art es sich handelt (SWS_CANDriver S. 51), wobei der Treiber die Übertragung bis zur maximalen PDU-Länge unterstützt (SWS_CANDriver S. 52).

Dieser Nutzungshinweis wurde automatisiert auf Basis der Spezifikationsdokumente von AUTOSAR R20-11 generiert.

function <LPDU_CalloutName> [SWS_Can_00443] 📄 PDF

boolean <LPDU_CalloutName> (uint8 Hrh, Can_IdType CanId, uint8 CanDataLegth, const uint8* CanSduPtr);

-

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 3538baa0cf7b Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Verwendung und Aufrufkontext

Die konfigurierbare Call-out-Schnittstelle <LPDU_CalloutName> wird vom AUTOSAR-CAN-Modul optional bei jedem Empfang einer L-PDU aufgerufen (SWS_CANDriver §8.4.1 „Call-out function“). Die Deklaration der Funktion wird über die Header-Datei Can_Externals.h bereitgestellt ([SWS_Can_00443]). Der tatsächliche Name der Funktion wird projektspezifisch konfiguriert ([SWS_Can_00443]).

Als Eingangsparameter werden das Hardware-Receive-Handle Hrh, der Bezeichner CanId, die Datenlänge CanDataLegth sowie ein Zeiger auf die Nutzdaten CanSduPtr übergeben ([SWS_Can_00443]).

Filterung und Rückgabewert

Die Funktion liefert einen boolean-Wert zurück. Gibt der Call-out false zurück, darf die empfangene L-PDU nicht weiterverarbeitet werden ([SWS_Can_00444]). Interpretation: Liefert der Aufruf true, dürfte die reguläre Weiterleitung der L-PDU an die übergeordneten Schichten erfolgen. Frage Q-e96e75e93881c3af (offen)

Nebenläufigkeit und Einschränkungen

Die Funktion ist mit der Service-ID 0x20 versehen und als asynchron (Asynchronous) sowie nicht reentrant (Non Reentrant) spezifiziert ([SWS_Can_00443]). Da sie nicht reentrant ist, dürfen parallele Aufrufe im selben Kontext nicht stattfinden.

Dieser Text wurde von einer KI generiert und dient als Orientierungshilfe. Verbindlich sind die Vorgaben der AUTOSAR-Spezifikation.

function Can_MainFunction_Write [SWS_Can_00225] 📄 PDF

void Can_MainFunction_Write (void);

This function performs the polling of TX confirmation when CAN_ TX_ PROCESSING is set to POLLING.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: a6cd22a9e2b1 Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die Funktion Can_MainFunction_Write führt das zyklische Polling von Sende-Bestätigungen (TX-Confirmation) durch, sofern der Parameter CAN_TX_PROCESSING auf POLLING konfiguriert ist [SWS_Can_00225], AUTOSAR SWS CAN Driver §7 „Scheduled functions“. Sie ist parameterlos (void Can_MainFunction_Write(void)), besitzt die Service-ID 0x01 und wird über die Header-Datei SchM_Can.h für den Scheduler bereitgestellt [SWS_Can_00225]. Über Konfigurationsschalter kann die Funktion zur Verarbeitung der PDU-Übertragung aktiviert oder deaktiviert werden AUTOSAR SWS CAN Driver §10 „CanMainFunctionWrite“.

Wird im System überhaupt kein Polling für Sendevorgänge genutzt, soll Can_MainFunction_Write laut Spezifikation als leeres Define implementiert werden AUTOSAR SWS CAN Driver §7 „Scheduled functions“. Dies dürfte unnötigen Scheduler-Overhead in rein interruptgesteuerten Systemen vermeiden. Frage Q-2152a35397130945 (offen)

Im Zusammenspiel mit Can_MainFunction_Read und Can_MainFunction_BusOff bildet die Routine die zyklische Schnittstelle des Treibers zur SchM AUTOSAR SWS CAN Driver §7 „Scheduled functions“. Die Bestätigungsverarbeitung findet abhängig vom Modus direkt an der Hardware-Ressource oder im Kontext von Can_MainFunction_Write statt AUTOSAR SWS CAN Driver §7 „Hardware Resources“. Der konkrete Aufruf und die Zuordnung richten sich nach den jeweils referenzierten Elementen AUTOSAR SWS CAN Driver §10 „CanMainFunctionWrite“, AUTOSAR SWS CAN Driver §10 „Call Context“, unterstützt durch eine controllerbezogene Tx-Verarbeitung [SWS_Can_00441].

Dieser Nutzungshinweis wurde automatisiert auf Basis der Spezifikation AUTOSAR R20-11 generiert.

function Can_MainFunction_Read [SWS_Can_00226] 📄 PDF

void Can_MainFunction_Read (void);

This function performs the polling of RX indications when CAN_ RX_ PROCESSING is set to POLLING.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 2c7a6a6247b4 Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die Funktion Can_MainFunction_Read dient der zyklischen Abfrage (Polling) von CAN-Empfangsmeldungen ([SWS_Can_00226]). Sie besitzt die Signatur void Can_MainFunction_Read (void) mit der Service-ID 0x08 und wird über die Header-Datei SchM_Can.h für die Ablaufsteuerung bereitgestellt ([SWS_Can_00226]).

Verwendung und Konfiguration

Die Funktion führt das Polling von RX-Indikationen aus, wenn der Konfigurationsparameter CAN_RX_PROCESSING auf POLLING eingestellt ist ([SWS_Can_00226]). Im System kann diese Verarbeitung controllerweise konfiguriert werden ([SWS_Can_00441]). Wird im CAN-Treiber überhaupt kein Polling genutzt, kann Can_MainFunction_Read als leeres Makro definiert werden (AUTOSAR_SWS_CANDriver S. 77).

Nebenläufigkeit und Einschränkungen

Der Aufruf erfolgt periodisch im Scheduler-Kontext gemäß der parametrierten Trigger-Periode (AUTOSAR_SWS_CANDriver S. 22). Für die Ausführung gelten strenge Bedingungen:

Interpretation: Das konfigurierte Aufrufintervall der Task dürfte so bemessen werden müssen, dass eine Bearbeitungsphase vor dem nächsten Zyklusstart stets beendet ist, da Reentranz unzulässig ist (AUTOSAR_SWS_CANDriver S. 47). Frage Q-1f2fa9db14970b12 (offen)

Dieser Text wurde von einer KI auf Basis der AUTOSAR-Spezifikation R20-11 generiert.

function Can_MainFunction_BusOff [SWS_Can_00227] 📄 PDF

void Can_MainFunction_BusOff (void);

This function performs the polling of bus - off events that are configured statically as 'to be polled'.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: d6a62aee0c17 Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die geplante Hauptfunktion Can_MainFunction_BusOff dient dem zyklischen Polling von Bus-Off-Ereignissen der CAN-Controller, sofern diese statisch als zu pollen konfiguriert sind [SWS_Can_00227], [SWS_Can_00109]. Sie besitzt die Signatur void Can_MainFunction_BusOff(void), nimmt keine Parameter entgegen, gibt keinen Wert zurück und wird über den Header SchM_Can.h für die Ablaufsteuerung bereitgestellt [SWS_Can_00227].

Verwendung und Zusammenspiel

Hardware-Ereignisse können im CAN-Treiber entweder per Interrupt oder durch Polling entsprechender Statusflags erfasst werden, wobei die Konfiguration der Abfrage hardwareabhängig ist [SWS_Can_00099]. Der Treiber kann auch so konfiguriert werden, dass vollständig auf Interrupts verzichtet wird [SWS_Can_00007]. Wird systemweit überhaupt kein Polling eingesetzt, darf das Can-Modul die Funktion als leeres Makro implementieren [SWS_Can_00183].

Wird in Can_MainFunction_BusOff ein Bus-Off-Ereignis über Statusbits erkannt, nimmt das Modul notwendige Registereinstellungen vor – etwa zur Vermeidung einer automatischen Hardware-Erholung SWS_CANDriver §7.3 „CAN Controller State Machine“, [SWS_Can_91010]. Anschließend benachrichtigt das Modul die übergeordnete Schicht CanIf über den zugehörigen Callback, in welchem die Software-Zustandsänderung des Controllers erfolgt SWS_CANDriver §7.3 „CAN Controller State Machine“.

Aufrufkontext und Einschränkungen

Bei gepolltem Betrieb ist der Aufrufkontext der Callback-Benachrichtigung nicht die ISR, sondern die ausführende Task der Can_MainFunction_BusOff; dennoch müssen alle Callback-Funktionen so realisiert sein, als ob sie aus dem ISR-Kontext aufgerufen würden SWS_CANDriver §7.9 „Notification concept“. Hinsichtlich der Reentranz enthält der Payload keine expliziten Angaben; vermutlich ist die Funktion nicht reentrant, da sie auf globale Controller-Register und Zustände zugreift. Frage Q-38fcd72c40ce3e66 (offen)

Dieser Nutzungshinweis wurde von einer KI generiert und basiert ausschließlich auf den Spezifikationsauszügen der AUTOSAR-Version R20-11.

function Can_MainFunction_Wakeup [SWS_Can_00228] 📄 PDF

void Can_MainFunction_Wakeup (void);

This function performs the polling of wake - up events that are configured statically as 'to be polled'.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: ce643213c50c Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Die Hauptfunktion Can_MainFunction_Wakeup führt das zyklische Polling von Wake-up-Ereignissen durch, die statisch als zu pollend konfiguriert sind ([SWS_Can_00228]). Die Funktion besitzt die Signatur void Can_MainFunction_Wakeup(void), nimmt keine Parameter entgegen, liefert keinen Rückgabewert und wird über den Header SchM_Can.h für den Schedule Manager bereitgestellt (AUTOSAR_SWS_CANDriver S. 79). Die Ausführungsperiode der Funktion wird in Sekunden konfiguriert (AUTOSAR_SWS_CANDriver S. 92).

Im Rahmen der Zustandsmaschine des CAN-Controllers (SWS_CANDriver §7.3 „CAN Controller State Machine“) können externe Hardware-Wakeup-Ereignisse statt über Interrupts über ein Statusbit signalisiert werden, das in Can_MainFunction_Wakeup abgefragt wird ([SWS_Can_91010]). Zudem pollt die Funktion bei Zustandsübergängen ein entsprechendes Flag des CAN-Statusregisters, bis dieses die Wirksamkeit der Änderung signalisiert ([SWS_Can_00370]). Nach erfolgreichem Zustandswechsel meldet der CAN-Treiber den neuen Zustand mit der Callback-Funktion CanIf_ControllerModeIndication an das CAN-Interface, bezogen auf die abstrakte CanIf ControllerId ([SWS_Can_00370]).

Hinsichtlich Konfiguration und Ressourcennutzung lässt sich die API Can_MainFunction_Wakeup() für die Behandlung von Wakeup-Ereignissen aktivieren oder deaktivieren (AUTOSAR_SWS_CANDriver S. 97). Falls im Steuergerät überhaupt kein Polling für Wakeup-Ereignisse verwendet wird, kann Can_MainFunction_Wakeup als leeres Makro definiert werden (AUTOSAR_SWS_CANDriver S. 79).

Dieser Nutzungshinweis wurde automatisiert auf Basis der Spezifikation AUTOSAR CP R20-11 generiert.

function Can_MainFunction_Mode [SWS_Can_00368] 📄 PDF

void Can_MainFunction_Mode (void);

This function performs the polling of CAN controller mode transitions.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: feee99301166 Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Verwendung und Funktionsweise

Die geplante Hauptfunktion Can_MainFunction_Mode ([SWS_Can_00368]) führt das Polling von Zustandsübergängen der CAN-Controller durch. Sie besitzt weder Übergabeparameter noch einen Rückgabewert (void Can_MainFunction_Mode(void), Service-ID 0x0c) und wird über den Header SchM_Can.h deklariert SWS_CANDriver §8.5.1.5 „Can_MainFunction_Mode“.

Die Funktion wird fortlaufend zyklisch aufgerufen (AUTOSAR_SWS_CANInterface S. 143). Sie prüft die Hardware, ob sich der Modus eines CAN-Controllers geändert hat. Bei einer erkannten Änderung wird die CAN-Schnittstelle über den Aufruf von CanIf_ControllerModeIndication(Controller, ControllerMode) benachrichtigt.

Asynchrone Modusüberwachung

Wurde zuvor eine Modusänderung über Can_SetControllerMode() angefordert und kehrt dieser Aufruf erfolgreich zu CanIf zurück, erkennt Can_MainFunction_Mode den vollzogenen Zustandsübergang der Controller-Hardware. Sie informiert CanIf daraufhin asynchron mittels CanIf_ControllerModeIndication über den neuen Zustand wie etwa CAN_CS_STARTED AUTOSAR_SWS_CANInterface S. 144.

Aufrufkontext und Randbedingungen

Aufgrund der Bereitstellung über SchM_Can.h und der Definition als Scheduled Function dürfte der periodische Aufruf durch den BSW-Scheduler erfolgen. Frage Q-42edbc2aa591e8d7 (offen) Spezifische Fehlercodes oder Entwicklungsschritte werden im Payload für diese Funktion nicht definiert.

Dieser Text wurde von einer KI auf Basis der AUTOSAR-Spezifikationen erstellt.

Implementer's Guide folgt (Komplexität I1)

type Can_ConfigType [SWS_Can_00413] 📄 PDF

This is the type of the external data structure containing the overall initialization data for the CAN driver and SFR settings affecting all controllers. Furthermore it contains pointers to controller configuration structures. The contents of the initializ ation data structure are CAN hardware specific.

type Can_PduType [SWS_Can_00415] 📄 PDF

This type unites Pdu Id (sw Pdu Handle), Sdu Length (length), Sdu Data (sdu), and Can Id (id) for any CAN L - SDU.

type Can_IdType [SWS_Can_00416] 📄 PDF

Represents the Identifier of an L - PDU. The two most significant bits specify the frame type: 00 CAN message with Standard CAN ID 01 CAN FD frame with Standard CAN ID 10 CAN message with Extended CAN ID 11 CAN FD frame with Extended CAN ID

type Can_HwHandleType [SWS_Can_00429] 📄 PDF

Represents the hardware object handles of a CAN hardware unit. For CAN hardware units with more than 255 HW objects use extended range.

type Can_HwType [SWS_CAN_00496] 📄 PDF

This type defines a data structure which clearly provides an Hardware Object Handle including its corresponding CAN Controller and therefore Can Drv as well as the specific Can Id.

type Can_ErrorStateType [SWS_Can_91003] 📄 PDF

Error states of a CAN controller.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 0cb922d28e06 Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Der Enumerationstyp Can_ErrorStateType aus Can_GeneralTypes.h beschreibt die Fehler- und Betriebszustände eines CAN-Controllers [SWS_Can_91003]. Er bildet das Verhalten des Controllers auf dem CAN-Bus über drei Zustände ab SWS_CANDriver §8.2.7 „Can_ErrorStateType“:

  • CAN_ERRORSTATE_ACTIVE: Der CAN-Controller nimmt vollumfänglich an der Bus-Kommunikation teil [SWS_Can_91003].
  • CAN_ERRORSTATE_PASSIVE: Der CAN-Controller nimmt an der Kommunikation teil, sendet aber keine aktiven Fehler-Frames (Error Frames) mehr [SWS_Can_91003].
  • CAN_ERRORSTATE_BUSOFF: Der CAN-Controller ist infolge schwerwiegender Übertragungsfehler vom Bus isoliert und nimmt nicht mehr an der Kommunikation teil [SWS_Can_91003].

Zur Laufzeit wird der Zustand über den synchronen Treiberdienst Can_GetControllerErrorState abgefragt [SWS_Can_91004]. Dessen Ausgabeparameter ErrorStatePtr nimmt den ermittelten Wert auf. Dieselbe Signatur nutzt auch die übergeordnete Funktion CanIf_GetControllerErrorState im CAN-Interface AUTOSAR_SWS_CANInterface S. 78 „CanIf_GetControllerErrorState“. Bezüglich der Nebenläufigkeit gilt, dass Can_GetControllerErrorState für dieselbe ControllerId als nicht reentrant spezifiziert ist [SWS_Can_91004].

Im Fehlerfall liefert Can_GetControllerErrorState den Rückgabewert E_NOT_OK, bei erfolgreicher Abfrage E_OK [SWS_Can_91004]. Bei aktivierter Entwicklungserkennung (DET) führt ein Aufruf vor der Treiberinitialisierung zum Fehler CAN_E_UNINIT [SWS_Can_91005]. Eine unzulässige ControllerId löst den Entwicklungsfehler CAN_E_PARAM_CONTROLLER aus [SWS_Can_91006], und die Übergabe eines Null-Zeigers für ErrorStatePtr wird mit einem Entwicklungsfehler abgewiesen [SWS_Can_91007].

Interpretation: Der Aufrufer dürfte den Speicherbereich für ErrorStatePtr eigenverantwortlich allozieren müssen, da die Schnittstelle den Zeiger als reinen Ausgabeparameter behandelt und Null-Zeiger per Entwicklungsfehler ausschließt. Frage Q-5c907c21bcb50893 (offen)

Dieser Text wurde von einer KI auf Basis der AUTOSAR-Spezifikation R20-11 generiert.

Implementer's Guide folgt (Komplexität I1)

type Can_ControllerStateType [SWS_Can_91013] 📄 PDF

States that are used by the several Controller Mode functions.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 5eb69ce0444e Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Der Enumerationstyp Can_ControllerStateType definiert die grundlegenden Betriebszustände eines CAN-Controllers: CAN_CS_UNINIT, CAN_CS_STARTED, CAN_CS_STOPPED und CAN_CS_SLEEP [SWS_Can_91013]. Der Typ wird modulübergreifend zur softwaregesteuerten Zustandsführung der CAN-Controller-Zustandsmaschine verwendet [SWS_Can_00017].

Die Werte werden in folgenden Kontexten eingesetzt:

Hinsichtlich Nebenläufigkeit und Fehlerbehandlung gilt: Die Treiberfunktionen Can_SetControllerMode und Can_GetControllerMode sind nicht reentrant [SWS_Can_00230], [SWS_Can_91014]. Bei Aufruf von Can_GetControllerMode vor der Treiberinitialisierung wird der Entwicklungsfehler CAN_E_UNINIT gemeldet und E_NOT_OK zurückgegeben [SWS_Can_91016]. Die Callback-Funktion CanSM_ControllerModeIndication ist für unterschiedliche Controller reentrant und meldet eine unkonfigurierte Controller-ID mit CANSM_E_PARAM_CONTROLLER an das DET [SWS_CanSM_00396], [SWS_CanSM_00397].

Dieser Nutzungshinweis basiert auf den Festlegungen der Spezifikationen des CAN-Treibers, CAN-Interfaces und CAN-State-Managers in AUTOSAR Classic R20-11.

Implementer's Guide folgt (Komplexität I1)

type Can_ErrorType [SWS_Can_91021] 📄 PDF

The enumeration represents a superset of CAN Error Types which typical CAN HW is able to report. That means not all CAN HW will be able to support the complete set.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: e538be0a65be Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Der Enumerationstyp Can_ErrorType definiert eine standardisierte Obermenge von CAN-Fehlerursachen, die typische CAN-Hardware erfassen und an höhere Schichten melden kann [SWS_Can_91021]. Er wird über die Header-Datei Can_GeneralTypes.h bereitgestellt SWS_CANDriver §8.2.9 „Can_ErrorType“.

Da die Aufzählung als Superset konzipiert ist, unterstützt nicht jeder CAN-Controller zwingend sämtliche spezifizierten Werte [SWS_Can_91021]. Zu den definierten Fehlerzuständen gehören:

  • Bitfehler bei der Busüberwachung (CAN_ERROR_BIT_MONITORING1, CAN_ERROR_BIT_MONITORING0 bzw. zusammenfassend CAN_ERROR_BIT),
  • Quittierungsfehler (CAN_ERROR_CHECK_ACK_FAILED, CAN_ERROR_ACK_DELIMITER),
  • Arbitrierungsverlust des Senders (CAN_ERROR_ARBITRATION_LOST),
  • Überlastzustände durch volle Empfangspuffer (CAN_ERROR_OVERLOAD),
  • Format- und Bit-Stuffing-Verletzungen (CAN_ERROR_CHECK_FORM_FAILED, CAN_ERROR_CHECK_STUFFING_FAILED),
  • CRC-Fehler (CAN_ERROR_CHECK_CRC_FAILED) sowie
  • eine dauerhafte Blockierung des Busses auf dominantem Pegel (CAN_ERROR_BUS_LOCK) SWS_CANDriver §8.2.9 „Can_ErrorType“.

Im Zusammenspiel der BSW-Module dient der Typ als Parameter der Callback-Funktion CanIf_ErrorNotification zur Weiterleitung von Controller-Fehlern an das CAN-Interface AUTOSAR_SWS_CANInterface §8.x „CanIf_ErrorNotification“. Der übergebene Wert dürfte dabei dem von der zugrundeliegenden Hardware festgestellten Fehlerzustand entsprechen AUTOSAR_SWS_CANDriver §7.x „Error Notification“. Frage Q-d23c45dd3b23ec71 (offen)

Dieser Text wurde von einer KI generiert und dient der technischen Orientierung.

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_Can
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_Can@rel:R20-11#c8dabed1
Content hash
c8dabed1
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANDriver.pdf#nameddest=SWS_Can_00223

Initialisierung und Status

Can_DeInit function

This function de - initializes the module.

void Can_DeInit (void);

This function returns the version information of this module.

void Can_GetVersionInfo (Std_VersionInfoType* versioninfo);
Can_Init function

This function initializes the module.

void Can_Init (const Can_ConfigType* Config);

Dienste

This function checks if a wakeup has occurred for the given controller.

Std_ReturnType Can_CheckWakeup (uint8 Controller);

This function disables all interrupts for this CAN controller.

void Can_DisableControllerInterrupts (uint8 Controller);

This function enables all allowed interrupts.

void Can_EnableControllerInterrupts (uint8 Controller);

This service obtains the error state of the CAN controller.

Std_ReturnType Can_GetControllerErrorState (uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr);

This service reports about the current status of the requested CAN controller.

Std_ReturnType Can_GetControllerMode (uint8 Controller, Can_ControllerStateType* ControllerModePtr);

Returns the Rx error counter for a CAN controller. This value might not be available for all CAN controllers, in which cas e E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Rx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

Std_ReturnType Can_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);

Returns the Tx error counter for a CAN controller. This value might not be available for all CAN controllers, in which case E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Tx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

Std_ReturnType Can_GetControllerTxErrorCounter (uint8 ControllerId, uint8* TxErrorCounterPtr);

This service shall set the baud rate configuration of the CAN controller. Depending on necessary baud rate modifications the controller might have to reset.

Std_ReturnType Can_SetBaudrate (uint8 Controller, uint16 BaudRateConfig ID); ⚠️

This function performs software triggered state transitions of the CAN controller State machine.

Std_ReturnType Can_SetControllerMode (uint8 Controller, Can_ControllerStateType Transition);
Can_Write function

This function is called by Can If to pass a CAN message to Can Drv for transmission.

Std_ReturnType Can_Write (Can_HwHandleType Hth, const Can_PduType* PduInfo);

Callouts und erwartete Schnittstellen

-

boolean <LPDU_CalloutName> (uint8 Hrh, Can_IdType CanId, uint8 CanDataLegth, const uint8* CanSduPtr);

Zyklisch

This function performs the polling of bus - off events that are configured statically as 'to be polled'.

void Can_MainFunction_BusOff (void);

This function performs the polling of CAN controller mode transitions.

void Can_MainFunction_Mode (void);

This function performs the polling of RX indications when CAN_ RX_ PROCESSING is set to POLLING.

void Can_MainFunction_Read (void);

This function performs the polling of wake - up events that are configured statically as 'to be polled'.

void Can_MainFunction_Wakeup (void);

This function performs the polling of TX confirmation when CAN_ TX_ PROCESSING is set to POLLING.

void Can_MainFunction_Write (void);

Typen

This is the type of the external data structure containing the overall initialization data for the CAN driver and SFR settings affecting all controllers. Furthermore it contains pointers to controller configuration structures. The contents of the initializ ation data structure are CAN hardware specific.

States that are used by the several Controller Mode functions.

Error states of a CAN controller.

The enumeration represents a superset of CAN Error Types which typical CAN HW is able to report. That means not all CAN HW will be able to support the complete set.

Represents the hardware object handles of a CAN hardware unit. For CAN hardware units with more than 255 HW objects use extended range.

This type defines a data structure which clearly provides an Hardware Object Handle including its corresponding CAN Controller and therefore Can Drv as well as the specific Can Id.

Represents the Identifier of an L - PDU. The two most significant bits specify the frame type: 00 CAN message with Standard CAN ID 01 CAN FD frame with Standard CAN ID 10 CAN message with Extended CAN ID 11 CAN FD frame with Extended CAN ID

This type unites Pdu Id (sw Pdu Handle), Sdu Length (length), Sdu Data (sdu), and Can Id (id) for any CAN L - SDU.