DEENESPTFRRUARHIKOZHNL

CAN Driver (Can)

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

ModulegidsAI-GEGENEREERD

Bestuurt de CAN-controllerhardware en verzorgt verzenden, ontvangen en toestandswisselingen naar de CAN Interface.
DOOR AI GEGENEREERD ongecontroleerd Model: claude-opus-5-5 · Inspanning: high · Temperatuur: niet regelbaar · Prompt: b6833c934a77 Herkomst Open vragen (2)
Causaal anker: R20-11 Geldig vanaf R20-11 Nieuw gesynthetiseerd voor deze specificatiestand.
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

Bestuurt de CAN-controllerhardware en verzorgt verzenden, ontvangen en toestandswisselingen naar de CAN Interface.

De CAN-driver bestuurt de CAN-controllers van een hardware-unit en vormt de hardwarelaag onder de CAN Interface. Aan deze interface meldt hij ontvangst, verzendbevestiging, bus-off en moduswisselingen via callbacks [SWS_Can_00234]. Volgens Can_Init bevinden alle controllers zich in STOPPED. Elke controller wordt afzonderlijk en asynchroon gestart met Can_SetControllerMode; het succes wordt pas achteraf gemeld [SWS_Can_00230]. Verzenden gebeurt met Can_Write via hardware transmit handles. Als er geen verzendobject vrij is, retourneert de driver CAN_BUSY en buffert CanIf het verzoek.

De CAN-driver kapselt elke toegang tot de CAN-controllers van een hardware-unit in. Hij dient de CAN Interface als enige gebruiker en meldt ontvangst, verzendbevestiging, bus-off en moduswisselingen via vast voorgeschreven CanIf-callbacks [SWS_Can_00234]. De ECU State Manager initialiseert hem met Can_Init en een hardwarespecifieke Can_ConfigType [SWS_Can_00223]. Daarna bevindt de driver zich in CAN_READY en alle controllers in STOPPED SWS CANDriver p. 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 Modusverzoeken CanIf->CanSM Modus- en bus-off-meldingen 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

Contextdiagram: Inbedding van Can tussen EcuM, BSW Scheduler, CanIf, DET, Os en de controllerhardware. Bronnen: [SWS_Can_00234], SWS CANDriver p. 78

Elke controller doorloopt de toestanden UNINIT, STOPPED, STARTED en SLEEP [SWS_Can_91013]. Hij wordt afzonderlijk en asynchroon gestart met Can_SetControllerMode: E_OK betekent slechts “geaccepteerd” [SWS_Can_00230]. De bereikte toestand meldt de driver later via CanIf_ControllerModeIndication SWS CANDriver p. 33. Bus-off brengt de controller zonder hardware-recovery naar STOPPED; een bus-wakeup brengt hem vanuit SLEEP naar STOPPED SWS CANDriver p. 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) of bus-off (hardware) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) of wake-up vanaf de bus SLEEP->SLEEP Can_SetBaudrate

Toestandsdiagram: Overgangen van een controller door software-aanroepen en bus-off- en wakeup-events. Bronnen: [SWS_Can_91010], SWS CANDriver p. 38

Verzenden gebeurt met Can_Write(Hth, PduInfo). De twee hoogste bits van Can_IdType onderscheiden CAN 2.0 en CAN FD evenals standaard- en extended-ID [SWS_Can_00233] [SWS_Can_00416]. Als er geen verzendobject vrij is, retourneert de driver CAN_BUSY en buffert CanIf het verzoek [SWS_Can_00039] SWS CANDriver p. 47. Events worden gedetecteerd via interrupts of door middel van polling. Voor het pollen zijn er cyclische hoofdfuncties SWS CANDriver p. 41:

  • Write en Read: verzendbevestigingen en ontvangst
  • BusOff en Wakeup: bus-off- en wakeup-events
  • Mode: modusovergangen

De hoofdfuncties zijn gedefinieerd in [SWS_Can_00225] tot [SWS_Can_00228] en [SWS_Can_00368].

In geval van fouten meldt de driver ontwikkelingsfouten zoals CAN_E_UNINIT of CAN_E_TRANSITION aan de DET [SWS_Can_91019]. Functies met een retourwaarde leveren dan E_NOT_OK SWS CANDriver p. 48 op. De bus-off-recovery wordt verzorgd door de CanSM via CanIf. De herstart vindt vermoedelijk weer plaats via Can_SetControllerMode(CAN_CS_STARTED) SWS CANInterface p. 138. Fouttoestand en fouttellers kunnen worden opgevraagd; de tellerwaarden gelden echter niet als betrouwbare bustoestand [SWS_Can_91004] [SWS_Can_00516]. Vraag (open)

Rol: hardware-nabije driver tussen CanIf en CAN-controllers

De CAN-driver kapselt elke toegang tot de CAN-hardware van een hardware-unit in. Toestandsveranderingen van de controllers verlopen uitsluitend via Can_Init, Can_SetBaudrate en Can_SetControllerMode. De driver slaat de toestandswisselingen daarbij zelf niet op SWS CANDriver p. 30. Zijn partner naar boven toe is de CAN Interface. Alle callbacks die de driver aanroept, zijn geïmplementeerd in CanIf en niet configureerbaar: CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff en CanIf_ControllerModeIndication. Daarnaast heeft hij Det_ReportRuntimeError en de Os-dienst GetCounterValue nodig [SWS_Can_00234] SWS CANDriver p. 73. Geïmporteerde types zijn onder meer afkomstig uit ComStack_Types, EcuM en Os [SWS_Can_00222].

De ECU State Manager initialiseert de driver via Can_Init. Volgens de implementatie-instructie roept deze de functie hooguit één keer aan tijdens runtime [SWS_Can_00223] SWS CANDriver p. 29. De cyclische hoofdfuncties worden rechtstreeks aangeroepen door de BSW Scheduler. Ze hebben noch parameters noch een retourwaarde en zijn niet-re-entrant; een uitvoeringsvolgorde is niet voorgeschreven SWS CANDriver p. 78. Naar beneden toe biedt de driver geen callbacks aan. Externe CAN-controllers mogen uitsluitend worden aangesproken via synchrone MCAL-API's zoals SPI SWS CANDriver p. 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 Modusverzoeken CanIf->CanSM Modus- en bus-off-meldingen 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

Contextdiagram: Can wordt geïnitialiseerd door EcuM, cyclisch aangeroepen door de BSW Scheduler en gebruikt door CanIf. Het meldt aan CanIf, EcuM en DET en maakt gebruik van Os voor time-outs. Bronnen: [SWS_Can_00234], SWS CANDriver p. 45, SWS CANDriver p. 78

Van power-on tot STARTED: driver- en controllertoestanden

De driver als geheel kent alleen de toestanden CAN_UNINIT en CAN_READY. Na de reset bevindt hij zich in CAN_UNINIT. Can_Init initialiseert alle controllers conform de configuratie en wisselt daarna naar CAN_READY. Can_DeInit zet de moduletoestand op CAN_UNINIT voordat het de controllers de-initialiseert [SWS_Can_00223] [SWS_Can_91002] SWS CANDriver p. 29.

Los daarvan heeft elke controller vier toestanden uit Can_ControllerStateType: CAN_CS_UNINIT, CAN_CS_STOPPED, CAN_CS_STARTED en CAN_CS_SLEEP [SWS_Can_91013].

  • In STOPPED is de controller geïnitialiseerd, maar neemt niet deel aan de bus en verzendt noch error frames noch acknowledges.
  • STARTED is het normale bedrijf.
  • SLEEP verschilt alleen bij hardware met een slaapmodus van STOPPED SWS CANDriver p. 31.

Can_Init brengt alle controllers naar STOPPED SWS CANDriver p. 32. Can_DeInit brengt ze vanuit STOPPED of SLEEP naar UNINIT [SWS_Can_91010] SWS CANDriver p. 38. Vanuit STARTED is er geen directe weg naar UNINIT SWS CANDriver p. 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) of bus-off (hardware) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) of wake-up vanaf de bus SLEEP->SLEEP Can_SetBaudrate

Toestandsdiagram: Levenscyclus van een CAN-controller. Software en bus-events brengen overgangen teweeg; terug naar UNINIT leidt uitsluitend Can_DeInit vanuit STOPPED of SLEEP. Bronnen: [SWS_Can_91013], [SWS_Can_91010], SWS CANDriver p. 38, SWS CANDriver p. 34, SWS CANDriver p. 35

Elke controller wordt afzonderlijk met Can_SetControllerMode(CAN_CS_STARTED) gestart SWS CANDriver p. 29. De dienst werkt asynchroon: E_OK betekent alleen dat het verzoek is geaccepteerd [SWS_Can_00230]. Bij elke overgang naar STARTED wordt de controller opnieuw geïnitialiseerd, en wel met de configuratie die het laatst door Can_Init of Can_SetBaudrate is gebruikt SWS CANDriver p. 59. De hardware kan de overgang vertraagd overnemen. Daarom meldt de driver de bereikte toestand pas achteraf via CanIf_ControllerModeIndication; of het doel wordt bereikt, bewaakt een hogere laag SWS CANDriver p. 33. Gepollde modusovergangen herkent Can_MainFunction_Mode [SWS_Can_00368]. Can_GetControllerMode vraagt de actuele modus synchroon op [SWS_Can_91014].

Initialisatie en start van een CAN-controllerEcuMCanIf-Nutzer (z. B. CanSM)CanIfCanBSW SchedulerCAN-ControllerUse Case: InitialisierungCan_Init(Config)alle controllers configurerenController: CAN_CS_STOPPEDModul: CAN_READYUse Case: Controller einzeln startenCanIf_SetControllerMode(STARTED)Can_SetControllerMode(Controller, CAN_CS_STARTED)Neuinitialisierung,Start anfordernE_OK (Anforderung angenommen)E_OKlooptot de overgang effectief isCan_MainFunction_Mode()Statusflag lesenCanIf_ControllerModeIndication(ControllerId, CAN_CS_STARTED)<User_ControllerModeIndication>

Sequentiediagram: initialisatie door EcuM en asynchrone start van een controller. De succesmelding volgt pas na de polling in Can_MainFunction_Mode. Bronnen: [SWS_Can_00230], [SWS_Can_00368], SWS CANInterface p. 156, SWS CANDriver p. 29

Verzenden via hardware-transmit-handles

CanIf draagt zendopdrachten over met Can_Write(Hth, PduInfo). De Hth specificeert het hardware-zendobject en daarmee ook de controller, omdat HTH-nummers binnen een hardware-unit uniek zijn [SWS_Can_00233]. Can_HwHandleType omvat standaard 0..0x0FF en bij meer dan 255 hardware-objecten het uitgebreide bereik tot 0xFFFF [SWS_Can_00429]. Can_PduType bundelt de velden swPduHandle, length, id en sdu [SWS_Can_00415].

In Can_IdType coderen de twee meest significante bits het frametype [SWS_Can_00416]:

  • 00: CAN met standaard-ID
  • 01: CAN FD met standaard-ID
  • 10: CAN met extended-ID
  • 11: CAN FD met extended-ID

Zo kunnen CAN-2.0- en CAN FD-frames op frameniveau worden gemengd, mits voor de controller een FD-baudrateconfiguratie actief is SWS CANDriver p. 49 SWS CANInterface p. 71.

Can_Write moet thread-safe zijn, omdat CanIf_Transmit reentrant is. De driver levert CAN_BUSY op wanneer er geen zendobject vrij is of wanneer een preëmptieve aanroep niet reentrant kan worden uitgevoerd [SWS_Can_00039] SWS CANDriver p. 47. CanIf buffert het verzoek dan. Zodra een object vrijkomt, roept CanIf Can_Write in volgorde van prioriteit opnieuw aan SWS CANInterface p. 48. De driver bewaart de swPduHandle tot de bijbehorende CanIf_TxConfirmation SWS CANDriver p. 35. Tegen prioriteitsinversie kan multiplexed transmission statisch worden geconfigureerd; hierbij vormen meerdere hardware-objecten één HTH SWS CANDriver p. 40.

Verzenden van een L-PDU met bevestigingCanIfCanCAN-ControllerBSW SchedulerCan_Write(Hth, PduInfo)altHardware-Sendeobjekt freiswPduHandle je HTH merkenL-PDU ins Hardwareobjekt,Verzending triggerenE_OKgeen object vrij of niet re-entrant uitvoerbaarCAN_BUSYL-PDU in CanIfTxBuffer bufferenFrame verzonden en door de bus bevestigdaltInterrupt-BetriebTX-InterruptPolling-BetriebCan_MainFunction_Write()openstaande bevestigingen controlerenCanIf_TxConfirmation(swPduHandle)optgebufferde L-PDU voor deze HTHCan_Write(Hth, L-PDU met hoogste prioriteit)

Sequentiediagram: zendopdracht met de paden E_OK en CAN_BUSY, vervolgens de bevestiging via interrupt of polling. Daarna kan CanIf een gebufferde L-PDU invoegen. Bronnen: [SWS_Can_00233], [SWS_Can_00039], SWS CANInterface p. 142, SWS CANInterface p. 48

Ontvangen en de cyclische hoofdfuncties

Bij ontvangst roept de driver CanIf_RxIndication aan. Hij draagt ID, hardware-object en abstracte CanIf-ControllerId alsmede lengte en pointer naar de L-SDU over. Bij extended-frames stelt hij de MSB van de ID in, zodat CanIf het frametype herkent SWS CANDriver p. 43. Optioneel is vooraf een configureerbare L-PDU-callout <LPDU_CalloutName> geschakeld [SWS_Can_00443]. Als deze false oplevert, wordt de L-PDU volgens de documentpassage (R25-11) niet verder verwerkt SWS CANDriver p. 77.

Gebeurtenissen worden herkend via interrupt of door het pollen van statusflags. Een zuivere polling-werking geheel zonder interrupts moet configureerbaar zijn. Bij polling roepen de hoofdfuncties dezelfde callbacks aan, alleen vanuit de task- in plaats van de ISR-context SWS CANDriver p. 41. Elke hoofdfunctie pollt één soort gebeurtenis:

De R20-11-beschrijvingen van Read en Write noemen alleen het geval POLLING [SWS_Can_00225] [SWS_Can_00226]. De documentpassages van latere releases vullen MIXED aan; dan worden alleen objecten met CanHardwareObjectUsesPolling = TRUE gepolld SWS CANDriver p. 81 SWS CANDriver p. 79. Deze uitbreiding wordt niet door de R20-11-requirements onderbouwd. Als via CanMainFunctionRWPeriods meerdere perioden zijn geconfigureerd, krijgen de functienamen het achtervoegsel _<ShortName> [SWS_Can_00441] SWS CANDriver p. 122. Zonder enige vorm van polling mag een hoofdfunctie als een lege define worden geïmplementeerd SWS CANDriver p. 81.

Ontvangst van een L-PDU in polling-modusBSW SchedulerCanCAN-ControllerL-PDU-CalloutCanIfCanIf-NutzerloopzyklischCan_MainFunction_Read()controleren op nieuwe L-PDU'saltneue L-PDU vorhandenID normieren (Extended: MSB = 1),Daten ggf. in angepassten PufferoptL-PDU-Callout konfiguriert<LPDU_CalloutName>(Hrh, CanId, CanDataLegth, CanSduPtr)true / falsebij false: L-PDU verwerpenCanIf_RxIndication(Mailbox, PduInfoPtr)Rx-indicatie aan de gebruikergeen nieuwe L-PDU

Sequentiediagram: ontvangst in polling-werking met ID-normalisatie, optionele L-PDU-callout en doorgifte aan CanIf. Bronnen: [SWS_Can_00226], [SWS_Can_00443], SWS CANInterface p. 153, SWS CANDriver p. 43

Sleep, wakeup en interruptsturing

De driver behandelt alleen wakeups die de controller zelf herkent, niet die via de transceiver SWS CANDriver p. 45. Bij een hardware-wakeup gaat de controller van SLEEP naar STOPPED. De initiërende L-PDU wordt niet verder verwerkt. EcuM_CheckWakeup wordt in de interrupt of in Can_MainFunction_Wakeup aangeroepen, met de via CanWakeupSourceRef geconfigureerde bron SWS CANDriver p. 35. De EcuM roept vervolgens via CanIf Can_CheckWakeup aan. Deze functie meldt een gedetecteerde wakeup via EcuM_SetWakeupEvent [SWS_Can_00360] SWS CANDriver p. 63. Tegen valse wakeups valideren EcuM en CanIf zonder betrokkenheid van de driver SWS CANDriver p. 45.

Can_DisableControllerInterrupts en Can_EnableControllerInterrupts zijn reentrant en werken genest. Na n Disable-aanroepen zijn n Enable-aanroepen nodig. Een Enable zonder voorafgaande Disable heeft geen effect [SWS_Can_00231] [SWS_Can_00232] SWS CANDriver p. 61 SWS CANDriver p. 62.

Wake-up vanaf de CAN-busCAN-ControllerCanEcuMCanIfUse Case: Controller in CAN_CS_SLEEPWake-up-event vanaf de busaltInterrupt-BetriebWakeup-ISRPolling-BetriebCan_MainFunction_Wakeup()Controller SLEEP -> STOPPED,triggerende L-PDU niet verwerkenEcuM_CheckWakeup(bron uit CanWakeupSourceRef)Wake-up-bron via CanIf controlerenCan_CheckWakeup(Controller)optWakeup erkanntEcuM_SetWakeupEventE_OKValidierung gegen Fehlwakeupsdoor EcuM en CanIf, zonder Can

Sequentiediagram: bus-wakeup vanuit SLEEP, melding aan EcuM en navraag via CanIf met Can_CheckWakeup. Bronnen: [SWS_Can_00360], [SWS_Can_00228], SWS CANDriver p. 45, SWS CANDriver p. 35

Configuratiesets, partities en instantiecontext

Can_Init ontvangt een pointer naar Can_ConfigType. Deze hardwarespecifieke structuur bevat instellingen voor alle controllers en verwijzingen naar de afzonderlijke controllerconfiguraties [SWS_Can_00223] [SWS_Can_00413]. De module ondersteunt VARIANT-PRE-COMPILE en VARIANT-POST-BUILD SWS CANDriver p. 96. In het post-build-voorbeeld wordt bij de aanroep van Can_Init een van meerdere configuratiesets gekozen EXP LayeredSoftwareArchitecture p. 120. Per controller legt CanController onder meer CanRxProcessing, CanTxProcessing, CanBusoffProcessing, CanWakeupProcessing en ten minste één CanControllerBaudrateConfig vast SWS CANDriver p. 101.

In multi-partitiesystemen werkt de module in elke partitie als een onafhankelijke instantie. Een API-aanroep heeft alleen effect in de eigen partitie [SWS_Can_CONSTR_00508]. Voor de partitietoewijzing gelden drie regels:

  • De partities in CanControllerEcucPartitionRef moeten een deelverzameling van de partities in CanEcucPartitionRef zijn [SWS_Can_CONSTR_00509].
  • De controller en het transceiverkanaal van een communicatiekanaal refereren aan dezelfde partitie [SWS_Can_CONSTR_00510].
  • Niet-ondersteunde toewijzingen wijst de driver af [SWS_Can_00507].

Meerdere Can-modules in één ECU onderscheiden zich door een gewijzigd functievoorvoegsel SWS CANDriver p. 51.

Gedrag in het foutgeval

Bij geactiveerde Development Error Detection meldt de driver ontwikkelingsfouten aan de DET. De codes variëren van CAN_E_PARAM_POINTER (0x01) via CAN_E_UNINIT (0x05) en CAN_E_TRANSITION (0x06) tot CAN_E_INIT_FAILED (0x09) [SWS_Can_91019]. Na terugkeer uit de DET keert de functie direct terug; functies met een retourwaarde leveren dan E_NOT_OK op SWS CANDriver p. 48. Enkele voorbeelden:

Als runtimefout is CAN_E_DATALOST gedefinieerd voor verloren gegane ontvangstberichten [SWS_Can_91020]. Deze wordt vermoedelijk via de vereiste Det_ReportRuntimeError gemeld [SWS_Can_00234]. Vraag Q-50225b25430c9660 (open)

Als een controller in bus-off gaat, wisselt deze van STARTED naar STOPPED. De driver voert geen hardware-recovery uit. Hij meldt de gebeurtenis via interrupt of in Can_MainFunction_BusOff via CanIf_ControllerBusOff [SWS_Can_00227] SWS CANDriver p. 35. De recovery wordt overgenomen door de CanSM, die CanIf met CanSM_ControllerBusOff informeert SWS CANInterface p. 138. Interpretatie: de herstart loopt vermoedelijk weer via Can_SetControllerMode(CAN_CS_STARTED), die daarbij de configuratie opnieuw laadt SWS CANDriver p. 59. Vraag Q-83e484ab9f8b1aac (open)

Bus-off-detectie en -meldingCAN-ControllerCanBSW SchedulerCanIfCanSMController erreicht Bus-offaltInterrupt-BetriebBus-off-InterruptPolling-BetriebCan_MainFunction_BusOff()Statusbit lesenSTARTED -> STOPPED,geen hardware-recoveryCanIf_ControllerBusOff(ControllerId)CanSM_ControllerBusOffBus-off-recovery ligt bij de CanSMUse Case: Neustart (Interpretation)Neustart anfordern (Interpretation)Can_SetControllerMode(Controller, CAN_CS_STARTED)Herinitialisatie metzuletzt verwendeter Konfiguration

Sequentiediagram: detectie en melding van een bus-off tot aan de CanSM. De als interpretatie gemarkeerde herstart is niet expliciet onderbouwd. Bronnen: [SWS_Can_00227], [SWS_Can_00234], SWS CANDriver p. 35, SWS CANInterface p. 138

Voor de diagnose levert Can_GetControllerErrorState de fouttoestand op: ACTIVE, PASSIVE of BUSOFF [SWS_Can_91004] [SWS_Can_91003]. De Rx- en Tx-fouttellers kunnen eveneens worden opgevraagd. Als de controller deze niet beschikbaar stelt, leveren de functies E_NOT_OK op. Omdat de hardware de tellers asynchroon bijhoudt, zijn de waarden niet geschikt voor aannames over de bustoestand [SWS_Can_00511] [SWS_Can_00516] SWS CANDriver p. 67. Can_ErrorType beschrijft een superset van typische hardware-fouttypen, van bitfouten tot een bus-lock [SWS_Can_91021].

Tegen niet-reagerende hardware gebruikt de driver een OsCounter voor time-outs SWS CANDriver p. 23. Wordt een moduswissel binnen CanTimeoutDuration niet effectief, dan verlaat Can_SetControllerMode de functie in plaats van te blokkeren SWS CANDriver p. 33. Treedt tijdens de overgang naar de sleep-modus een bus-wakeup op, dan levert Can_SetControllerMode(CAN_CS_STOPPED) E_NOT_OK op SWS CANDriver p. 35.

Verdere gedetailleerde bewijzen

Veel documentpassages zijn afkomstig uit R23-11 tot R25-11. Normatief voor R20-11 zijn de geciteerde requirements. Direct uit R20-11 is het toestandsschema SWS CANDriver p. 38 afkomstig.

Door AI gegenereerde handleiding op basis van de in de payload verstrekte requirements en documentpassages voor R20-11. Aannames zijn als interpretatie aangemerkt; bepalend blijft de specificatie.

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

functie Can_Init [SWS_Can_00223] 📄 PDF

void Can_Init (const Can_ConfigType* Config);

This function initializes the module.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: 8afbe47dbadd Herkomst
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

De synchrone, niet-re-entrante functie Can_Init initialiseert de gehele CAN-drivermodule evenals de bijbehorende hardware-eenheden conform de overgedragen configuratie [SWS_Can_00223].

Gebruik en aanroepcontext

De aanroep van Can_Init vindt tijdens de opstartfase van de ECU verplicht plaats door de ECU State Manager, nog voordat enige andere functie van de CAN-driver mag worden aangeroepen [SWS_Can_91012]. Als parameter neemt de functie via Config een pointer naar de driverconfiguratie (const Can_ConfigType*) over en levert geen retourwaarde op [SWS_Can_00223].

Initialisatieomvang en toestandsovergangen

In het kader van de initialisatie stelt de functie alle vereiste hardwareregisters in en initialiseert deze alle CAN-controllers AUTOSAR_SWS_CANDriver p. 33:

  • initialisatie van statische variabelen en interne vlaggen [SWS_Can_91012],
  • configuratie van gemeenschappelijke instellingen voor de volledige CAN-hardware-eenheid [SWS_Can_91012],
  • controllerspecifieke instellingen voor elke afzonderlijke CAN-controller [SWS_Can_91012].

Door de functieaanroep worden toestandsovergangen van de CAN-hardware in gang gezet AUTOSAR_SWS_CANDriver p. 10, waarbij Can_Init de registerconfiguratie verricht om de controllers naar de beoogde basistoestand over te brengen [SWS_Can_91010] AUTOSAR_SWS_CANDriver p. 36.

Gelijktijdigheid en beperkingen

Aangezien Can_Init als niet-re-entrant is gespecificeerd, mag er geen parallelle of herhaalde aanroep tijdens een lopende initialisatie plaatsvinden [SWS_Can_00223]. Bovendien kunnen bepaalde globale instellingen van de hardware-eenheid uitsluitend binnen Can_Init worden ingesteld AUTOSAR_SWS_CANDriver p. 33.

Deze gebruiksinstructie is geautomatiseerd gegenereerd aan de hand van de specificatiegegevens van AUTOSAR Classic R20-11.

Implementer's Guide volgt (complexiteit I1)

functie Can_DeInit [SWS_Can_91002] 📄 PDF

void Can_DeInit (void);

This function de - initializes the module.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: 982976925c7a Herkomst Open vragen (2)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

De functie Can_DeInit dient voor de de-initialisatie van de CAN-drivermodule ([SWS_Can_91002]). Deze heeft de signatuur void Can_DeInit(void), accepteert geen parameters, levert geen retourwaarde op en wordt synchroon evenals niet-re-entrant uitgevoerd ([SWS_Can_91002]). De interface is beschikbaar via de header Can.h ([SWS_Can_91002]).

De aanroep brengt een softwaregestuurde toestandsovergang teweeg (AUTOSAR_SWS_CANDriver p. 10; AUTOSAR_SWS_CANDriver p. 41). Hierbij wijzigt Can_DeInit de moduletoestand (AUTOSAR_SWS_CANDriver p. 33) en reset alle CAN-controllers (AUTOSAR_SWS_CANDriver p. 41).

Gelijktijdigheid en beperkingen

Voor de uitvoering gelden strikte precondities en volgorde-eisen met betrekking tot de hardware- en moduletoestanden:

Samenspel

Het fout- en overgangsgedrag weerspiegelt de opgeschoonde driverprocessen, volgens welke ongeldige toestandsovergangen uniform worden afgevangen ([SWS_Can_00441]).

Deze tekst is door een AI gegenereerd op basis van de specificatie AUTOSAR CP R20-11.

functie 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.

functie 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.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: a4b356b48b8a Herkomst Open vragen (1)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

De functie Can_SetControllerMode (beschikbaar gesteld via Can.h met het service-ID 0x03) voert software-getriggerde toestandsovergangen van de CAN-controller-toestandsmachine uit ([SWS_Can_00230], AUTOSAR_SWS_CANDriver p. 35). Deze verricht de hardwaregerelateerde registerinstellingen om de overgangen tussen de basiscontrollertoestanden UNINIT, STOPPED, STARTED en SLEEP tot stand te brengen ([SWS_Can_91010], AUTOSAR_SWS_CANDriver §7.3 “CAN Controller State Machine”).

Gebruik en semantiek

De aanroep geschiedt met de parameter Controller voor identificatie van de CAN-controller en Transition van het type Can_ControllerStateType voor het voorschrijven van de gewenste toestandsovergang ([SWS_Can_00230]). De service is gedefinieerd als asynchroon en niet-re-entrant (Non Reentrant) ([SWS_Can_00230]). Een retourwaarde van E_OK bevestigt dat het verzoek is geaccepteerd; E_NOT_OK geeft aan dat het verzoek is afgewezen en dat er sprake is van een ontwikkelingsfout ([SWS_Can_00230], [SWS_Can_00441]).

Verloop en interactie

Na het instellen van de registerconfiguratie wordt Can_SetControllerMode weer verlaten (AUTOSAR_SWS_CANDriver p. 38). Aangezien de Can-module de toestandswisselingen van de hardware zelf niet opslaat ([SWS_Can_91010]), neemt vermoedelijk de cyclische functie Can_Mainfunction_Mode de asynchrone voltooiing respectievelijk verificatie van de door Can_SetControllerMode geïnitieerde overgang voor haar rekening (AUTOSAR_SWS_CANDriver p. 38). Vraag Q-03edb1b665a1624b (open)

Deze tekst is door een AI gegenereerd op basis van de specificatiegegevens van AUTOSAR R20-11.

Implementer's Guide volgt (complexiteit I1)

functie Can_DisableControllerInterrupts [SWS_Can_00231] 📄 PDF

void Can_DisableControllerInterrupts (uint8 Controller);

This function disables all interrupts for this CAN controller.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: 9d72b1d46d5d Herkomst Open vragen (2)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

De synchrone en re-entrante functie Can_DisableControllerInterrupts schakelt alle interrupts voor een gespecificeerde CAN-controller ([SWS_Can_00231]) uit. De overdracht vindt plaats via de parameter Controller zonder retourwaarde ([SWS_Can_00231]).

Met betrekking tot de aanroepcontext en de concurrency is de functie re-entrant ontworpen en ondersteunt deze meervoudige aanroepen (AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”). Interpretatie: Een meervoudige aanroep verhoogt vermoedelijk een interne nestingteller, zodat de interrupts pas na een overeenkomstig aantal vrijgave-aanroepen weer actief worden geschakeld (AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”, AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”). Vraag Q-61be56207aa92ee0 (open)

Op het gebied van foutafhandeling vereist de specificatie het activeren van de fout CAN_E_UNINIT, indien de drivermodule bij de aanroep nog niet is geïnitialiseerd (AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”). Bovendien vereist de specificatie het activeren van een verdere fout (AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”); vermoedelijk dient dit voor de controle op een ongeldige controller-identifier. Vraag (open)

In het samenspel binnen de CAN-driver dient de aanroep om controllergerelateerde kritieke secties te beveiligen terwijl de controller actief blijft (AUTOSAR_SWS_CANDriver §7.5 “Interrupt handling”). Formele opschoningen en historische interfacewijzigingen van de driver zijn gedocumenteerd in de release notes ([SWS_Can_00441]).

Deze tekst is opgesteld door een AI en dient als aanvullende gebruiksinstructie bij de specificatie.

functie Can_EnableControllerInterrupts [SWS_Can_00232] 📄 PDF

void Can_EnableControllerInterrupts (uint8 Controller);

This function enables all allowed interrupts.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: 374e141963cb Herkomst Open vragen (2)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

De synchrone en re-entrante functie Can_EnableControllerInterrupts reactiveert alle toegestane interrupts voor de via de parameter Controller opgegeven CAN-controller ([SWS_Can_00232]). Deze heeft geen retourwaarde en wordt beschikbaar gesteld via het headerbestand Can.h ([SWS_Can_00232]).

Wat het verloop betreft leest de functie softwarematige besturingsvlaggen uit (AUTOSAR_SWS_CANDriver p. 65). Als de interrupts van de controller eerder meerdere keren zijn gedeactiveerd, moet Can_EnableControllerInterrupts vóór de daadwerkelijke vrijgave even vaak worden aangeroepen (AUTOSAR_SWS_CANDriver p. 65). Interpretatie: De driver beheert geneste blokkeringssecties vermoedelijk via interne tellers of vlaggen, zodat de hardware-interrupts pas na volledige vereffening van alle deactiveringsaanroepen worden gereactiveerd. Vraag Q-6781f0fc9ad7d221 (open)

Als de functie wordt aangeroepen voordat de CAN-driver correct is geïnitialiseerd, meldt deze de fout CAN_E_UNINIT (AUTOSAR_SWS_CANDriver p. 66). Dit wordt in de drivercontext vermoedelijk als Development Error behandeld ([SWS_Can_00441]). Vraag Q-efbbcf03a2589e4e (open) In niet-geïnitialiseerde toestand voert de functie geen verdere acties uit op de controller (AUTOSAR_SWS_CANDriver p. 66).

Deze gebruiksinstructie is automatisch gegenereerd op basis van de specificatie.

functie Can_CheckWakeup [SWS_Can_00360] 📄 PDF

Std_ReturnType Can_CheckWakeup (uint8 Controller);

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

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: 720a4fc64f2a Herkomst
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

Gebruik en gedrag

De synchrone functie Can_CheckWakeup controleert voor een bepaalde CAN-controller of er een wake-upgebeurtenis is gedetecteerd ([SWS_Can_00360], AUTOSAR_SWS_CANDriver p. 48, AUTOSAR_SWS_CANDriver p. 67). Deze is beschikbaar via het headerbestand Can.h en heeft het service-ID 0x0b ([SWS_Can_00360]).

  • Parameter: Controller (in) duidt de identificatie aan van de CAN-controller waarvan de toestand moet worden gecontroleerd op een wake-up ([SWS_Can_00360]).
  • Retourwaarde: Geeft Std_ReturnType terug. De retourwaarde E_OK signaleert dat de API-aanroep is geaccepteerd, terwijl E_NOT_OK de afwijzing aangeeft ([SWS_Can_00360]).
  • Concurrency: De functie is gedefinieerd als niet-re-entrant (Non Reentrant) ([SWS_Can_00360]).

Configuratie en foutafhandeling

De beschikbaarheid van de functie is configureerbaar tijdens pre-compile-tijd; de service Can_CheckWakeup kan daarmee in de code worden opgenomen of eruit worden verwijderd (AUTOSAR_SWS_CANDriver p. 67, AUTOSAR_SWS_CANDriver p. 97). Als de functie wordt aangeroepen voordat de CAN-driver is geïnitialiseerd, meldt deze de fout CAN_E_UNINIT (AUTOSAR_SWS_CANDriver p. 67).

Samenspel

De aanroep van Can_CheckWakeup wordt doorgaans getriggerd door de CAN Interface (AUTOSAR_SWS_CANDriver p. 48). In het geval van een wake-upgebeurtenis op de bus kan CanIf_CheckWakeup worden aangeroepen tijdens de afhandeling van EcuM_CheckWakeup (AUTOSAR_SWS_CANInterface §7.18.4.1 “Wake-up detection”). Volgens [SWS_CANIF_00395] vraagt CanIf hierbij via Can_CheckWakeup() of CanTrcv_CheckWakeup() op welk concreet hardwareapparaat de bus-wake-up heeft getriggerd (AUTOSAR_SWS_CANInterface p. 55).

Deze gebruiksinstructie is geautomatiseerd opgesteld en is uitsluitend gebaseerd op de specificaties van de AUTOSAR-release R20-11.

functie 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.

functie 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.

functie 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.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: f2d4ad3f2f32 Herkomst Open vragen (1)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

Gebruik en semantiek

De functie Can_Write wordt synchroon aangeroepen door de module CanIf om een CAN-bericht voor verzending over te dragen aan de CAN-driver (CanDrv) ([SWS_Can_00233]). De aanroeper geeft daarbij twee parameters door:

  • Hth: Hardware-zend-handle, die het te gebruiken verzendobject vastlegt en impliciet de controller bepaalt, aangezien de handle-nummers binnen een hardware-eenheid uniek zijn ([SWS_Can_00233]).
  • PduInfo: Pointer naar een structuur met SDU-payload, datalengte en CAN-identifier ([SWS_Can_00233]).

Vóór het verzenden controleert de functie het geadresseerde hardware-verzendobject (SWS_CANDriver p. 73) en stelt het overgedragen swPduHandle veilig (SWS_CANDriver p. 43). Via de retourwaarde van het type Std_ReturnType (SRS_BSWGeneral §5.2.3.6 “Types and keywords”) signaleert E_OK de acceptatie van de opdracht, terwijl CAN_BUSY aangeeft dat er geen hardware-zendbuffer beschikbaar is ([SWS_Can_00233], SWS_CANDriver p. 51).

Foutafhandeling

Als er tijdens de uitvoering een ontwikkelingsfout optreedt, retourneert de functie E_NOT_OK ([SWS_Can_00233], [SWS_Can_00441]). Interpretatie: Specifieke DET-foutcodes worden in het beschikbare uittreksel niet expliciet genoemd; foutieve handles of ongeldige pointers leiden vermoedelijk echter tot de teruggave van E_NOT_OK. Vraag Q-ca947a7e0e4fd7d6 (open)

Gelijktijdigheid en beperkingen

Can_Write is gespecificeerd als re-entrant respectievelijk thread-safe ([SWS_Can_00233], SWS_CANDriver p. 49). Als een preëmptieve aanroep aan de driverzijde niet re-entrant kan worden uitgevoerd, wordt dit eveneens aan de CanIf gemeld via de retourwaarde CAN_BUSY ([SWS_Can_00233]). De aanroeper moet garanderen dat het PDU-geheugen tot aan de terugkeer van de functie-aanroep ongewijzigd geldig blijft (SWS_CANDriver p. 45).

Samenspel

Via [SWS_Can_00416] wordt bij de aanroep doorgegeven om welk type PDU het gaat (SWS_CANDriver p. 51), waarbij de driver de overdracht tot aan de maximale PDU-lengte ondersteunt (SWS_CANDriver p. 52).

Deze gebruiksinstructie is geautomatiseerd gegenereerd op basis van de specificatiedocumenten van AUTOSAR R20-11.

functie <LPDU_CalloutName> [SWS_Can_00443] 📄 PDF

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

-

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: 3538baa0cf7b Herkomst Open vragen (1)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

Gebruik en aanroepcontext

De configureerbare call-out-interface <LPDU_CalloutName> wordt door de AUTOSAR-CAN-module optioneel bij elke ontvangst van een L-PDU aangeroepen (SWS_CANDriver §8.4.1 “Call-out function”). De declaratie van de functie wordt beschikbaar gesteld via het headerbestand Can_Externals.h ([SWS_Can_00443]). De feitelijke naam van de functie wordt projectspecifiek geconfigureerd ([SWS_Can_00443]).

Als ingangsparameters worden de hardware-receive-handle Hrh, de identifier CanId, de datalengte CanDataLegth evenals een pointer naar de payload CanSduPtr doorgegeven ([SWS_Can_00443]).

Filtering en retourwaarde

De functie geeft een boolean-waarde terug. Geeft de call-out false terug, dan mag de ontvangen L-PDU niet verder worden verwerkt ([SWS_Can_00444]). Interpretatie: levert de aanroep true op, dan vindt vermoedelijk de reguliere doorzending van de L-PDU naar de bovenliggende lagen plaats. Vraag Q-e96e75e93881c3af (open)

Gelijktijdigheid en beperkingen

De functie is voorzien van de service-ID 0x20 en gespecificeerd als asynchroon (Asynchronous) en niet-re-entrant (Non Reentrant) ([SWS_Can_00443]). Omdat deze niet-re-entrant is, mogen er geen parallelle aanroepen in dezelfde context plaatsvinden.

Deze tekst is gegenereerd door een AI en dient als leidraad. Bindend zijn de bepalingen van de AUTOSAR-specificatie.

functie 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.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: a6cd22a9e2b1 Herkomst Open vragen (1)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

De functie Can_MainFunction_Write voert het cyclisch pollen van verzendbevestigingen (TX-Confirmation) uit, voor zover de parameter CAN_TX_PROCESSING is geconfigureerd op POLLING [SWS_Can_00225], AUTOSAR SWS CAN Driver §7 “Scheduled functions”. Deze is parameterloos (void Can_MainFunction_Write(void)), heeft het service-ID 0x01 en wordt via het headerbestand SchM_Can.h beschikbaar gesteld voor de scheduler [SWS_Can_00225]. Via configuratieschakelaars kan de functie voor de verwerking van de PDU-transmissie worden geactiveerd of gedeactiveerd AUTOSAR SWS CAN Driver §10 “CanMainFunctionWrite”.

Wordt in het systeem in het geheel geen polling voor verzendprocessen gebruikt, dan dient Can_MainFunction_Write volgens de specificatie als een lege define te worden geïmplementeerd AUTOSAR SWS CAN Driver §7 “Scheduled functions”. Dit vermijdt vermoedelijk onnodige scheduler-overhead in zuiver interruptgestuurde systemen. Vraag Q-2152a35397130945 (open)

In samenspel met Can_MainFunction_Read en Can_MainFunction_BusOff vormt de routine de cyclische interface van de driver naar de SchM AUTOSAR SWS CAN Driver §7 “Scheduled functions”. De bevestigingsverwerking vindt afhankelijk van de modus direct op de hardwareresource of in de context van Can_MainFunction_Write plaats AUTOSAR SWS CAN Driver §7 “Hardware Resources”. De concrete aanroep en de toewijzing richten zich naar de telkens gerefereerde elementen AUTOSAR SWS CAN Driver §10 “CanMainFunctionWrite”, AUTOSAR SWS CAN Driver §10 “Call Context”, ondersteund door een controllergerelateerde Tx-verwerking [SWS_Can_00441].

Deze gebruiksinstructie is geautomatiseerd gegenereerd op basis van de specificatie AUTOSAR R20-11.

functie 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.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: 2c7a6a6247b4 Herkomst Open vragen (1)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

De functie Can_MainFunction_Read dient voor het cyclisch opvragen (polling) van CAN-ontvangstmeldingen ([SWS_Can_00226]). Deze heeft de signatuur void Can_MainFunction_Read (void) met het service-ID 0x08 en wordt via het headerbestand SchM_Can.h beschikbaar gesteld voor de programmabesturing ([SWS_Can_00226]).

Gebruik en configuratie

De functie voert het pollen van RX-indicaties uit wanneer de configuratieparameter CAN_RX_PROCESSING op POLLING is ingesteld ([SWS_Can_00226]). In het systeem kan deze verwerking per controller worden geconfigureerd ([SWS_Can_00441]). Wordt in de CAN-driver in het geheel geen polling gebruikt, dan kan Can_MainFunction_Read als een lege macro worden gedefinieerd (AUTOSAR_SWS_CANDriver p. 77).

Gelijktijdigheid en beperkingen

De aanroep vindt periodiek plaats in de schedulercontext conform de geparametreerde triggerperiode (AUTOSAR_SWS_CANDriver p. 22). Voor de uitvoering gelden strenge voorwaarden:

Interpretatie: Het geconfigureerde aanroepinterval van de task zou vermoedelijk zodanig bemeten moeten worden dat een verwerkingsfase vóór de start van de volgende cyclus steeds is beëindigd, aangezien re-entrantie niet is toegestaan (AUTOSAR_SWS_CANDriver p. 47). Vraag Q-1f2fa9db14970b12 (open)

Deze tekst is door een AI gegenereerd op basis van de AUTOSAR-specificatie R20-11.

functie 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'.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: d6a62aee0c17 Herkomst Open vragen (1)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

De geplande hoofdfunctie Can_MainFunction_BusOff dient voor het cyclisch pollen van bus-off-events van de CAN-controllers, voor zover deze statisch zijn geconfigureerd om te worden gepolld [SWS_Can_00227], [SWS_Can_00109]. Deze heeft de signatuur void Can_MainFunction_BusOff(void), accepteert geen parameters, retourneert geen waarde en wordt via de header SchM_Can.h beschikbaar gesteld voor de programmabesturing [SWS_Can_00227].

Gebruik en samenspel

Hardware-events kunnen in de CAN-driver via een interrupt of door het pollen van bijbehorende statusvlaggen worden geregistreerd, waarbij de configuratie van het opvragen hardwareafhankelijk is [SWS_Can_00099]. De driver kan ook zodanig worden geconfigureerd dat volledig wordt afgezien van interrupts [SWS_Can_00007]. Wordt er systeembreed in het geheel geen polling ingezet, dan mag de Can-module de functie als een lege macro implementeren [SWS_Can_00183].

Wordt in Can_MainFunction_BusOff een bus-off-event gedetecteerd via statusbits, dan voert de module noodzakelijke registerinstellingen door – bijvoorbeeld ter vermijding van een automatisch hardwareherstel SWS_CANDriver §7.3 “CAN Controller State Machine”, [SWS_Can_91010]. Vervolgens informeert de module de bovenliggende laag CanIf via de bijbehorende callback, waarin de softwaretoestandswijziging van de controller plaatsvindt SWS_CANDriver §7.3 “CAN Controller State Machine”.

Aanroepcontext en beperkingen

Bij gepollde werking is de aanroepcontext van de callback-notificatie niet de ISR, maar de uitvoerende task van Can_MainFunction_BusOff; desondanks moeten alle callback-functies zodanig zijn gerealiseerd alsof ze vanuit de ISR-context zouden worden aangeroepen SWS_CANDriver §7.9 “Notification concept”. Met betrekking tot de re-entrantie bevat de payload geen expliciete vermeldingen; vermoedelijk is de functie niet re-entrant, aangezien deze toegang heeft tot globale controllerregisters en -toestanden. Vraag Q-38fcd72c40ce3e66 (open)

Deze gebruiksinstructie is gegenereerd door een AI en is uitsluitend gebaseerd op de specificatie-uittreksels van de AUTOSAR-versie R20-11.

functie 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'.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: ce643213c50c Herkomst
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

De hoofdfunctie Can_MainFunction_Wakeup voert het cyclisch pollen uit van wake-up-events die statisch zijn geconfigureerd om te worden gepolld ([SWS_Can_00228]). De functie heeft de signatuur void Can_MainFunction_Wakeup(void), accepteert geen parameters, levert geen retourwaarde en wordt via de header SchM_Can.h beschikbaar gesteld voor de Schedule Manager (AUTOSAR_SWS_CANDriver p. 79). De uitvoeringsperiode van de functie wordt in seconden geconfigureerd (AUTOSAR_SWS_CANDriver p. 92).

In het kader van de toestandsmachine van de CAN-controller (SWS_CANDriver §7.3 “CAN Controller State Machine”) kunnen externe hardware-wake-up-events in plaats van via interrupts worden gesignaleerd via een statusbit dat in Can_MainFunction_Wakeup wordt opgevraagd ([SWS_Can_91010]). Bovendien pollt de functie bij toestandsovergangen een bijbehorende vlag van het CAN-statusregister totdat deze de effectiviteit van de wijziging signaleert ([SWS_Can_00370]). Na een succesvolle toestandswissel meldt de CAN-driver de nieuwe toestand met de callback-functie CanIf_ControllerModeIndication aan de CAN-interface, gerelateerd aan de abstracte CanIf ControllerId ([SWS_Can_00370]).

Wat betreft configuratie en resourcegebruik kan de API Can_MainFunction_Wakeup() voor de afhandeling van wake-up-events worden geactiveerd of gedeactiveerd (AUTOSAR_SWS_CANDriver p. 97). Indien in de ECU in het geheel geen polling voor wake-up-events wordt gebruikt, kan Can_MainFunction_Wakeup als een lege macro worden gedefinieerd (AUTOSAR_SWS_CANDriver p. 79).

Deze gebruiksinstructie is geautomatiseerd gegenereerd op basis van de specificatie AUTOSAR CP R20-11.

functie Can_MainFunction_Mode [SWS_Can_00368] 📄 PDF

void Can_MainFunction_Mode (void);

This function performs the polling of CAN controller mode transitions.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: feee99301166 Herkomst Open vragen (1)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

Gebruik en werking

De geplande hoofdfunctie Can_MainFunction_Mode ([SWS_Can_00368]) voert het pollen van toestandsovergangen van de CAN-controllers uit. Deze heeft noch invoerparameters noch een retourwaarde (void Can_MainFunction_Mode(void), service-ID 0x0c) en wordt gedeclareerd via de header SchM_Can.h SWS_CANDriver §8.5.1.5 “Can_MainFunction_Mode”.

De functie wordt continu cyclisch aangeroepen (AUTOSAR_SWS_CANInterface p. 143). Deze controleert de hardware om te zien of de modus van een CAN-controller is gewijzigd. Bij een gedetecteerde wijziging wordt de CAN-interface op de hoogte gebracht via de aanroep van CanIf_ControllerModeIndication(Controller, ControllerMode).

Asynchrone modusbewaking

Als er eerder een moduswijziging via Can_SetControllerMode() is aangevraagd en deze aanroep succesvol terugkeert naar CanIf, herkent Can_MainFunction_Mode de voltooide toestandsovergang van de controller-hardware. Deze informeert CanIf vervolgens asynchroon via CanIf_ControllerModeIndication over de nieuwe toestand, zoals CAN_CS_STARTED AUTOSAR_SWS_CANInterface p. 144.

Aanroepcontext en randvoorwaarden

Vanwege de beschikbaarstelling via SchM_Can.h en de definitie als scheduled function vindt de periodieke aanroep vermoedelijk plaats door de BSW-scheduler. Vraag Q-42edbc2aa591e8d7 (open) Specifieke foutcodes of ontwikkelingsstappen worden in de payload voor deze functie niet gedefinieerd.

Deze tekst is opgesteld door een AI op basis van de AUTOSAR-specificaties.

Implementer's Guide volgt (complexiteit 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.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: 0cb922d28e06 Herkomst Open vragen (1)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

Het enumeratietype Can_ErrorStateType uit Can_GeneralTypes.h beschrijft de fout- en bedrijfstoestanden van een CAN-controller [SWS_Can_91003]. Het brengt het gedrag van de controller op de CAN-bus in kaart via drie toestanden SWS_CANDriver §8.2.7 “Can_ErrorStateType”:

  • CAN_ERRORSTATE_ACTIVE: De CAN-controller neemt volledig deel aan de buscommunicatie [SWS_Can_91003].
  • CAN_ERRORSTATE_PASSIVE: De CAN-controller neemt deel aan de communicatie, maar verzendt geen actieve error frames meer [SWS_Can_91003].
  • CAN_ERRORSTATE_BUSOFF: De CAN-controller is als gevolg van ernstige transmissiefouten geïsoleerd van de bus en neemt niet langer deel aan de communicatie [SWS_Can_91003].

Tijdens runtime wordt de toestand opgevraagd via de synchrone driverdienst Can_GetControllerErrorState [SWS_Can_91004]. De uitvoerparameter ErrorStatePtr daarvan neemt de vastgestelde waarde op. Dezelfde signatuur gebruikt ook de bovenliggende functie CanIf_GetControllerErrorState in de CAN Interface AUTOSAR_SWS_CANInterface p. 78 “CanIf_GetControllerErrorState”. Met betrekking tot de concurrency geldt dat Can_GetControllerErrorState voor dezelfde ControllerId als niet-re-entrant is gespecificeerd [SWS_Can_91004].

In geval van een fout levert Can_GetControllerErrorState de retourwaarde E_NOT_OK op, bij een succesvolle opvraging E_OK [SWS_Can_91004]. Bij geactiveerde detectie van ontwikkelingsfouten (DET) leidt een aanroep vóór de driverinitialisatie tot de fout CAN_E_UNINIT [SWS_Can_91005]. Een ontoelaatbare ControllerId activeert de ontwikkelingsfout CAN_E_PARAM_CONTROLLER [SWS_Can_91006], en de overdracht van een null-pointer voor ErrorStatePtr wordt afgewezen met een ontwikkelingsfout [SWS_Can_91007].

Interpretatie: De aanroeper moet vermoedelijk het geheugengebied voor ErrorStatePtr op eigen verantwoordelijkheid alloceren, aangezien de interface de pointer als een zuivere uitvoerparameter behandelt en null-pointers uitsluit via een ontwikkelingsfout. Vraag Q-5c907c21bcb50893 (open)

Deze tekst is door een AI gegenereerd op basis van de AUTOSAR-specificatie R20-11.

Implementer's Guide volgt (complexiteit I1)

type Can_ControllerStateType [SWS_Can_91013] 📄 PDF

States that are used by the several Controller Mode functions.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: 5eb69ce0444e Herkomst
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

Het enumeratietype Can_ControllerStateType definieert de fundamentele bedrijfstoestanden van een CAN-controller: CAN_CS_UNINIT, CAN_CS_STARTED, CAN_CS_STOPPED en CAN_CS_SLEEP [SWS_Can_91013]. Het type wordt moduleoverstijgend gebruikt voor de softwaregestuurde toestandsvoering van de CAN-controller-toestandsmachine [SWS_Can_00017].

De waarden worden in de volgende contexten toegepast:

Met betrekking tot concurrency en foutafhandeling geldt: De driverfuncties Can_SetControllerMode en Can_GetControllerMode zijn niet-re-entrant [SWS_Can_00230], [SWS_Can_91014]. Bij aanroep van Can_GetControllerMode vóór de driverinitialisatie wordt de ontwikkelingsfout CAN_E_UNINIT gemeld en E_NOT_OK geretourneerd [SWS_Can_91016]. De callback-functie CanSM_ControllerModeIndication is re-entrant voor verschillende controllers en meldt een niet-geconfigureerd controller-ID met CANSM_E_PARAM_CONTROLLER aan de DET [SWS_CanSM_00396], [SWS_CanSM_00397].

Deze gebruiksinstructie is gebaseerd op de bepalingen van de specificaties van de CAN-driver, CAN Interface en CAN State Manager in AUTOSAR Classic R20-11.

Implementer's Guide volgt (complexiteit 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.

DOOR AI GEGENEREERD ongecontroleerd Model: gemini-3.8-flash-medium · Inspanning: medium · Temperatuur: niet regelbaar · Prompt: e538be0a65be Herkomst Open vragen (1)
vertaald uit de Duitse handleidinggemini-3.8-flash-low · 2026-10-13 · Duits origineel

Het enumeratietype Can_ErrorType definieert een gestandaardiseerde superset van CAN-foutoorzaken die typische CAN-hardware kan detecteren en aan hogere lagen kan melden [SWS_Can_91021]. Het wordt beschikbaar gesteld via het headerbestand Can_GeneralTypes.h SWS_CANDriver §8.2.9 “Can_ErrorType”.

Aangezien de enumeratie als superset is ontworpen, ondersteunt niet elke CAN-controller noodzakelijkerwijs alle gespecificeerde waarden [SWS_Can_91021]. Tot de gedefinieerde fouttoestanden behoren:

  • bitfouten bij de busbewaking (CAN_ERROR_BIT_MONITORING1, CAN_ERROR_BIT_MONITORING0 resp. samenvattend CAN_ERROR_BIT),
  • bevestigingsfouten (acknowledgement errors) (CAN_ERROR_CHECK_ACK_FAILED, CAN_ERROR_ACK_DELIMITER),
  • arbitrageverlies van de zender (CAN_ERROR_ARBITRATION_LOST),
  • overbelastingstoestanden door volle ontvangstbuffers (CAN_ERROR_OVERLOAD),
  • formaat- en bitstuffing-schendingen (CAN_ERROR_CHECK_FORM_FAILED, CAN_ERROR_CHECK_STUFFING_FAILED),
  • CRC-fouten (CAN_ERROR_CHECK_CRC_FAILED) evenals
  • een permanente blokkering van de bus op dominant niveau (CAN_ERROR_BUS_LOCK) SWS_CANDriver §8.2.9 “Can_ErrorType”.

In het samenspel van de BSW-modules dient het type als parameter van de callback-functie CanIf_ErrorNotification voor het doorsturen van controllerfouten naar de CAN-interface AUTOSAR_SWS_CANInterface §8.x “CanIf_ErrorNotification”. De doorgegeven waarde komt daarbij vermoedelijk overeen met de door de onderliggende hardware vastgestelde fouttoestand AUTOSAR_SWS_CANDriver §7.x “Error Notification”. Vraag Q-d23c45dd3b23ec71 (open)

Deze tekst is gegenereerd door een AI en dient voor technische oriëntatie.

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#5e5bf060
Content hash
5e5bf060
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANDriver.pdf#nameddest=SWS_Can_00223

Initialisatie en status

Can_DeInit functie

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 functie

This function initializes the module.

void Can_Init (const Can_ConfigType* Config);

Diensten

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 functie

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 en verwachte interfaces

-

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

Cyclisch

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.