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
void Can_Init (const Can_ConfigType* Config);This function initializes the module.void Can_GetVersionInfo (Std_VersionInfoType* versioninfo);This function returns the version information of this module.void Can_DeInit (void);This function de - initializes the module.Std_ReturnType Can_SetBaudrate (uint8 Controller, uint16 BaudRateConfig ID); ⚠️This service shall set the baud rate configuration of the CAN controller.Std_ReturnType Can_SetControllerMode (uint8 Controller, Can_ControllerStateType Transition);This function performs software triggered state transitions of the CAN controller State machine.void Can_DisableControllerInterrupts (uint8 Controller);This function disables all interrupts for this CAN controller.void Can_EnableControllerInterrupts (uint8 Controller);This function enables all allowed interrupts.Std_ReturnType Can_CheckWakeup (uint8 Controller);This function checks if a wakeup has occurred for the given controller.Std_ReturnType Can_GetControllerErrorState (uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr);This service obtains the error state of the CAN controller.Std_ReturnType Can_GetControllerMode (uint8 Controller, Can_ControllerStateType* ControllerModePtr);This service reports about the current status of the requested CAN controller.Std_ReturnType Can_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);Returns the Rx error counter for a CAN controller.Std_ReturnType Can_GetControllerTxErrorCounter (uint8 ControllerId, uint8* TxErrorCounterPtr);Returns the Tx error counter for a CAN controller.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.boolean <LPDU_CalloutName> (uint8 Hrh, Can_IdType CanId, uint8 CanDataLegth, const uint8* CanSduPtr);-void Can_MainFunction_Write (void);This function performs the polling of TX confirmation when CAN_ TX_ PROCESSING is set to POLLING.void Can_MainFunction_Read (void);This function performs the polling of RX indications when CAN_ RX_ PROCESSING is set to POLLING.void Can_MainFunction_BusOff (void);This function performs the polling of bus - off events that are configured statically as 'to be polled'.void Can_MainFunction_Wakeup (void);This function performs the polling of wake - up events that are configured statically as 'to be polled'.void Can_MainFunction_Mode (void);This function performs the polling of CAN controller mode transitions.
Typen — Übersicht
struct Can_ConfigTypeThis is the type of the external data structure containing the overall initialization data for the CAN driver and SFR settings...Can_PduTypeThis type unites Pdu Id (sw Pdu Handle), Sdu Length (length), Sdu Data (sdu), and Can Id (id) for any CAN L - SDU.Can_IdTypeRepresents the Identifier of an L - PDU.Can_HwHandleTypeRepresents the hardware object handles of a CAN hardware unit.struct Can_HwTypeThis type defines a data structure which clearly provides an Hardware Object Handle including its corresponding CAN Controller...enum Can_ErrorStateTypeError states of a CAN controller.enum Can_ControllerStateTypeStates that are used by the several Controller Mode functions.enum Can_ErrorTypeThe enumeration represents a superset of CAN Error Types which typical CAN HW is able to report.
Funktionen & Typen — Detailansicht
functie Can_Init [SWS_Can_00223] 📄 PDF
void Can_Init (const Can_ConfigType* Config);
This function initializes the module.
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_GetVersionInfo [SWS_Can_00224] 📄 PDF
void Can_GetVersionInfo (Std_VersionInfoType* versioninfo);
This function returns the version information of this module.
functie Can_DeInit [SWS_Can_91002] 📄 PDF
void Can_DeInit (void);
This function de - initializes the module.
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:
- De aanroeper moet ervoor zorgen dat geen enkele CAN-controller zich in een ontoelaatbare toestand bevindt (AUTOSAR_SWS_CANDriver p. 61); vermoedelijk moeten actieve communicatieprocessen vooraf zijn beëindigd. Vraag Q-311343fa42add3a3 (open)
- Als de CAN-module zich bij de aanroep niet in de vereiste begintoestand (AUTOSAR_SWS_CANDriver p. 41) bevindt, meldt de functie de fout
CAN_E_TRANSITION(AUTOSAR_SWS_CANDriver p. 61). - Eveneens wordt de fout
CAN_E_TRANSITIONgeactiveerd wanneer een CAN-controller in een toestand blijft die de de-initialisatie verhindert (AUTOSAR_SWS_CANDriver p. 61). Interpretatie: De driver veronderstelt vermoedelijk een gestopte toestand van alle controllers voorafgaand aan de overgang. Vraag Q-435095949dafba5c (open)
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.
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.
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.
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.
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_ReturnTypeterug. De retourwaardeE_OKsignaleert dat de API-aanroep is geaccepteerd, terwijlE_NOT_OKde 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_GetControllerErrorState [SWS_Can_91004] 📄 PDF
Std_ReturnType Can_GetControllerErrorState (uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr);
This service obtains the error state of the CAN controller.
functie Can_GetControllerMode [SWS_Can_91014] 📄 PDF
Std_ReturnType Can_GetControllerMode (uint8 Controller, Can_ControllerStateType* ControllerModePtr);
This service reports about the current status of the requested CAN controller.
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.
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);
-
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.
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.
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:
- De functie mag niet door zichzelf worden onderbroken (AUTOSAR_SWS_CANDriver p. 47).
- Over het algemeen mogen CAN-hoofdfuncties zoals
Can_MainFunction_Readniet worden onderbroken (AUTOSAR_SWS_CANDriver p. 49), om de consistente toegang tot driver- en hardwareresources in pollingmodus veilig te stellen (AUTOSAR_SWS_CANDriver p. 46).
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'.
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'.
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.
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.
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.
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:
- Toestandsverzoek: In
Can_SetControllerModedient het type als overgangswaarde (parameterTransition) voor het asynchroon aanvragen van een nieuwe bedrijfstoestand [SWS_Can_00230]; corresponderend hiermee bestaatCanIf_SetControllerModeAUTOSAR_SWS_CANInterface §- “CanIf_SetControllerMode”. De driver geeft de aanvraag door aan de controller-hardware, waarbij de daadwerkelijke toestandsverandering onmiddellijk of na enkele milliseconden van kracht wordt AUTOSAR_SWS_CANInterface §- “Can_SetControllerMode”. Een overgang naarCAN_CS_STARTEDbrengt bovendien een herinitialisatie van de controller teweeg [SWS_Can_00384]. - Statusopvraging: Via
Can_GetControllerModekan de actuele toestand synchroon worden opgevraagd via de uitvoerpointerControllerModePtr[SWS_Can_91014], [SWS_Can_91015] (analoog inCanIf_GetControllerModeAUTOSAR_SWS_CANInterface §- “CanIf_GetControllerMode”). - Toestandsindicatie: Na een voltooide wisseling stellen callbacks zoals
CanSM_ControllerModeIndication[SWS_CanSM_00396],CanIf_ControllerModeIndicationAUTOSAR_SWS_CANInterface §- “CanIf_ControllerModeIndication” evenals gebruikerscallbacks AUTOSAR_SWS_CANInterface §- “User_ControllerModeIndication” bovenliggende lagen synchroon op de hoogte van de nieuwe controller-modus.
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.
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_MONITORING0resp. samenvattendCAN_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
gemini-3.8-flash-low· 2026-10-13 · Duits origineel