DEENESPTFRRUARHIKOZHNL

CAN Driver (Can)

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

Guide du moduleGÉNÉRÉ PAR IA

Pilote le matériel du contrôleur CAN et assure la transmission, la réception et les changements d'état vers le CAN Interface.
GÉNÉRÉ PAR IA non vérifié Modèle : claude-opus-5-5 · Effort : high · Température : non réglable · Prompt : b6833c934a77 Provenance Questions ouvertes (2)
Ancre causale : R20-11 Valable à partir de R20-11 Synthétisé pour cette version de spécification.
traduit du guide allemandGénéré par l'IAgemini-3.8-flash-low · 2026-10-13 · Original allemand

Pilote le matériel du contrôleur CAN et assure la transmission, la réception et les changements d'état vers le CAN Interface.

Le pilote CAN commande les contrôleurs CAN d'une unité matérielle et constitue la couche matérielle sous le CAN Interface. Il lui signale la réception, la confirmation d'émission, le Bus-off et les changements de mode par rappel [SWS_Can_00234]. Selon Can_Init, tous les contrôleurs sont à l'état STOPPED. Chaque contrôleur est démarré individuellement et de manière asynchrone avec Can_SetControllerMode ; le succès n'est notifié qu'ultérieurement [SWS_Can_00230]. L'émission s'effectue avec Can_Write via des handles d'émission matériels. Si aucun objet d'émission n'est disponible, le pilote renvoie CAN_BUSY, et CanIf met la requête en mémoire tampon.

Le pilote CAN encapsule chaque accès aux contrôleurs CAN d'une unité matérielle. Il sert uniquement le CAN Interface en tant qu'utilisateur unique et signale la réception, la confirmation d'émission, le Bus-off et les changements de mode via des rappels CanIf prédéfinis [SWS_Can_00234]. L'ECU State Manager l'initialise avec Can_Init et un Can_ConfigType spécifique au matériel [SWS_Can_00223]. Ensuite, le pilote est dans l'état CAN_READY et tous les contrôleurs sont dans l'état 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 demandes de mode CanIf->CanSM messages de mode et de Bus-Off 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

Diagramme de contexte : intégration de Can entre EcuM, BSW Scheduler, CanIf, DET, Os et le matériel du contrôleur. Sources : [SWS_Can_00234], SWS CANDriver p. 78

Chaque contrôleur passe par les états UNINIT, STOPPED, STARTED et SLEEP [SWS_Can_91013]. Il est démarré individuellement et de manière asynchrone avec Can_SetControllerMode : E_OK signifie uniquement « accepté » [SWS_Can_00230]. Le pilote signale ultérieurement l'état atteint via CanIf_ControllerModeIndication SWS CANDriver p. 33. Le Bus-off fait passer le contrôleur à STOPPED sans reprise matérielle ; un réveil du bus le fait passer de SLEEP à 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) ou Bus-Off (matériel) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) ou réveil depuis le bus SLEEP->SLEEP Can_SetBaudrate

Diagramme d'état : transitions d'un contrôleur par appels logiciels ainsi que par événements de Bus-off et de réveil. Sources : [SWS_Can_91010], SWS CANDriver p. 38

L'émission s'effectue avec Can_Write(Hth, PduInfo). Les deux bits de poids fort de Can_IdType distinguent CAN 2.0 et CAN FD ainsi que l'ID standard et étendue [SWS_Can_00233] [SWS_Can_00416]. Si aucun objet d'émission n'est libre, le pilote renvoie CAN_BUSY, et CanIf met la requête en mémoire tampon [SWS_Can_00039] SWS CANDriver p. 47. Les événements sont détectés par interruption ou par polling. Pour le polling, il existe des fonctions principales cycliques SWS CANDriver p. 41 :

  • Write et Read : confirmations d'émission et réception
  • BusOff et Wakeup : événements de Bus-off et de réveil
  • Mode : transitions de mode

Les fonctions principales sont définies dans [SWS_Can_00225] à [SWS_Can_00228] et [SWS_Can_00368].

En cas d'erreur, le pilote signale des erreurs de développement telles que CAN_E_UNINIT ou CAN_E_TRANSITION au DET [SWS_Can_91019]. Les fonctions avec valeur de retour renvoient alors E_NOT_OK SWS CANDriver p. 48. La reprise après Bus-off est prise en charge par le CanSM via CanIf. Le redémarrage devrait à nouveau s'effectuer via Can_SetControllerMode(CAN_CS_STARTED) SWS CANInterface p. 138. L'état d'erreur et les compteurs d'erreurs peuvent être interrogés ; les valeurs des compteurs ne sont toutefois pas considérées comme un état de bus fiable [SWS_Can_91004] [SWS_Can_00516]. Question (ouverte)

Rôle : pilote proche du matériel entre CanIf et contrôleurs CAN

Le pilote CAN encapsule tout accès au matériel CAN d'une unité matérielle. Les changements d'état des contrôleurs s'effectuent uniquement via Can_Init, Can_SetBaudrate et Can_SetControllerMode. Le pilote ne mémorise pas lui-même les changements d'état SWS CANDriver p. 30. Son partenaire vers le haut est le CAN Interface. Tous les rappels que le pilote appelle sont implémentés dans CanIf et ne sont pas configurables : CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff et CanIf_ControllerModeIndication. De plus, il nécessite Det_ReportRuntimeError et le service Os GetCounterValue [SWS_Can_00234] SWS CANDriver p. 73. Les types importés proviennent notamment de ComStack_Types, EcuM et Os [SWS_Can_00222].

L'ECU State Manager initialise le pilote via Can_Init. Selon la note d'implémentation, il n'appelle la fonction qu'au plus une fois à l'exécution [SWS_Can_00223] SWS CANDriver p. 29. Le BSW Scheduler appelle directement les fonctions principales cycliques. Elles n'ont ni paramètres ni valeur de retour et ne sont pas réentrantes ; aucun ordre d'exécution n'est prescrit SWS CANDriver p. 78. Vers le bas, le pilote ne propose aucun rappel. Les contrôleurs CAN externes ne doivent être adressés que via des API MCAL synchrones telles que 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 demandes de mode CanIf->CanSM messages de mode et de Bus-Off 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

Diagramme de contexte : Can est initialisé par EcuM, appelé cycliquement par le BSW Scheduler et utilisé par CanIf. Il notifie CanIf, EcuM et DET et utilise Os pour les temporisations. Sources : [SWS_Can_00234], SWS CANDriver p. 45, SWS CANDriver p. 78

De la mise sous tension à STARTED : états du pilote et du contrôleur

Le pilote dans son ensemble ne connaît que les états CAN_UNINIT et CAN_READY. Après la réinitialisation, il se trouve à l'état CAN_UNINIT. Can_Init initialise tous les contrôleurs conformément à la configuration, puis passe à CAN_READY. Can_DeInit positionne l'état du module sur CAN_UNINIT avant de désinitialiser les contrôleurs [SWS_Can_00223] [SWS_Can_91002] SWS CANDriver p. 29.

Distincts de cela, chaque contrôleur possède quatre états parmi Can_ControllerStateType : CAN_CS_UNINIT, CAN_CS_STOPPED, CAN_CS_STARTED et CAN_CS_SLEEP [SWS_Can_91013].

  • À l'état STOPPED, le contrôleur est initialisé, mais ne participe pas au bus et n'émet ni trames d'erreur ni acquittements.
  • STARTED correspond au fonctionnement normal.
  • SLEEP ne diffère de STOPPED que sur le matériel disposant d'un mode veille SWS CANDriver p. 31.

Can_Init fait passer tous les contrôleurs à STOPPED SWS CANDriver p. 32. Can_DeInit les fait passer de STOPPED ou SLEEP à UNINIT [SWS_Can_91010] SWS CANDriver p. 38. Depuis STARTED, il n'y a pas de passage direct vers 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) ou Bus-Off (matériel) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) ou réveil depuis le bus SLEEP->SLEEP Can_SetBaudrate

Diagramme d'état : cycle de vie d'un contrôleur CAN. Le logiciel et les événements du bus déclenchent des transitions ; seul Can_DeInit ramène à UNINIT depuis STOPPED ou SLEEP. Sources : [SWS_Can_91013], [SWS_Can_91010], SWS CANDriver p. 38, SWS CANDriver p. 34, SWS CANDriver p. 35.

Chaque contrôleur est démarré individuellement avec Can_SetControllerMode(CAN_CS_STARTED) SWS CANDriver p. 29. Le service fonctionne de manière asynchrone : E_OK signifie uniquement que la requête a été acceptée [SWS_Can_00230]. À chaque transition vers STARTED, le contrôleur est réinitialisé, et ce avec la configuration utilisée en dernier par Can_Init ou Can_SetBaudrate SWS CANDriver p. 59. Le matériel peut appliquer le changement avec retard. C'est pourquoi le pilote ne signale l'état atteint qu'ultérieurement via CanIf_ControllerModeIndication ; la surveillance de l'atteinte de la cible est assurée par une couche supérieure SWS CANDriver p. 33. Les transitions de mode interrogées par polling sont détectées par Can_MainFunction_Mode [SWS_Can_00368]. Can_GetControllerMode interroge le mode actuel de manière synchrone [SWS_Can_91014].

Initialisation et démarrage d'un contrôleur CANEcuMCanIf-Nutzer (z. B. CanSM)CanIfCanBSW SchedulerCAN-ControllerUse Case: InitialisierungCan_Init(Config)configurer tous les contrôleursController: CAN_CS_STOPPEDModul: CAN_READYUse Case: Controller einzeln startenCanIf_SetControllerMode(STARTED)Can_SetControllerMode(Controller, CAN_CS_STARTED)Neuinitialisierung,Start anfordernE_OK (Anforderung angenommen)E_OKloopjusqu'à ce que la transition soit effectiveCan_MainFunction_Mode()Statusflag lesenCanIf_ControllerModeIndication(ControllerId, CAN_CS_STARTED)<User_ControllerModeIndication>

Diagramme de séquence : initialisation par EcuM et démarrage asynchrone d'un contrôleur. La notification de succès n'intervient qu'après le polling dans Can_MainFunction_Mode. Sources : [SWS_Can_00230], [SWS_Can_00368], SWS CANInterface p. 156, SWS CANDriver p. 29

Émission via les handles d'émission matériels

CanIf transmet les demandes d'émission avec Can_Write(Hth, PduInfo). Le Hth identifie l'objet d'émission matériel et ainsi également le contrôleur, car les numéros HTH sont uniques au sein d'une unité matérielle [SWS_Can_00233]. Can_HwHandleType couvre par défaut 0..0x0FF et, pour plus de 255 objets matériels, la plage étendue jusqu'à 0xFFFF [SWS_Can_00429]. Can_PduType regroupe les champs swPduHandle, length, id et sdu [SWS_Can_00415].

Dans Can_IdType, les deux bits de poids fort codent le type de trame [SWS_Can_00416] :

  • 00 : CAN avec ID standard
  • 01 : CAN FD avec ID standard
  • 10 : CAN avec ID étendue
  • 11 : CAN FD avec ID étendue

Il est ainsi possible de mélanger des trames CAN 2.0 et CAN FD au niveau des trames, à condition qu'une configuration de débit binaire FD soit active pour le contrôleur SWS CANDriver p. 49 SWS CANInterface p. 71.

Can_Write doit être thread-safe car CanIf_Transmit est réentrant. Le pilote renvoie CAN_BUSY si aucun objet d'émission n'est disponible ou si un appel préemptif ne peut pas être exécuté de manière réentrante [SWS_Can_00039] SWS CANDriver p. 47. CanIf met alors la requête en mémoire tampon. Lorsqu'un objet devient disponible, CanIf appelle à nouveau Can_Write par ordre de priorité SWS CANInterface p. 48. Le pilote conserve le swPduHandle jusqu'au CanIf_TxConfirmation correspondant SWS CANDriver p. 35. Pour parer à l'inversion de priorité, il est possible de configurer statiquement la transmission multiplexée ; plusieurs objets matériels constituent alors un HTH SWS CANDriver p. 40.

Émission d'une L-PDU avec confirmationCanIfCanCAN-ControllerBSW SchedulerCan_Write(Hth, PduInfo)altHardware-Sendeobjekt freiswPduHandle je HTH merkenL-PDU ins Hardwareobjekt,déclencher l'émissionE_OKaucun objet libre ou exécution non réentrante impossibleCAN_BUSYmettre en mémoire tampon la L-PDU dans CanIfTxBuffertrame émise et confirmée par le busaltInterrupt-BetriebTX-InterruptPolling-BetriebCan_MainFunction_Write()vérifier les confirmations en attenteCanIf_TxConfirmation(swPduHandle)optL-PDU mise en mémoire tampon pour ce HTHCan_Write(Hth, L-PDU de plus haute priorité)

Diagramme de séquence : demande d'émission avec les voies E_OK et CAN_BUSY, suivie de la confirmation par interruption ou polling. CanIf peut ensuite injecter une L-PDU mise en mémoire tampon. Sources : [SWS_Can_00233], [SWS_Can_00039], SWS CANInterface p. 142, SWS CANInterface p. 48

Réception et fonctions principales cycliques

Lors de la réception, le pilote appelle CanIf_RxIndication. Il transmet l'ID, l'objet matériel et la ControllerId abstraite de CanIf ainsi que la longueur et le pointeur vers la L-SDU. Pour les trames étendues, il positionne le MSB de l'ID afin que CanIf reconnaisse le type de trame SWS CANDriver p. 43. En amont, un callout de L-PDU configurable <LPDU_CalloutName> est facultativement intercalé [SWS_Can_00443]. S'il renvoie false, la L-PDU n'est pas traitée davantage selon le passage du document (R25-11) SWS CANDriver p. 77.

Les événements sont détectés par interruption ou par polling des drapeaux d'état. Un fonctionnement en polling pur, totalement sans interruption, doit pouvoir être configuré. Lors du polling, les fonctions principales appellent les mêmes rappels, simplement depuis le contexte de la tâche au lieu du contexte d'ISR SWS CANDriver p. 41. Chaque fonction principale scrute un type d'événement :

Les descriptions de Read et Write de R20-11 ne mentionnent que le cas POLLING [SWS_Can_00225] [SWS_Can_00226]. Les passages des documents des versions ultérieures ajoutent MIXED ; seuls les objets avec CanHardwareObjectUsesPolling = TRUE sont alors interrogés par polling SWS CANDriver p. 81 SWS CANDriver p. 79. Les exigences de R20-11 ne corroborent pas cette extension. Si plusieurs périodes sont configurées via CanMainFunctionRWPeriods, les noms de fonction reçoivent le suffixe _<ShortName> [SWS_Can_00441] SWS CANDriver p. 122. En l'absence de tout polling, une fonction principale peut être implémentée sous la forme d'un define vide SWS CANDriver p. 81.

Réception d'une L-PDU en mode scrutationBSW SchedulerCanCAN-ControllerL-PDU-CalloutCanIfCanIf-NutzerloopzyklischCan_MainFunction_Read()vérifier la présence de nouvelles L-PDUaltneue L-PDU vorhandenID normieren (Extended: MSB = 1),Daten ggf. in angepassten PufferoptL-PDU-Callout konfiguriert<LPDU_CalloutName>(Hrh, CanId, CanDataLegth, CanSduPtr)true / falsesi false : rejeter la L-PDUCanIf_RxIndication(Mailbox, PduInfoPtr)indication Rx à l'utilisateuraucune nouvelle L-PDU

Diagramme de séquence : réception en mode polling avec normalisation de l'ID, callout de L-PDU optionnel et transmission à CanIf. Sources : [SWS_Can_00226], [SWS_Can_00443], SWS CANInterface p. 153, SWS CANDriver p. 43

Veille, réveil et commande des interruptions

Le pilote ne traite que les réveils que le contrôleur détecte lui-même, et non ceux via le transceiver SWS CANDriver p. 45. Lors d'un réveil matériel, le contrôleur passe de SLEEP à STOPPED. La L-PDU déclencheuse n'est pas traitée davantage. EcuM_CheckWakeup est appelée dans l'interruption ou dans Can_MainFunction_Wakeup, avec la source configurée via CanWakeupSourceRef SWS CANDriver p. 35. L'EcuM appelle ensuite Can_CheckWakeup via CanIf. Cette fonction signale un réveil détecté via EcuM_SetWakeupEvent [SWS_Can_00360] SWS CANDriver p. 63. Pour se prémunir contre les réveils intempestifs, EcuM et CanIf procèdent à la validation sans intervention du pilote SWS CANDriver p. 45.

Can_DisableControllerInterrupts et Can_EnableControllerInterrupts sont réentrants et ont un effet imbriqué. Après n appels de désactivation, n appels d'activation sont nécessaires. Une activation sans désactivation préalable reste sans effet [SWS_Can_00231] [SWS_Can_00232] SWS CANDriver p. 61 SWS CANDriver p. 62.

Réveil depuis le bus CANCAN-ControllerCanEcuMCanIfUse Case: Controller in CAN_CS_SLEEPévénement de réveil depuis le busaltInterrupt-BetriebWakeup-ISRPolling-BetriebCan_MainFunction_Wakeup()Controller SLEEP -> STOPPED,ne pas traiter la L-PDU déclenchanteEcuM_CheckWakeup(source issue de CanWakeupSourceRef)vérifier la source de réveil via CanIfCan_CheckWakeup(Controller)optWakeup erkanntEcuM_SetWakeupEventE_OKValidierung gegen Fehlwakeupspar EcuM et CanIf, sans Can

Diagramme de séquence : réveil du bus depuis SLEEP, notification à EcuM et interrogation en retour via CanIf avec Can_CheckWakeup. Sources : [SWS_Can_00360], [SWS_Can_00228], SWS CANDriver p. 45, SWS CANDriver p. 35

Jeux de configuration, partitions et référence d'instance

Can_Init reçoit un pointeur vers Can_ConfigType. Cette structure spécifique au matériel contient des paramètres pour tous les contrôleurs ainsi que des références vers les configurations individuelles des contrôleurs [SWS_Can_00223] [SWS_Can_00413]. Le module prend en charge VARIANT-PRE-COMPILE et VARIANT-POST-BUILD SWS CANDriver p. 96. Dans l'exemple post-build, l'un des multiples jeux de configuration est sélectionné lors de l'appel de Can_Init EXP LayeredSoftwareArchitecture p. 120. Pour chaque contrôleur, CanController définit entre autres CanRxProcessing, CanTxProcessing, CanBusoffProcessing, CanWakeupProcessing et au moins une CanControllerBaudrateConfig SWS CANDriver p. 101.

Dans les systèmes multi-partitions, le module fonctionne dans chaque partition comme une instance indépendante. Un appel d'API n'a d'effet que dans sa propre partition [SWS_Can_CONSTR_00508]. Trois règles s'appliquent à l'affectation des partitions :

  • Les partitions dans CanControllerEcucPartitionRef doivent constituer un sous-ensemble des partitions dans CanEcucPartitionRef [SWS_Can_CONSTR_00509].
  • Le contrôleur et le canal d'émetteur-récepteur d'un canal de communication référencent la même partition [SWS_Can_CONSTR_00510].
  • Le pilote rejette les affectations non prises en charge [SWS_Can_00507].

Plusieurs modules Can dans un même calculateur (ECU) se distinguent par un préfixe de fonction modifié SWS CANDriver p. 51.

Comportement en cas d'erreur

Lorsque la détection des erreurs de développement (Development Error Detection) est activée, le pilote signale les erreurs de développement au DET. Les codes s'étendent de CAN_E_PARAM_POINTER (0x01) à CAN_E_INIT_FAILED (0x09) en passant par CAN_E_UNINIT (0x05) et CAN_E_TRANSITION (0x06) [SWS_Can_91019]. Après le retour du DET, la fonction retourne immédiatement ; les fonctions avec valeur de retour renvoient alors E_NOT_OK SWS CANDriver p. 48. Quelques exemples :

En tant qu'erreur d'exécution, CAN_E_DATALOST est défini pour les messages de réception perdus [SWS_Can_91020]. Il devrait être signalé via le Det_ReportRuntimeError requis [SWS_Can_00234]. Question Q-50225b25430c9660 (ouverte)

Si un contrôleur passe en Bus-off, il bascule de STARTED vers STOPPED. Le pilote n'effectue aucune reprise matérielle (hardware recovery). Il signale l'événement par interruption ou dans Can_MainFunction_BusOff via CanIf_ControllerBusOff [SWS_Can_00227] SWS CANDriver p. 35. La reprise est prise en charge par le CanSM, que CanIf informe avec CanSM_ControllerBusOff SWS CANInterface p. 138. Interprétation : le redémarrage devrait à nouveau s'effectuer via Can_SetControllerMode(CAN_CS_STARTED), qui recharge alors la configuration SWS CANDriver p. 59. Question Q-83e484ab9f8b1aac (ouverte)

Détection et signalement de bus-offCAN-ControllerCanBSW SchedulerCanIfCanSMController erreicht Bus-offaltInterrupt-BetriebBus-off-InterruptPolling-BetriebCan_MainFunction_BusOff()Statusbit lesenSTARTED -> STOPPED,aucune reprise matérielleCanIf_ControllerBusOff(ControllerId)CanSM_ControllerBusOffLa reprise après bus-off relève du CanSMUse Case: Neustart (Interpretation)Neustart anfordern (Interpretation)Can_SetControllerMode(Controller, CAN_CS_STARTED)Réinitialisation aveczuletzt verwendeter Konfiguration

Diagramme de séquence : détection et notification d'un Bus-off jusqu'au CanSM. Le redémarrage indiqué comme interprétation n'est pas explicitement documenté. Sources : [SWS_Can_00227], [SWS_Can_00234], SWS CANDriver p. 35, SWS CANInterface p. 138

Pour le diagnostic, Can_GetControllerErrorState fournit l'état d'erreur : ACTIVE, PASSIVE ou BUSOFF [SWS_Can_91004] [SWS_Can_91003]. Les compteurs d'erreurs Rx et Tx peuvent également être interrogés. Si le contrôleur ne les met pas à disposition, les fonctions renvoient E_NOT_OK. Comme le matériel gère les compteurs de manière asynchrone, les valeurs ne permettent pas de formuler des hypothèses fiables sur l'état du bus [SWS_Can_00511] [SWS_Can_00516] SWS CANDriver p. 67. Can_ErrorType décrit un sur-ensemble de types d'erreurs matérielles typiques, des erreurs de bits au verrouillage du bus (bus-lock) [SWS_Can_91021].

Pour faire face à un matériel qui ne répond pas, le pilote utilise un OsCounter pour les délais d'attente (timeouts) SWS CANDriver p. 23. Si un changement de mode ne prend pas effet dans CanTimeoutDuration, Can_SetControllerMode quitte la fonction au lieu de bloquer SWS CANDriver p. 33. Si un réveil du bus (bus-wakeup) survient pendant la transition vers le mode sommeil, Can_SetControllerMode(CAN_CS_STOPPED) renvoie E_NOT_OK SWS CANDriver p. 35.

Preuves détaillées supplémentaires

De nombreux passages du document proviennent de R23-11 à R25-11. Les exigences citées sont normatives pour R20-11. Le diagramme d'état SWS CANDriver p. 38 provient directement de R20-11.

Guide généré par IA sur la base des exigences et des passages documentaires fournis dans la charge utile pour R20-11. Les hypothèses sont identifiées comme des interprétations ; la spécification reste la référence faisant foi.

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

fonction Can_Init [SWS_Can_00223] 📄 PDF

void Can_Init (const Can_ConfigType* Config);

This function initializes the module.

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 8afbe47dbadd Provenance
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

La fonction synchrone et non réentrante Can_Init initialise l'ensemble du module pilote CAN ainsi que les unités matérielles associées conformément à la configuration transmise [SWS_Can_00223].

Utilisation et contexte d'appel

L'appel de Can_Init est obligatoirement effectué pendant la phase de démarrage du calculateur par l'ECU State Manager, avant même que toute autre fonction du pilote CAN ne puisse être appelée [SWS_Can_91012]. En tant que paramètre, la fonction prend via Config un pointeur vers la configuration du pilote (const Can_ConfigType*) et ne renvoie aucune valeur de retour [SWS_Can_00223].

Périmètre d'initialisation et transitions d'état

Dans le cadre de l'initialisation, la fonction configure tous les registres matériels requis et initialise tous les contrôleurs CAN AUTOSAR_SWS_CANDriver p. 33 :

  • initialisation des variables statiques et des drapeaux internes [SWS_Can_91012],
  • configuration des paramètres communs pour l'unité matérielle CAN complète [SWS_Can_91012],
  • paramètres spécifiques aux contrôleurs pour chaque contrôleur CAN individuel [SWS_Can_91012].

Par l'appel de la fonction, des transitions d'état du matériel CAN sont déclenchées AUTOSAR_SWS_CANDriver p. 10, où Can_Init effectue la configuration des registres afin de faire passer les contrôleurs dans l'état de base prévu [SWS_Can_91010] AUTOSAR_SWS_CANDriver p. 36.

Concurrence et restrictions

Comme Can_Init est spécifiée comme non réentrante, aucun appel parallèle ou répété ne doit avoir lieu pendant une initialisation en cours [SWS_Can_00223]. En outre, certains réglages globaux de l'unité matérielle ne peuvent être définis qu'au sein de Can_Init AUTOSAR_SWS_CANDriver p. 33.

Cette note d'utilisation a été générée de manière automatisée à partir des données de spécification d'AUTOSAR Classic R20-11.

Guide de l'implémenteur à venir (complexité I1)

fonction Can_DeInit [SWS_Can_91002] 📄 PDF

void Can_DeInit (void);

This function de - initializes the module.

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 982976925c7a Provenance Questions ouvertes (2)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

La fonction Can_DeInit sert à la désinitialisation du module pilote CAN ([SWS_Can_91002]). Elle possède la signature void Can_DeInit(void), ne prend aucun paramètre, ne renvoie aucune valeur et est exécutée de manière synchrone et non réentrante ([SWS_Can_91002]). L'interface est disponible via l'en-tête Can.h ([SWS_Can_91002]).

L'appel amorce une transition d'état contrôlée par logiciel (AUTOSAR_SWS_CANDriver p. 10 ; AUTOSAR_SWS_CANDriver p. 41). Lors de cette opération, Can_DeInit modifie l'état du module (AUTOSAR_SWS_CANDriver p. 33) et réinitialise tous les contrôleurs CAN (AUTOSAR_SWS_CANDriver p. 41).

Concurrence et restrictions

Pour l'exécution, des préconditions et des exigences de séquencement strictes s'appliquent concernant les états du matériel et du module :

Interaction

Le comportement en matière d'erreur et de transition reflète les flux assainis du pilote, selon lesquels les transitions d'état non valides sont interceptées de manière uniforme ([SWS_Can_00441]).

Ce texte a été généré par une IA sur la base de la spécification AUTOSAR CP R20-11.

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

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

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : a4b356b48b8a Provenance Questions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

La fonction Can_SetControllerMode (mise à disposition via Can.h avec le Service-ID 0x03) effectue des transitions d'état déclenchées par logiciel de la machine à états du contrôleur CAN ([SWS_Can_00230], AUTOSAR_SWS_CANDriver p. 35). Elle procède aux réglages de registres liés au matériel afin d'amener les transitions entre les états de base du contrôleur UNINIT, STOPPED, STARTED et SLEEP ([SWS_Can_91010], AUTOSAR_SWS_CANDriver §7.3 « CAN Controller State Machine »).

Utilisation et sémantique

L'appel s'effectue avec le paramètre Controller pour identifier le contrôleur CAN ainsi que Transition de type Can_ControllerStateType pour spécifier la transition d'état souhaitée ([SWS_Can_00230]). Le service est défini comme asynchrone et non réentrant (Non Reentrant) ([SWS_Can_00230]). Une valeur de retour de E_OK confirme que la demande a été acceptée ; E_NOT_OK indique que la demande a été rejetée et qu'une erreur de développement est présente ([SWS_Can_00230], [SWS_Can_00441]).

Déroulement et interaction

Après avoir appliqué la configuration des registres, Can_SetControllerMode se termine (AUTOSAR_SWS_CANDriver p. 38). Comme le module Can ne mémorise pas lui-même les changements d'état du matériel ([SWS_Can_91010]), la fonction cyclique Can_Mainfunction_Mode prend probablement en charge l'achèvement asynchrone ou la vérification de la transition amorcée par Can_SetControllerMode (AUTOSAR_SWS_CANDriver p. 38). Question Q-03edb1b665a1624b (ouverte)

Ce texte a été généré par une IA sur la base des données de spécification d'AUTOSAR R20-11.

Guide de l'implémenteur à venir (complexité I1)

fonction Can_DisableControllerInterrupts [SWS_Can_00231] 📄 PDF

void Can_DisableControllerInterrupts (uint8 Controller);

This function disables all interrupts for this CAN controller.

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 9d72b1d46d5d Provenance Questions ouvertes (2)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

La fonction synchrone et réentrante Can_DisableControllerInterrupts désactive toutes les interruptions pour un contrôleur CAN spécifié ([SWS_Can_00231]). La transmission s'effectue via le paramètre Controller sans valeur de retour ([SWS_Can_00231]).

En ce qui concerne le contexte d'appel et la concurrence, la fonction est conçue pour être réentrante et prend en charge des appels multiples (AUTOSAR_SWS_CANDriver §8.3 « Can_DisableControllerInterrupts »). Interprétation : un appel multiple devrait incrémenter un compteur d'imbrication interne, de sorte que les interruptions ne soient réactivées qu'après un nombre correspondant d'appels d'activation (AUTOSAR_SWS_CANDriver §8.3 « Can_DisableControllerInterrupts », AUTOSAR_SWS_CANDriver §8.3 « Can_DisableControllerInterrupts »). Question Q-61be56207aa92ee0 (ouverte)

Dans le domaine du traitement des erreurs, la spécification exige le déclenchement de l'erreur CAN_E_UNINIT si le module pilote n'est pas encore initialisé lors de l'appel (AUTOSAR_SWS_CANDriver §8.3 « Can_DisableControllerInterrupts »). De plus, la spécification exige le déclenchement d'une autre erreur (AUTOSAR_SWS_CANDriver §8.3 « Can_DisableControllerInterrupts ») ; ceci sert probablement à la vérification d'un identifiant de contrôleur non valide. Question (ouverte)

Dans l'interaction au sein du pilote CAN, l'appel sert à sécuriser les sections critiques associées au contrôleur pendant que celui-ci reste actif (AUTOSAR_SWS_CANDriver §7.5 « Interrupt handling »). Les assainissements formels et les modifications historiques de l'interface du pilote sont documentés dans les notes de version ([SWS_Can_00441]).

Ce texte a été créé par une IA et sert de note d'utilisation complémentaire à la spécification.

fonction Can_EnableControllerInterrupts [SWS_Can_00232] 📄 PDF

void Can_EnableControllerInterrupts (uint8 Controller);

This function enables all allowed interrupts.

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 374e141963cb Provenance Questions ouvertes (2)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

La fonction synchrone et réentrante Can_EnableControllerInterrupts réactive toutes les interruptions autorisées pour le contrôleur CAN indiqué via le paramètre Controller ([SWS_Can_00232]). Elle ne possède pas de valeur de retour et est mise à disposition via le fichier d'en-tête Can.h ([SWS_Can_00232]).

Concernant le déroulement, la fonction lit des drapeaux de contrôle logiciels (AUTOSAR_SWS_CANDriver p. 65). Si les interruptions du contrôleur ont été désactivées plusieurs fois auparavant, Can_EnableControllerInterrupts doit être appelée tout autant de fois avant l'activation effective (AUTOSAR_SWS_CANDriver p. 65). Interprétation : le pilote gère probablement les sections de verrouillage imbriquées au moyen de compteurs ou de drapeaux internes, de sorte que les interruptions matérielles ne soient réactivées qu'après compensation complète de tous les appels de désactivation. Question Q-6781f0fc9ad7d221 (ouverte)

Si la fonction est appelée avant que le pilote CAN n'ait été correctement initialisé, elle signale l'erreur CAN_E_UNINIT (AUTOSAR_SWS_CANDriver p. 66). Cela devrait être traité comme une Development Error dans le contexte du pilote ([SWS_Can_00441]). Question Q-efbbcf03a2589e4e (ouverte) À l'état non initialisé, la fonction n'effectue aucune action supplémentaire sur le contrôleur (AUTOSAR_SWS_CANDriver p. 66).

Cette note d'utilisation a été générée automatiquement sur la base de la spécification.

fonction Can_CheckWakeup [SWS_Can_00360] 📄 PDF

Std_ReturnType Can_CheckWakeup (uint8 Controller);

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

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 720a4fc64f2a Provenance
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

Utilisation et comportement

La fonction synchrone Can_CheckWakeup vérifie pour un contrôleur CAN donné si un événement de réveil a été détecté ([SWS_Can_00360], AUTOSAR_SWS_CANDriver p. 48, AUTOSAR_SWS_CANDriver p. 67). Elle est disponible via le fichier d'en-tête Can.h et possède le Service-ID 0x0b ([SWS_Can_00360]).

  • Paramètre : Controller (in) désigne l'identifiant du contrôleur CAN dont l'état doit être vérifié quant à un réveil ([SWS_Can_00360]).
  • Valeur de retour : renvoie Std_ReturnType. La valeur de retour E_OK signale que l'appel d'API a été accepté, tandis que E_NOT_OK indique le rejet ([SWS_Can_00360]).
  • Concurrence : la fonction est définie comme non réentrante (Non Reentrant) ([SWS_Can_00360]).

Configuration et traitement des erreurs

La disponibilité de la fonction est configurable au moment de la précompilation ; le service Can_CheckWakeup peut ainsi être intégré dans le code ou en être retiré (AUTOSAR_SWS_CANDriver p. 67, AUTOSAR_SWS_CANDriver p. 97). Si la fonction est appelée avant que le pilote CAN n'ait été initialisé, elle signale l'erreur CAN_E_UNINIT (AUTOSAR_SWS_CANDriver p. 67).

Interaction

L'appel de Can_CheckWakeup est généralement déclenché par l'interface CAN (AUTOSAR_SWS_CANDriver p. 48). En cas d'événement de réveil sur le bus, CanIf_CheckWakeup peut être appelée pendant l'exécution de EcuM_CheckWakeup (AUTOSAR_SWS_CANInterface §7.18.4.1 « Wake-up detection »). Conformément à [SWS_CANIF_00395], CanIf demande ici via Can_CheckWakeup() ou CanTrcv_CheckWakeup() quel composant matériel concret a déclenché le réveil du bus (AUTOSAR_SWS_CANInterface p. 55).

Cette note d'utilisation a été créée de manière automatisée et se base exclusivement sur les spécifications de la version AUTOSAR R20-11.

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

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

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

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : f2d4ad3f2f32 Provenance Questions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

Utilisation et sémantique

La fonction Can_Write est appelée de manière synchrone par le module CanIf pour transmettre un message CAN au pilote CAN (CanDrv) en vue de son émission ([SWS_Can_00233]). L'appelant transmet alors deux paramètres :

  • Hth : handle d'émission matériel, qui définit l'objet d'émission à utiliser et détermine implicitement le contrôleur, car les numéros de handle sont uniques au sein d'une unité matérielle ([SWS_Can_00233]).
  • PduInfo : pointeur vers une structure contenant les données utiles SDU, la longueur des données et l'identifiant CAN ([SWS_Can_00233]).

Avant l'envoi, la fonction vérifie l'objet d'émission matériel adressé (SWS_CANDriver p. 73) et sécurise le swPduHandle transmis (SWS_CANDriver p. 43). Via la valeur de retour de type Std_ReturnType (SRS_BSWGeneral §5.2.3.6 « Types and keywords »), E_OK signale l'acceptation de l'ordre, tandis que CAN_BUSY indique qu'aucun tampon d'émission matériel n'est disponible ([SWS_Can_00233], SWS_CANDriver p. 51).

Gestion des erreurs

Si une erreur de développement survient pendant l'exécution, la fonction renvoie E_NOT_OK ([SWS_Can_00233], [SWS_Can_00441]). Interprétation : les codes d'erreur DET spécifiques ne sont pas explicitement nommés dans l'extrait disponible ; des handles erronés ou des pointeurs non valides devraient toutefois conduire au renvoi de E_NOT_OK. Question Q-ca947a7e0e4fd7d6 (ouverte)

Concurrence et restrictions

Can_Write est spécifiée comme réentrante ou thread-safe ([SWS_Can_00233], SWS_CANDriver p. 49). Si un appel préemptif ne peut pas être exécuté de manière réentrante côté pilote, cela est également signalé à CanIf via la valeur de retour CAN_BUSY ([SWS_Can_00233]). L'appelant doit garantir que la mémoire de la PDU reste valide et inchangée jusqu'au retour de l'appel de fonction (SWS_CANDriver p. 45).

Interaction

Le type de PDU dont il s'agit est transmis lors de l'appel via [SWS_Can_00416] (SWS_CANDriver p. 51), le pilote prenant en charge la transmission jusqu'à la longueur maximale de PDU (SWS_CANDriver p. 52).

Cette note d'utilisation a été générée de manière automatisée sur la base des documents de spécification d'AUTOSAR R20-11.

fonction <LPDU_CalloutName> [SWS_Can_00443] 📄 PDF

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

-

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 3538baa0cf7b Provenance Questions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

Utilisation et contexte d'appel

L'interface de call-out configurable <LPDU_CalloutName> est appelée facultativement par le module CAN AUTOSAR à chaque réception d'une L-PDU (SWS_CANDriver §8.4.1 « Call-out function »). La déclaration de la fonction est fournie via le fichier d'en-tête Can_Externals.h ([SWS_Can_00443]). Le nom effectif de la fonction est configuré de manière spécifique au projet ([SWS_Can_00443]).

Le descripteur de réception matérielle (hardware receive handle) Hrh, l'identifiant CanId, la longueur des données CanDataLegth ainsi qu'un pointeur vers les données utiles CanSduPtr sont transmis comme paramètres d'entrée ([SWS_Can_00443]).

Filtrage et valeur de retour

La fonction renvoie une valeur boolean. Si le call-out renvoie false, la L-PDU reçue ne doit pas être traitée plus avant ([SWS_Can_00444]). Interprétation : si l'appel renvoie true, le transfert régulier de la L-PDU vers les couches supérieures devrait avoir lieu. Question Q-e96e75e93881c3af (ouverte)

Concurrence et restrictions

La fonction est pourvue de l'identifiant de service 0x20 et est spécifiée comme asynchrone (Asynchronous) et non réentrante (Non Reentrant) ([SWS_Can_00443]). N'étant pas réentrante, les appels parallèles dans le même contexte ne sont pas autorisés.

Ce texte a été généré par une IA et sert de guide d'orientation. Les exigences de la spécification AUTOSAR font foi.

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

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : a6cd22a9e2b1 Provenance Questions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

La fonction Can_MainFunction_Write effectue l'interrogation cyclique (polling) des confirmations d'émission (TX-Confirmation) pour autant que le paramètre CAN_TX_PROCESSING soit configuré sur POLLING [SWS_Can_00225], AUTOSAR SWS CAN Driver §7 « Scheduled functions ». Elle est sans paramètre (void Can_MainFunction_Write(void)), possède le Service-ID 0x01 et est mise à disposition pour le planificateur via le fichier d'en-tête SchM_Can.h [SWS_Can_00225]. Des commutateurs de configuration permettent d'activer ou de désactiver la fonction pour le traitement de la transmission de PDU AUTOSAR SWS CAN Driver §10 « CanMainFunctionWrite ».

Si aucune interrogation (polling) n'est utilisée dans le système pour les opérations d'émission, Can_MainFunction_Write doit être implémentée sous forme de define vide selon la spécification AUTOSAR SWS CAN Driver §7 « Scheduled functions ». Cela devrait éviter une surcharge inutile du planificateur dans les systèmes purement pilotés par interruptions. Question Q-2152a35397130945 (ouverte)

En interaction avec Can_MainFunction_Read et Can_MainFunction_BusOff, la routine constitue l'interface cyclique du pilote avec la SchM AUTOSAR SWS CAN Driver §7 « Scheduled functions ». Le traitement des confirmations se déroule, selon le mode, directement au niveau de la ressource matérielle ou dans le contexte de Can_MainFunction_Write AUTOSAR SWS CAN Driver §7 « Hardware Resources ». L'appel concret et l'affectation dépendent des éléments respectivement référencés AUTOSAR SWS CAN Driver §10 « CanMainFunctionWrite », AUTOSAR SWS CAN Driver §10 « Call Context », assistés par un traitement Tx associé au contrôleur [SWS_Can_00441].

Cette note d'utilisation a été générée de manière automatisée sur la base de la spécification AUTOSAR R20-11.

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

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 2c7a6a6247b4 Provenance Questions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

La fonction Can_MainFunction_Read sert à l'interrogation cyclique (polling) des messages de réception CAN ([SWS_Can_00226]). Elle possède la signature void Can_MainFunction_Read (void) avec le Service-ID 0x08 et est mise à disposition pour le contrôle d'exécution via le fichier d'en-tête SchM_Can.h ([SWS_Can_00226]).

Utilisation et configuration

La fonction effectue l'interrogation (polling) des indications RX lorsque le paramètre de configuration CAN_RX_PROCESSING est réglé sur POLLING ([SWS_Can_00226]). Dans le système, ce traitement peut être configuré par contrôleur ([SWS_Can_00441]). Si aucun polling n'est utilisé dans le pilote CAN, Can_MainFunction_Read peut être définie comme une macro vide (AUTOSAR_SWS_CANDriver p. 77).

Concurrence et restrictions

L'appel est effectué périodiquement dans le contexte du planificateur conformément à la période de déclenchement paramétrée (AUTOSAR_SWS_CANDriver p. 22). Des conditions strictes s'appliquent à l'exécution :

Interprétation : l'intervalle d'appel configuré de la tâche devrait devoir être dimensionné de sorte qu'une phase de traitement soit toujours terminée avant le début du cycle suivant, car la réentrance n'est pas autorisée (AUTOSAR_SWS_CANDriver p. 47). Question Q-1f2fa9db14970b12 (ouverte)

Ce texte a été généré par une IA sur la base de la spécification AUTOSAR R20-11.

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

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : d6a62aee0c17 Provenance Questions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

La fonction principale planifiée Can_MainFunction_BusOff sert à l'interrogation cyclique (polling) des événements de Bus-Off des contrôleurs CAN, pour autant que ceux-ci soient statiquement configurés comme devant être scrutés [SWS_Can_00227], [SWS_Can_00109]. Elle possède la signature void Can_MainFunction_BusOff(void), ne prend aucun paramètre, ne renvoie aucune valeur et est mise à disposition pour le contrôle d'exécution via l'en-tête SchM_Can.h [SWS_Can_00227].

Utilisation et interaction

Les événements matériels peuvent être captés dans le pilote CAN soit par interruption, soit par scrutation (polling) des drapeaux d'état correspondants, la configuration de l'interrogation étant dépendante du matériel [SWS_Can_00099]. Le pilote peut également être configuré de manière à renoncer complètement aux interruptions [SWS_Can_00007]. Si aucune scrutation n'est utilisée à l'échelle du système, le module Can est autorisé à implémenter la fonction sous forme de macro vide [SWS_Can_00183].

Si un événement de Bus-Off est détecté via des bits d'état dans Can_MainFunction_BusOff, le module procède aux réglages de registres nécessaires – par exemple pour éviter une reprise matérielle automatique SWS_CANDriver §7.3 « CAN Controller State Machine », [SWS_Can_91010]. Ensuite, le module notifie la couche supérieure CanIf via le rappel correspondant, au sein duquel s'effectue le changement d'état logiciel du contrôleur SWS_CANDriver §7.3 « CAN Controller State Machine ».

Contexte d'appel et restrictions

En mode scruté (polling), le contexte d'appel de la notification par callback n'est pas l'ISR, mais la tâche exécutante de Can_MainFunction_BusOff ; néanmoins, toutes les fonctions de rappel doivent être implémentées comme si elles étaient appelées depuis le contexte ISR SWS_CANDriver §7.9 « Notification concept ». Concernant la réentrance, le payload ne contient aucune indication explicite ; la fonction est probablement non réentrante car elle accède à des registres et états globaux du contrôleur. Question Q-38fcd72c40ce3e66 (ouverte)

Cette note d'utilisation a été générée par une IA et se base exclusivement sur les extraits de spécification de la version AUTOSAR R20-11.

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

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : ce643213c50c Provenance
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

La fonction principale Can_MainFunction_Wakeup effectue l'interrogation cyclique (polling) des événements de réveil statiquement configurés comme devant être scrutés ([SWS_Can_00228]). La fonction possède la signature void Can_MainFunction_Wakeup(void), ne prend aucun paramètre, ne renvoie aucune valeur et est mise à disposition pour le Schedule Manager via l'en-tête SchM_Can.h (AUTOSAR_SWS_CANDriver p. 79). La période d'exécution de la fonction est configurée en secondes (AUTOSAR_SWS_CANDriver p. 92).

Dans le cadre de la machine à états du contrôleur CAN (SWS_CANDriver §7.3 « CAN Controller State Machine »), des événements de réveil matériel externes peuvent être signalés, au lieu d'interruptions, par un bit d'état interrogé dans Can_MainFunction_Wakeup ([SWS_Can_91010]). De plus, lors des transitions d'état, la fonction scrute un drapeau correspondant du registre d'état CAN jusqu'à ce que celui-ci signale l'effectivité du changement ([SWS_Can_00370]). Une fois le changement d'état réussi, le pilote CAN signale le nouvel état à l'interface CAN à l'aide de la fonction de rappel CanIf_ControllerModeIndication, en référence à l'abstrait CanIf ControllerId ([SWS_Can_00370]).

Concernant la configuration et l'utilisation des ressources, l'API Can_MainFunction_Wakeup() peut être activée ou désactivée pour la gestion des événements de réveil (AUTOSAR_SWS_CANDriver p. 97). Si aucun polling n'est utilisé dans le calculateur pour les événements de réveil, Can_MainFunction_Wakeup peut être définie sous la forme d'une macro vide (AUTOSAR_SWS_CANDriver p. 79).

Cette note d'utilisation a été générée de manière automatisée sur la base de la spécification AUTOSAR CP R20-11.

fonction Can_MainFunction_Mode [SWS_Can_00368] 📄 PDF

void Can_MainFunction_Mode (void);

This function performs the polling of CAN controller mode transitions.

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : feee99301166 Provenance Questions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

Utilisation et fonctionnement

La fonction principale planifiée Can_MainFunction_Mode ([SWS_Can_00368]) effectue la scrutation (polling) des transitions d'état des contrôleurs CAN. Elle ne possède ni paramètres de transmission ni valeur de retour (void Can_MainFunction_Mode(void), Service-ID 0x0c) et est déclarée via l'en-tête SchM_Can.h SWS_CANDriver §8.5.1.5 « Can_MainFunction_Mode ».

La fonction est appelée cycliquement en continu (AUTOSAR_SWS_CANInterface p. 143). Elle vérifie sur le matériel si le mode d'un contrôleur CAN a changé. En cas de changement détecté, l'interface CAN est notifiée via l'appel de CanIf_ControllerModeIndication(Controller, ControllerMode).

Surveillance de mode asynchrone

Si une modification de mode a été préalablement demandée via Can_SetControllerMode() et que cet appel revient avec succès à CanIf, Can_MainFunction_Mode détecte la transition d'état accomplie du matériel du contrôleur. Elle informe ensuite CanIf de manière asynchrone au moyen de CanIf_ControllerModeIndication du nouvel état, tel que CAN_CS_STARTED AUTOSAR_SWS_CANInterface p. 144.

Contexte d'appel et conditions limites

En raison de sa mise à disposition via SchM_Can.h et de sa définition en tant que Scheduled Function, l'appel périodique devrait être effectué par le planificateur BSW. Question Q-42edbc2aa591e8d7 (ouverte) Aucun code d'erreur spécifique ni étape de développement n'est défini dans le payload pour cette fonction.

Ce texte a été créé par une IA sur la base des spécifications AUTOSAR.

Guide de l'implémenteur à venir (complexité 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.

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 0cb922d28e06 Provenance Questions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

Le type énuméré Can_ErrorStateType issu de Can_GeneralTypes.h décrit les états d’erreur et de fonctionnement d’un contrôleur CAN [SWS_Can_91003]. Il modélise le comportement du contrôleur sur le bus CAN à travers trois états SWS_CANDriver §8.2.7 « Can_ErrorStateType » :

  • CAN_ERRORSTATE_ACTIVE : le contrôleur CAN participe pleinement à la communication sur le bus [SWS_Can_91003].
  • CAN_ERRORSTATE_PASSIVE : le contrôleur CAN participe à la communication, mais n’émet plus de trames d’erreur actives (Error Frames) [SWS_Can_91003].
  • CAN_ERRORSTATE_BUSOFF : le contrôleur CAN est isolé du bus à la suite d’erreurs de transmission critiques et ne participe plus à la communication [SWS_Can_91003].

À l’exécution, l’état est interrogé via le service de pilote synchrone Can_GetControllerErrorState [SWS_Can_91004]. Son paramètre de sortie ErrorStatePtr reçoit la valeur déterminée. La même signature est également utilisée par la fonction de niveau supérieur CanIf_GetControllerErrorState dans l’interface CAN AUTOSAR_SWS_CANInterface p. 78 « CanIf_GetControllerErrorState ». En ce qui concerne la concurrence, Can_GetControllerErrorState est spécifié comme non réentrant pour un même ControllerId [SWS_Can_91004].

En cas d’erreur, Can_GetControllerErrorState fournit la valeur de retour E_NOT_OK, et E_OK en cas d’interrogation réussie [SWS_Can_91004]. Si la détection des erreurs de développement (DET) est activée, un appel avant l’initialisation du pilote entraîne l’erreur CAN_E_UNINIT [SWS_Can_91005]. Un ControllerId non valide déclenche l’erreur de développement CAN_E_PARAM_CONTROLLER [SWS_Can_91006], et le passage d’un pointeur nul pour ErrorStatePtr est rejeté avec une erreur de développement [SWS_Can_91007].

Interprétation : l’appelant devrait devoir allouer la zone mémoire pour ErrorStatePtr sous sa propre responsabilité, car l’interface traite le pointeur comme un pur paramètre de sortie et exclut les pointeurs nuls par le biais d’une erreur de développement. Question Q-5c907c21bcb50893 (ouverte)

Ce texte a été généré par une IA sur la base de la spécification AUTOSAR R20-11.

Guide de l'implémenteur à venir (complexité I1)

type Can_ControllerStateType [SWS_Can_91013] 📄 PDF

States that are used by the several Controller Mode functions.

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 5eb69ce0444e Provenance
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

Le type énuméré Can_ControllerStateType définit les états de fonctionnement fondamentaux d’un contrôleur CAN : CAN_CS_UNINIT, CAN_CS_STARTED, CAN_CS_STOPPED et CAN_CS_SLEEP [SWS_Can_91013]. Ce type est utilisé de manière intermodulaire pour la gestion logicielle des états de la machine à états du contrôleur CAN [SWS_Can_00017].

Les valeurs sont utilisées dans les contextes suivants :

Concernant la concurrence et le traitement des erreurs : les fonctions de pilote Can_SetControllerMode et Can_GetControllerMode sont non réentrantes [SWS_Can_00230], [SWS_Can_91014]. En cas d’appel de Can_GetControllerMode avant l’initialisation du pilote, l’erreur de développement CAN_E_UNINIT est signalée et E_NOT_OK est renvoyé [SWS_Can_91016]. La fonction de rappel CanSM_ControllerModeIndication est réentrante pour différents contrôleurs et signale un identifiant de contrôleur non configuré avec CANSM_E_PARAM_CONTROLLER au DET [SWS_CanSM_00396], [SWS_CanSM_00397].

Cette note d’utilisation est basée sur les dispositions des spécifications du pilote CAN, de l’interface CAN et du gestionnaire d’état CAN dans AUTOSAR Classic R20-11.

Guide de l'implémenteur à venir (complexité 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.

GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : e538be0a65be Provenance Questions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

Le type d'énumération Can_ErrorType définit un sur-ensemble standardisé de causes d'erreurs CAN qu'un matériel CAN typique peut détecter et signaler aux couches supérieures [SWS_Can_91021]. Il est mis à disposition via le fichier d'en-tête Can_GeneralTypes.h SWS_CANDriver §8.2.9 « Can_ErrorType ».

L'énumération étant conçue comme un sur-ensemble (superset), chaque contrôleur CAN ne prend pas nécessairement en charge l'ensemble des valeurs spécifiées [SWS_Can_91021]. Les états d'erreur définis comprennent notamment :

  • erreurs de bit lors de la surveillance du bus (CAN_ERROR_BIT_MONITORING1, CAN_ERROR_BIT_MONITORING0 ou synthétiquement CAN_ERROR_BIT),
  • erreurs d'acquittement (CAN_ERROR_CHECK_ACK_FAILED, CAN_ERROR_ACK_DELIMITER),
  • perte d'arbitrage de l'émetteur (CAN_ERROR_ARBITRATION_LOST),
  • états de surcharge dus à des mémoires tampons de réception pleines (CAN_ERROR_OVERLOAD),
  • violations de format et de bourrage de bits (bit stuffing) (CAN_ERROR_CHECK_FORM_FAILED, CAN_ERROR_CHECK_STUFFING_FAILED),
  • erreurs CRC (CAN_ERROR_CHECK_CRC_FAILED) ainsi que
  • un blocage permanent du bus à un niveau dominant (CAN_ERROR_BUS_LOCK) SWS_CANDriver §8.2.9 « Can_ErrorType ».

Dans l'interaction des modules BSW, le type sert de paramètre à la fonction de rappel CanIf_ErrorNotification pour la transmission des erreurs de contrôleur à l'interface CAN AUTOSAR_SWS_CANInterface §8.x « CanIf_ErrorNotification ». La valeur transmise devrait correspondre à l'état d'erreur constaté par le matériel sous-jacent AUTOSAR_SWS_CANDriver §7.x « Error Notification ». Question Q-d23c45dd3b23ec71 (ouverte)

Ce texte a été généré par une IA et sert à l'orientation technique.

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

Initialisation et état

Can_DeInit fonction

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 fonction

This function initializes the module.

void Can_Init (const Can_ConfigType* Config);

Services

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 fonction

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 et interfaces attendues

-

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

Cyclique

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);

Types

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.