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
fonction Can_Init [SWS_Can_00223] 📄 PDF
void Can_Init (const Can_ConfigType* Config);
This function initializes the module.
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_GetVersionInfo [SWS_Can_00224] 📄 PDF
void Can_GetVersionInfo (Std_VersionInfoType* versioninfo);
This function returns the version information of this module.
fonction Can_DeInit [SWS_Can_91002] 📄 PDF
void Can_DeInit (void);
This function de - initializes the module.
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 :
- L'appelant doit s'assurer qu'aucun contrôleur CAN ne se trouve dans un état non autorisé (AUTOSAR_SWS_CANDriver p. 61) ; les opérations de communication actives doivent probablement être terminées au préalable. Question Q-311343fa42add3a3 (ouverte)
- Si le module CAN ne se trouve pas dans l'état initial requis lors de l'appel (AUTOSAR_SWS_CANDriver p. 41), la fonction signale l'erreur
CAN_E_TRANSITION(AUTOSAR_SWS_CANDriver p. 61). - De même, l'erreur
CAN_E_TRANSITIONest déclenchée si un contrôleur CAN demeure dans un état empêchant la désinitialisation (AUTOSAR_SWS_CANDriver p. 61). Interprétation : le pilote devrait présupposer un état arrêté de tous les contrôleurs avant la transition. Question Q-435095949dafba5c (ouverte)
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.
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.
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.
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.
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 retourE_OKsignale que l'appel d'API a été accepté, tandis queE_NOT_OKindique 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_GetControllerErrorState [SWS_Can_91004] 📄 PDF
Std_ReturnType Can_GetControllerErrorState (uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr);
This service obtains the error state of the CAN controller.
fonction 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.
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.
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);
-
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.
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.
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 :
- La fonction ne doit pas être interrompue par elle-même (AUTOSAR_SWS_CANDriver p. 47).
- De manière générale, les fonctions principales CAN telles que
Can_MainFunction_Readne doivent pas être interrompues (AUTOSAR_SWS_CANDriver p. 49) afin de garantir un accès cohérent aux ressources du pilote et du matériel en mode polling (AUTOSAR_SWS_CANDriver p. 46).
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'.
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'.
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.
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.
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.
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 :
- Demande d’état : dans
Can_SetControllerMode, le type sert de valeur de transition (paramètreTransition) pour la demande asynchrone d’un nouvel état de fonctionnement [SWS_Can_00230] ;CanIf_SetControllerModeexiste en correspondance AUTOSAR_SWS_CANInterface §- « CanIf_SetControllerMode ». Le pilote transmet la demande au matériel du contrôleur, le changement d’état effectif prenant effet immédiatement ou après quelques millisecondes AUTOSAR_SWS_CANInterface §- « Can_SetControllerMode ». Une transition versCAN_CS_STARTEDdéclenche en outre une réinitialisation du contrôleur [SWS_Can_00384]. - Interrogation d’état : via
Can_GetControllerMode, l’état actuel peut être interrogé de manière synchrone par l’intermédiaire du pointeur de sortieControllerModePtr[SWS_Can_91014], [SWS_Can_91015] (de manière analogue dansCanIf_GetControllerModeAUTOSAR_SWS_CANInterface §- « CanIf_GetControllerMode »). - Indication d’état : une fois le changement effectué, des rappels tels que
CanSM_ControllerModeIndication[SWS_CanSM_00396],CanIf_ControllerModeIndicationAUTOSAR_SWS_CANInterface §- « CanIf_ControllerModeIndication » ainsi que des rappels utilisateur AUTOSAR_SWS_CANInterface §- « User_ControllerModeIndication » notifient de manière synchrone les couches supérieures du nouveau mode du contrôleur.
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.
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_MONITORING0ou synthétiquementCAN_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
gemini-3.8-flash-low· 2026-10-13 · Original allemand