DEENESPTFRRUARHIKOZHNL

CAN Driver (Can)

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

Guía del móduloGENERADO POR IA

Controla el hardware del controlador CAN y gestiona la transmisión, la recepción y los cambios de estado hacia el CAN Interface.
GENERADO POR IA no revisado Modelo: claude-opus-5-5 · Esfuerzo: high · Temperatura: no controlable · Prompt: b6833c934a77 Procedencia Preguntas abiertas (2)
Ancla causal: R20-11 Válido desde R20-11 Sintetizado para esta versión de especificación.
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

Controla el hardware del controlador CAN y gestiona la transmisión, la recepción y los cambios de estado hacia el CAN Interface.

El controlador CAN controla los controladores CAN de una Hardware-Unit y constituye la capa de hardware situada bajo el CAN Interface. A este le notifica la recepción, la confirmación de transmisión, el bus-off y los cambios de modo mediante callback [SWS_Can_00234]. Según Can_Init, todos los controladores están en STOPPED. Cada controlador se inicia de forma individual y asíncrona con Can_SetControllerMode; el éxito se notifica a posteriori [SWS_Can_00230]. La transmisión se realiza con Can_Write a través de handles de transmisión de hardware. Si no hay ningún objeto de transmisión libre, el controlador devuelve CAN_BUSY y CanIf almacena en búfer la solicitud.

El controlador CAN encapsula cualquier acceso a los controladores CAN de una Hardware-Unit. Sirve al CAN Interface como único usuario y notifica la recepción, la confirmación de transmisión, el bus-off y los cambios de modo mediante callbacks predefinidos de CanIf [SWS_Can_00234]. El ECU State Manager lo inicializa con Can_Init y un Can_ConfigType específico del hardware [SWS_Can_00223]. A continuación, el controlador se encuentra en CAN_READY y todos los controladores en 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 Deseos de modo CanIf->CanSM Mensajes de modo y 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

Diagrama de contexto: Integración de Can entre EcuM, BSW Scheduler, CanIf, DET, Os y el hardware del controlador. Fuentes: [SWS_Can_00234], SWS CANDriver p. 78

Cada controlador pasa por los estados UNINIT, STOPPED, STARTED y SLEEP [SWS_Can_91013]. Se inicia de forma individual y asíncrona con Can_SetControllerMode: E_OK solo significa «aceptado» [SWS_Can_00230]. El controlador notifica posteriormente el estado alcanzado mediante CanIf_ControllerModeIndication SWS CANDriver p. 33. Bus-off lleva el controlador a STOPPED sin recuperación por hardware; un despertar del bus lo lleva de SLEEP a 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) o Bus-off (hardware) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) o Wakeup desde el bus SLEEP->SLEEP Can_SetBaudrate

Diagrama de estados: Transiciones de un controlador mediante llamadas de software, así como eventos de bus-off y de despertar. Fuentes: [SWS_Can_91010], SWS CANDriver p. 38

La transmisión se realiza con Can_Write(Hth, PduInfo). Los dos bits superiores de Can_IdType distinguen CAN 2.0 y CAN FD, así como ID estándar y extendido [SWS_Can_00233] [SWS_Can_00416]. Si no hay ningún objeto de transmisión libre, el controlador devuelve CAN_BUSY y CanIf almacena en búfer la solicitud [SWS_Can_00039] SWS CANDriver p. 47. Los eventos se detectan por interrupción o mediante sondeo. Para el sondeo existen funciones principales cíclicas SWS CANDriver p. 41:

  • Write y Read: confirmaciones de transmisión y recepción
  • BusOff y Wakeup: eventos de bus-off y de despertar
  • Mode: transiciones de modo

Las funciones principales están definidas de [SWS_Can_00225] a [SWS_Can_00228] y en [SWS_Can_00368].

En caso de error, el controlador notifica errores de desarrollo como CAN_E_UNINIT o CAN_E_TRANSITION al DET [SWS_Can_91019]. Las funciones con valor de retorno entregan entonces E_NOT_OK SWS CANDriver p. 48. La recuperación de bus-off la asume CanSM a través de CanIf. Es de suponer que el reinicio se realice nuevamente mediante Can_SetControllerMode(CAN_CS_STARTED) SWS CANInterface p. 138. El estado y los contadores de error pueden consultarse; sin embargo, los valores de los contadores no se consideran un estado fiable del bus [SWS_Can_91004] [SWS_Can_00516]. Pregunta (abierta)

Rol: controlador cercano al hardware entre CanIf y los controladores CAN

El controlador CAN encapsula cualquier acceso al hardware CAN de una Hardware-Unit. Los cambios de estado de los controladores solo tienen lugar mediante Can_Init, Can_SetBaudrate y Can_SetControllerMode. El controlador no almacena por sí mismo los cambios de estado SWS CANDriver p. 30. Su interlocutor hacia arriba es el CAN Interface. Todos los callbacks a los que llama el controlador están implementados en CanIf y no son configurables: CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff y CanIf_ControllerModeIndication. Adicionalmente, requiere Det_ReportRuntimeError y el servicio de Os GetCounterValue [SWS_Can_00234] SWS CANDriver p. 73. Los tipos importados proceden, entre otros, de ComStack_Types, EcuM y Os [SWS_Can_00222].

El ECU State Manager inicializa el controlador mediante Can_Init. Según la nota de implementación, llama a la función a lo sumo una vez durante el tiempo de ejecución [SWS_Can_00223] SWS CANDriver p. 29. El BSW Scheduler llama directamente a las funciones principales cíclicas. Estas no tienen parámetros ni valor de retorno y no son reentrantes; no se prescribe ningún orden de ejecución SWS CANDriver p. 78. Hacia abajo, el controlador no ofrece ningún callback. Solo se permite acceder a controladores CAN externos a través de API síncronas de MCAL como 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 Deseos de modo CanIf->CanSM Mensajes de modo y 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

Diagrama de contexto: Can es inicializado por EcuM, llamado periódicamente por el BSW Scheduler y utilizado por CanIf. Envía notificaciones a CanIf, EcuM y DET y utiliza Os para los tiempos de espera. Fuentes: [SWS_Can_00234], SWS CANDriver p. 45, SWS CANDriver p. 78

Desde el encendido hasta STARTED: estados del controlador y del driver

El driver en su conjunto solo conoce los estados CAN_UNINIT y CAN_READY. Tras el reinicio, se encuentra en CAN_UNINIT. Can_Init inicializa todos los controladores según la configuración y pasa a continuación a CAN_READY. Can_DeInit establece el estado del módulo en CAN_UNINIT antes de desinicializar los controladores [SWS_Can_00223] [SWS_Can_91002] SWS CANDriver p. 29.

Al margen de esto, cada controlador tiene cuatro estados de Can_ControllerStateType: CAN_CS_UNINIT, CAN_CS_STOPPED, CAN_CS_STARTED y CAN_CS_SLEEP [SWS_Can_91013].

  • En STOPPED, el controlador está inicializado, pero no participa en el bus y no envía tramas de error ni acuses de recibo.
  • STARTED es el funcionamiento normal.
  • SLEEP se diferencia de STOPPED solo en el caso de hardware con modo de reposo SWS CANDriver p. 31.

Can_Init pasa todos los controladores a STOPPED SWS CANDriver p. 32. Can_DeInit los lleva desde STOPPED o SLEEP a UNINIT [SWS_Can_91010] SWS CANDriver p. 38. Desde STARTED no existe ningún camino directo hacia 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) o Bus-off (hardware) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) o Wakeup desde el bus SLEEP->SLEEP Can_SetBaudrate

Diagrama de estados: ciclo de vida de un controlador CAN. El software y los eventos de bus desencadenan transiciones; el regreso a UNINIT solo lo lleva a cabo Can_DeInit desde STOPPED o SLEEP. Fuentes: [SWS_Can_91013], [SWS_Can_91010], SWS CANDriver p. 38, SWS CANDriver p. 34, SWS CANDriver p. 35

Cada controlador se inicia individualmente con Can_SetControllerMode(CAN_CS_STARTED) SWS CANDriver p. 29. El servicio opera de forma asíncrona: E_OK solo significa que la solicitud ha sido aceptada [SWS_Can_00230]. En cada transición a STARTED, el controlador se reinicializa, concretamente con la última configuración utilizada por Can_Init o Can_SetBaudrate SWS CANDriver p. 59. El hardware puede aplicar el cambio de manera retardada. Por ello, el controlador de dispositivo no notifica el estado alcanzado hasta después a través de CanIf_ControllerModeIndication; una capa superior supervisa si se alcanza el objetivo SWS CANDriver p. 33. Can_MainFunction_Mode detecta las transiciones de modo consultadas por sondeo [SWS_Can_00368]. Can_GetControllerMode consulta el modo actual de manera síncrona [SWS_Can_91014].

Inicialización e inicio de un controlador CANEcuMCanIf-Nutzer (z. B. CanSM)CanIfCanBSW SchedulerCAN-ControllerUse Case: InitialisierungCan_Init(Config)configurar todos los controladoresController: CAN_CS_STOPPEDModul: CAN_READYUse Case: Controller einzeln startenCanIf_SetControllerMode(STARTED)Can_SetControllerMode(Controller, CAN_CS_STARTED)Neuinitialisierung,Start anfordernE_OK (Anforderung angenommen)E_OKloophasta que la transición sea efectivaCan_MainFunction_Mode()Statusflag lesenCanIf_ControllerModeIndication(ControllerId, CAN_CS_STARTED)<User_ControllerModeIndication>

Diagrama de secuencia: inicialización por parte de EcuM e inicio asíncrono de un controlador. El mensaje de éxito solo tiene lugar tras el sondeo en Can_MainFunction_Mode. Fuentes: [SWS_Can_00230], [SWS_Can_00368], SWS CANInterface p. 156, SWS CANDriver p. 29

Transmisión mediante Hardware Transmit Handles

CanIf transfiere las órdenes de transmisión con Can_Write(Hth, PduInfo). El Hth designa el objeto de transmisión de hardware y, por tanto, también el controlador, ya que los números HTH son unívocos dentro de una unidad de hardware [SWS_Can_00233]. Can_HwHandleType abarca por defecto 0..0x0FF y, en caso de haber más de 255 objetos de hardware, el rango ampliado de hasta 0xFFFF [SWS_Can_00429]. Can_PduType agrupa los campos swPduHandle, length, id y sdu [SWS_Can_00415].

En Can_IdType, los dos bits más significativos codifican el tipo de trama [SWS_Can_00416]:

  • 00: CAN con ID estándar
  • 01: CAN FD con ID estándar
  • 10: CAN con ID extendido
  • 11: CAN FD con ID extendido

De este modo, se pueden mezclar tramas CAN 2.0 y CAN FD a nivel de trama, siempre que esté activa una configuración de velocidad en baudios de FD para el controlador SWS CANDriver p. 49 SWS CANInterface p. 71.

Can_Write debe ser seguro para subprocesos (thread-safe) porque CanIf_Transmit es reentrante. El controlador de dispositivo devuelve CAN_BUSY si no hay ningún objeto de transmisión libre o si una llamada con derecho preferente no se puede ejecutar de forma reentrante [SWS_Can_00039] SWS CANDriver p. 47. En tal caso, CanIf almacena en búfer la solicitud. Si queda libre un objeto, CanIf vuelve a llamar a Can_Write en orden de prioridad SWS CANInterface p. 48. El controlador de dispositivo retiene el swPduHandle hasta la correspondiente CanIf_TxConfirmation SWS CANDriver p. 35. Para evitar la inversión de prioridades, se puede configurar de forma estática la transmisión multiplexada; en ella, varios objetos de hardware forman un HTH SWS CANDriver p. 40.

Envío de una L-PDU con confirmaciónCanIfCanCAN-ControllerBSW SchedulerCan_Write(Hth, PduInfo)altHardware-Sendeobjekt freiswPduHandle je HTH merkenL-PDU ins Hardwareobjekt,Disparar envíoE_OKningún objeto libre o no ejecutable de forma reentranteCAN_BUSYAlmacenar L-PDU en búfer en CanIfTxBufferTrama enviada y confirmada por el busaltInterrupt-BetriebTX-InterruptPolling-BetriebCan_MainFunction_Write()comprobar confirmaciones pendientesCanIf_TxConfirmation(swPduHandle)optL-PDU almacenada en búfer para este HTHCan_Write(Hth, L-PDU de mayor prioridad)

Diagrama de secuencia: orden de transmisión con las rutas E_OK y CAN_BUSY, seguida de la confirmación mediante interrupción o sondeo. A continuación, CanIf puede enviar una L-PDU almacenada en búfer. Fuentes: [SWS_Can_00233], [SWS_Can_00039], SWS CANInterface p. 142, SWS CANInterface p. 48

Recepción y funciones principales periódicas

En la recepción, el controlador de dispositivo llama a CanIf_RxIndication. Pasa el ID, el objeto de hardware y el ControllerId abstracto de CanIf, así como la longitud y el puntero a la L-SDU. En el caso de tramas extendidas, establece el MSB del ID para que CanIf reconozca el tipo de trama SWS CANDriver p. 43. Opcionalmente, se intercala antes un callout de L-PDU configurable <LPDU_CalloutName> [SWS_Can_00443]. Si este devuelve false, según el pasaje del documento (R25-11), la L-PDU no se sigue procesando SWS CANDriver p. 77.

Los eventos se detectan mediante interrupciones o mediante el sondeo de flags de estado. Debe ser posible configurar un funcionamiento exclusivo por sondeo sin ninguna interrupción. En el sondeo, las funciones principales llaman a las mismas devoluciones de llamada, solo que desde el contexto de la tarea en lugar del de la ISR SWS CANDriver p. 41. Cada función principal sondea un tipo de evento:

Las descripciones de Read y Write de R20-11 solo mencionan el caso POLLING [SWS_Can_00225] [SWS_Can_00226]. Los pasajes del documento de versiones posteriores añaden MIXED; entonces solo se sondean los objetos con CanHardwareObjectUsesPolling = TRUE SWS CANDriver p. 81 SWS CANDriver p. 79. Los requisitos de R20-11 no sustentan esta ampliación. Si se configuran varios períodos mediante CanMainFunctionRWPeriods, los nombres de las funciones reciben el sufijo _<ShortName> [SWS_Can_00441] SWS CANDriver p. 122. Sin ningún sondeo, se permite implementar una función principal como un define vacío SWS CANDriver p. 81.

Recepción de una L-PDU en modo pollingBSW SchedulerCanCAN-ControllerL-PDU-CalloutCanIfCanIf-NutzerloopzyklischCan_MainFunction_Read()comprobar si hay nuevas L-PDUaltneue L-PDU vorhandenID normieren (Extended: MSB = 1),Daten ggf. in angepassten PufferoptL-PDU-Callout konfiguriert<LPDU_CalloutName>(Hrh, CanId, CanDataLegth, CanSduPtr)true / falseen caso de false: descartar L-PDUCanIf_RxIndication(Mailbox, PduInfoPtr)Indicación de Rx al usuarioninguna L-PDU nueva

Diagrama de secuencia: recepción en modo de sondeo con normalización de ID, callout opcional de L-PDU y transferencia a CanIf. Fuentes: [SWS_Can_00226], [SWS_Can_00443], SWS CANInterface p. 153, SWS CANDriver p. 43

Sleep, Wakeup y control de interrupciones

El controlador de dispositivo solo gestiona las reactivaciones que detecta el propio controlador, no las que se producen a través del transceptor SWS CANDriver p. 45. Ante una reactivación por hardware, el controlador pasa de SLEEP a STOPPED. La L-PDU desencadenante no se sigue procesando. Se llama a EcuM_CheckWakeup en la interrupción o en Can_MainFunction_Wakeup, con la fuente configurada mediante CanWakeupSourceRef SWS CANDriver p. 35. A continuación, el EcuM llama a Can_CheckWakeup a través de CanIf. Esta función notifica una reactivación detectada mediante EcuM_SetWakeupEvent [SWS_Can_00360] SWS CANDriver p. 63. Para evitar reactivaciones erróneas, EcuM y CanIf validan sin intervención del controlador de dispositivo SWS CANDriver p. 45.

Can_DisableControllerInterrupts y Can_EnableControllerInterrupts son reentrantes y actúan de forma anidada. Tras n llamadas de deshabilitación son necesarias n llamadas de habilitación. Una habilitación sin una deshabilitación previa no tiene efecto [SWS_Can_00231] [SWS_Can_00232] SWS CANDriver p. 61 SWS CANDriver p. 62.

Wakeup desde el bus CANCAN-ControllerCanEcuMCanIfUse Case: Controller in CAN_CS_SLEEPEvento de Wakeup desde el busaltInterrupt-BetriebWakeup-ISRPolling-BetriebCan_MainFunction_Wakeup()Controller SLEEP -> STOPPED,no procesar la L-PDU desencadenanteEcuM_CheckWakeup(fuente de CanWakeupSourceRef)Comprobar fuente de Wakeup a través de CanIfCan_CheckWakeup(Controller)optWakeup erkanntEcuM_SetWakeupEventE_OKValidierung gegen Fehlwakeupspor EcuM y CanIf, sin Can

Diagrama de secuencia: reactivación de bus desde SLEEP, notificación a EcuM y consulta a través de CanIf con Can_CheckWakeup. Fuentes: [SWS_Can_00360], [SWS_Can_00228], SWS CANDriver p. 45, SWS CANDriver p. 35

Conjuntos de configuración, particiones y referencia de instancias

Can_Init recibe un puntero a Can_ConfigType. Esta estructura específica del hardware contiene ajustes para todos los controladores y referencias a las configuraciones individuales de cada controlador [SWS_Can_00223] [SWS_Can_00413]. El módulo soporta VARIANT-PRE-COMPILE y VARIANT-POST-BUILD SWS CANDriver p. 96. En el ejemplo Post-build, al llamar a Can_Init se selecciona uno de varios conjuntos de configuración EXP LayeredSoftwareArchitecture p. 120. Por cada controlador, CanController define, entre otros, CanRxProcessing, CanTxProcessing, CanBusoffProcessing, CanWakeupProcessing y al menos una CanControllerBaudrateConfig SWS CANDriver p. 101.

En sistemas de múltiples particiones, el módulo opera en cada partición como una instancia independiente. Una llamada a la API solo tiene efecto en su propia partición [SWS_Can_CONSTR_00508]. Para la asignación de particiones aplican tres reglas:

  • Las particiones en CanControllerEcucPartitionRef deben ser un subconjunto de las particiones en CanEcucPartitionRef [SWS_Can_CONSTR_00509].
  • El controlador y el canal de transceptor de un canal de comunicación hacen referencia a la misma partición [SWS_Can_CONSTR_00510].
  • El controlador de dispositivo rechaza las asignaciones no compatibles [SWS_Can_00507].

Varios módulos Can en una unidad de control electrónico se distinguen mediante un prefijo de función modificado SWS CANDriver p. 51.

Comportamiento en caso de error

Con el Development Error Detection activado, el controlador de dispositivo notifica errores de desarrollo al DET. Los códigos van desde CAN_E_PARAM_POINTER (0x01), pasando por CAN_E_UNINIT (0x05) y CAN_E_TRANSITION (0x06), hasta CAN_E_INIT_FAILED (0x09) [SWS_Can_91019]. Tras regresar del DET, la función retorna inmediatamente; las funciones con valor de retorno devuelven entonces E_NOT_OK SWS CANDriver p. 48. Algunos ejemplos:

Como error de tiempo de ejecución se define CAN_E_DATALOST para mensajes de recepción perdidos [SWS_Can_91020]. Es probable que se notifique a través del Det_ReportRuntimeError requerido [SWS_Can_00234]. Pregunta Q-50225b25430c9660 (abierta)

Si un controlador pasa a Bus-off, cambia de STARTED a STOPPED. El controlador de dispositivo no ejecuta ninguna recuperación de hardware. Notifica el evento mediante interrupción o en Can_MainFunction_BusOff a través de CanIf_ControllerBusOff [SWS_Can_00227] SWS CANDriver p. 35. La recuperación la asume el CanSM, al que CanIf informa con CanSM_ControllerBusOff SWS CANInterface p. 138. Interpretación: el reinicio debería volver a discurrir a través de Can_SetControllerMode(CAN_CS_STARTED), que en este proceso vuelve a cargar la configuración SWS CANDriver p. 59. Pregunta Q-83e484ab9f8b1aac (abierta)

Detección y notificación de Bus-offCAN-ControllerCanBSW SchedulerCanIfCanSMController erreicht Bus-offaltInterrupt-BetriebBus-off-InterruptPolling-BetriebCan_MainFunction_BusOff()Statusbit lesenSTARTED -> STOPPED,sin recuperación de hardwareCanIf_ControllerBusOff(ControllerId)CanSM_ControllerBusOffLa recuperación de Bus-off corresponde a CanSMUse Case: Neustart (Interpretation)Neustart anfordern (Interpretation)Can_SetControllerMode(Controller, CAN_CS_STARTED)Reinicialización conzuletzt verwendeter Konfiguration

Diagrama de secuencia: detección y notificación de un Bus-off hasta el CanSM. El reinicio marcado como interpretación no está respaldado explícitamente. Fuentes: [SWS_Can_00227], [SWS_Can_00234], SWS CANDriver p. 35, SWS CANInterface p. 138.

Para el diagnóstico, Can_GetControllerErrorState proporciona el estado de error: ACTIVE, PASSIVE o BUSOFF [SWS_Can_91004] [SWS_Can_91003]. Los contadores de errores de Rx y Tx también se pueden consultar. Si el controlador no los proporciona, las funciones devuelven E_NOT_OK. Puesto que el hardware gestiona los contadores de forma asíncrona, los valores no son aptos para hacer suposiciones sobre el estado del bus [SWS_Can_00511] [SWS_Can_00516] SWS CANDriver p. 67. Can_ErrorType describe un superconjunto de tipos típicos de fallos de hardware, desde errores de bit hasta el bloqueo del bus [SWS_Can_91021].

Frente a hardware que no responde, el controlador de dispositivo utiliza un OsCounter para los tiempos de espera (timeouts) SWS CANDriver p. 23. Si un cambio de modo no se hace efectivo dentro de CanTimeoutDuration, Can_SetControllerMode sale de la función en lugar de bloquearse SWS CANDriver p. 33. Si se produce una reactivación del bus durante la transición al modo de reposo, devuelve Can_SetControllerMode(CAN_CS_STOPPED) E_NOT_OK SWS CANDriver p. 35.

Más evidencia detallada

Muchos pasajes del documento proceden de R23-11 a R25-11. Normativos para R20-11 son los requisitos citados. El diagrama de estados SWS CANDriver p. 38 procede directamente de R20-11.

Guía generada por IA sobre la base de los requisitos y pasajes de documentos proporcionados en la carga útil para R20-11. Las suposiciones están identificadas como interpretación; el texto normativo sigue siendo la especificación.

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

función Can_Init [SWS_Can_00223] 📄 PDF

void Can_Init (const Can_ConfigType* Config);

This function initializes the module.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 8afbe47dbadd Procedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

La función síncrona y no reentrante Can_Init inicializa la totalidad del módulo controlador CAN, así como las unidades de hardware correspondientes, según la configuración transferida [SWS_Can_00223].

Uso y contexto de llamada

La llamada de Can_Init la realiza obligatoriamente el ECU State Manager durante la fase de inicio de la unidad de control, antes de que se permita invocar cualquier otra función del controlador CAN [SWS_Can_91012]. Como parámetro, la función recibe a través de Config un puntero a la configuración del controlador (const Can_ConfigType*) y no devuelve ningún valor de retorno [SWS_Can_00223].

Alcance de inicialización y transiciones de estado

En el marco de la inicialización, la función establece todos los registros de hardware necesarios e inicializa todos los controladores CAN AUTOSAR_SWS_CANDriver p. 33:

  • inicialización de variables estáticas y flags internos [SWS_Can_91012],
  • configuración de ajustes comunes para la unidad de hardware CAN completa [SWS_Can_91012],
  • ajustes específicos de controlador para cada controlador CAN individual [SWS_Can_91012].

Mediante la llamada a la función se desencadenan transiciones de estado del hardware CAN AUTOSAR_SWS_CANDriver p. 10, en las que Can_Init realiza la configuración de registros para pasar los controladores al estado básico previsto [SWS_Can_91010] AUTOSAR_SWS_CANDriver p. 36.

Concurrencia y restricciones

Dado que Can_Init está especificada como no reentrante, no debe tener lugar ninguna llamada paralela o repetida durante una inicialización en curso [SWS_Can_00223]. Además, determinados ajustes globales de la unidad de hardware solo pueden configurarse dentro de Can_Init AUTOSAR_SWS_CANDriver p. 33.

Esta nota de uso se ha generado automáticamente a partir de los datos de especificación de AUTOSAR Classic R20-11.

Guía del implementador pendiente (complejidad I1)

función Can_DeInit [SWS_Can_91002] 📄 PDF

void Can_DeInit (void);

This function de - initializes the module.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 982976925c7a Procedencia Preguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

La función Can_DeInit sirve para la desinicialización del módulo del controlador de CAN ([SWS_Can_91002]). Posee la firma void Can_DeInit(void), no acepta parámetros, no devuelve ningún valor y se ejecuta de forma síncrona y no reentrante ([SWS_Can_91002]). La interfaz está disponible a través de la cabecera Can.h ([SWS_Can_91002]).

La llamada inicia una transición de estado controlada por software (AUTOSAR_SWS_CANDriver p. 10; AUTOSAR_SWS_CANDriver p. 41). En este proceso, Can_DeInit cambia el estado del módulo (AUTOSAR_SWS_CANDriver p. 33) y restablece todos los controladores de CAN (AUTOSAR_SWS_CANDriver p. 41).

Concurrencia y restricciones

Para la ejecución se aplican estrictas precondiciones y requisitos de secuencia respecto a los estados del hardware y del módulo:

Interacción

El comportamiento ante errores y de transición refleja los flujos depurados del controlador, según los cuales las transiciones de estado no válidas se interceptan de manera uniforme ([SWS_Can_00441]).

Este texto fue generado por una IA basándose en la especificación AUTOSAR CP R20-11.

función 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.

función 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.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: a4b356b48b8a Procedencia Preguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

La función Can_SetControllerMode (proporcionada a través de Can.h con el Service-ID 0x03) ejecuta transiciones de estado activadas por software de la máquina de estados del controlador CAN ([SWS_Can_00230], AUTOSAR_SWS_CANDriver p. 35). Realiza los ajustes de registros relativos al hardware para propiciar las transiciones entre los estados básicos del controlador UNINIT, STOPPED, STARTED y SLEEP ([SWS_Can_91010], AUTOSAR_SWS_CANDriver §7.3 «CAN Controller State Machine»).

Uso y semántica

La llamada se realiza con el parámetro Controller para la identificación del controlador CAN, así como con Transition del tipo Can_ControllerStateType para especificar la transición de estado deseada ([SWS_Can_00230]). El servicio está definido como asíncrono y no reentrante (Non Reentrant) ([SWS_Can_00230]). Un valor de retorno de E_OK confirma que la solicitud ha sido aceptada; E_NOT_OK indica que la solicitud ha sido rechazada y que existe un error de desarrollo ([SWS_Can_00230], [SWS_Can_00441]).

Secuencia e interacción

Tras aplicar la configuración de registros, se abandona de nuevo Can_SetControllerMode (AUTOSAR_SWS_CANDriver p. 38). Dado que el módulo Can no almacena por sí mismo los cambios de estado del hardware ([SWS_Can_91010]), presumiblemente la función cíclica Can_Mainfunction_Mode asume la finalización asíncrona o la comprobación de la transición iniciada por Can_SetControllerMode (AUTOSAR_SWS_CANDriver p. 38). Pregunta Q-03edb1b665a1624b (abierta)

Este texto ha sido generado por una IA a partir de los datos de especificación de AUTOSAR R20-11.

Guía del implementador pendiente (complejidad I1)

función Can_DisableControllerInterrupts [SWS_Can_00231] 📄 PDF

void Can_DisableControllerInterrupts (uint8 Controller);

This function disables all interrupts for this CAN controller.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 9d72b1d46d5d Procedencia Preguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

La función síncrona y reentrante Can_DisableControllerInterrupts desactiva todas las interrupciones para un controlador CAN especificado ([SWS_Can_00231]). La transferencia se realiza a través del parámetro Controller sin valor de retorno ([SWS_Can_00231]).

Respecto al contexto de llamada y la concurrencia, la función está diseñada como reentrante y admite llamadas múltiples (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). Interpretación: Es de esperar que una llamada múltiple incremente un contador de anidamiento interno, de modo que las interrupciones se vuelvan a activar únicamente tras un número equivalente de llamadas de habilitación (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts», AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). Pregunta Q-61be56207aa92ee0 (abierta)

En el ámbito del tratamiento de errores, la especificación exige disparar el error CAN_E_UNINIT en caso de que el módulo controlador aún no esté inicializado en el momento de la llamada (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). Asimismo, la especificación requiere disparar otro error (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»); presumiblemente esto sirve para comprobar si el identificador de controlador no es válido. Pregunta (abierta)

En la interacción dentro del controlador CAN, la llamada sirve para proteger secciones críticas relativas al controlador mientras este permanece activo (AUTOSAR_SWS_CANDriver §7.5 «Interrupt handling»). Las depuraciones formales y los cambios históricos de interfaz del controlador están documentados en las notas de la versión ([SWS_Can_00441]).

Este texto ha sido elaborado por una IA y sirve como nota de uso complementaria a la especificación.

función Can_EnableControllerInterrupts [SWS_Can_00232] 📄 PDF

void Can_EnableControllerInterrupts (uint8 Controller);

This function enables all allowed interrupts.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 374e141963cb Procedencia Preguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

La función síncrona y reentrante Can_EnableControllerInterrupts reactiva todas las interrupciones permitidas para el controlador CAN indicado a través del parámetro Controller ([SWS_Can_00232]). No posee valor de retorno y se proporciona a través del archivo de cabecera Can.h ([SWS_Can_00232]).

En cuanto al flujo de ejecución, la función lee flags de control del lado del software (AUTOSAR_SWS_CANDriver p. 65). Si las interrupciones del controlador se habían desactivado previamente varias veces, Can_EnableControllerInterrupts debe llamarse tantas veces antes de la habilitación efectiva (AUTOSAR_SWS_CANDriver p. 65). Interpretación: El controlador gestiona presumiblemente las secciones de bloqueo anidadas mediante contadores o flags internos, de manera que las interrupciones de hardware no se reactivan hasta la compensación completa de todas las llamadas de desactivación. Pregunta Q-6781f0fc9ad7d221 (abierta)

Si la función se invoca antes de que el controlador de CAN se haya inicializado correctamente, notifica el error CAN_E_UNINIT (AUTOSAR_SWS_CANDriver p. 66). Es probable que esto se trate como Development-Error en el contexto del controlador ([SWS_Can_00441]). Pregunta Q-efbbcf03a2589e4e (abierta) En estado no inicializado, la función no realiza ninguna otra acción en el controlador (AUTOSAR_SWS_CANDriver p. 66).

Esta nota de uso fue generada automáticamente sobre la base de la especificación.

función Can_CheckWakeup [SWS_Can_00360] 📄 PDF

Std_ReturnType Can_CheckWakeup (uint8 Controller);

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

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 720a4fc64f2a Procedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

Uso y comportamiento

La función síncrona Can_CheckWakeup comprueba para un determinado controlador de CAN si se ha detectado un evento de wake-up ([SWS_Can_00360], AUTOSAR_SWS_CANDriver p. 48, AUTOSAR_SWS_CANDriver p. 67). Está disponible a través del archivo de cabecera Can.h y posee el Service-ID 0x0b ([SWS_Can_00360]).

  • Parámetro: Controller (in) designa el identificador del controlador de CAN cuyo estado se debe comprobar en busca de un wake-up ([SWS_Can_00360]).
  • Valor de retorno: Devuelve Std_ReturnType. El valor de retorno E_OK señaliza que la llamada a la API fue aceptada, mientras que E_NOT_OK indica el rechazo ([SWS_Can_00360]).
  • Concurrencia: La función está definida como no reentrante (Non Reentrant) ([SWS_Can_00360]).

Configuración y tratamiento de errores

La disponibilidad de la función es configurable en tiempo de precompilación; el servicio Can_CheckWakeup se puede incluir en el código o eliminar de él a través de ella (AUTOSAR_SWS_CANDriver p. 67, AUTOSAR_SWS_CANDriver p. 97). Si la función se invoca antes de que el controlador de CAN haya sido inicializado, notifica el error CAN_E_UNINIT (AUTOSAR_SWS_CANDriver p. 67).

Interacción

La llamada a Can_CheckWakeup suele ser desencadenada por la interfaz de CAN (AUTOSAR_SWS_CANDriver p. 48). En caso de producirse un evento de wake-up en el bus, CanIf_CheckWakeup se puede invocar durante el procesamiento de EcuM_CheckWakeup (AUTOSAR_SWS_CANInterface §7.18.4.1 «Wake-up detection»). Según [SWS_CANIF_00395], CanIf consulta aquí mediante Can_CheckWakeup() u CanTrcv_CheckWakeup() qué dispositivo de hardware concreto ha desencadenado el wake-up del bus (AUTOSAR_SWS_CANInterface p. 55).

Esta nota de uso se ha creado de forma automatizada y se basa exclusivamente en las especificaciones del release R20-11 de AUTOSAR.

función 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.

función 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.

función 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.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: f2d4ad3f2f32 Procedencia Preguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

Uso y semántica

La función Can_Write es invocada de forma síncrona por el módulo CanIf para transferir un mensaje CAN al controlador de CAN (CanDrv) para su transmisión ([SWS_Can_00233]). Al hacerlo, el invocador transfiere dos parámetros:

  • Hth: Manejador de transmisión de hardware que define el objeto de transmisión que se va a utilizar y determina implícitamente el controlador, ya que los números de manejador son unívocos dentro de una unidad de hardware ([SWS_Can_00233]).
  • PduInfo: Puntero a una estructura con datos útiles de la SDU, longitud de datos e identificador CAN ([SWS_Can_00233]).

Antes de la transmisión, la función comprueba el objeto de transmisión de hardware direccionado (SWS_CANDriver p. 73) y asegura la swPduHandle transferida (SWS_CANDriver p. 43). Mediante el valor de retorno del tipo Std_ReturnType (SRS_BSWGeneral §5.2.3.6 «Types and keywords»), E_OK señaliza la aceptación de la orden, mientras que CAN_BUSY indica que no hay ningún búfer de transmisión de hardware disponible ([SWS_Can_00233], SWS_CANDriver p. 51).

Manejo de errores

Si se produce un error de desarrollo durante la ejecución, la función devuelve E_NOT_OK ([SWS_Can_00233], [SWS_Can_00441]). Interpretación: los códigos de error DET específicos no se mencionan explícitamente en el extracto disponible; no obstante, es probable que los manejadores defectuosos o los punteros no válidos provoquen la devolución de E_NOT_OK. Pregunta Q-ca947a7e0e4fd7d6 (abierta)

Concurrencia y restricciones

Can_Write está especificada como reentrante o thread-safe ([SWS_Can_00233], SWS_CANDriver p. 49). Si una invocación preferente (preemptive) no se puede ejecutar de forma reentrante en el controlador, esto también se notifica a CanIf a través del valor de retorno CAN_BUSY ([SWS_Can_00233]). El invocador debe garantizar que la memoria de la PDU permanezca válida sin cambios hasta el retorno de la llamada a la función (SWS_CANDriver p. 45).

Interacción

Mediante [SWS_Can_00416] se transmite durante la invocación de qué tipo de PDU se trata (SWS_CANDriver p. 51), donde el controlador soporta la transmisión hasta la longitud máxima de PDU (SWS_CANDriver p. 52).

Esta nota de uso se generó automáticamente a partir de los documentos de especificación de AUTOSAR R20-11.

función <LPDU_CalloutName> [SWS_Can_00443] 📄 PDF

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

-

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 3538baa0cf7b Procedencia Preguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

Uso y contexto de llamada

El módulo CAN de AUTOSAR llama a la interfaz de callout configurable <LPDU_CalloutName> opcionalmente con cada recepción de una L-PDU (SWS_CANDriver §8.4.1 «Call-out function»). La declaración de la función se proporciona a través del archivo de cabecera Can_Externals.h ([SWS_Can_00443]). El nombre real de la función se configura de forma específica para el proyecto ([SWS_Can_00443]).

Como parámetros de entrada se transfieren el handle de recepción de hardware Hrh, el identificador CanId, la longitud de datos CanDataLegth así como un puntero a los datos útiles CanSduPtr ([SWS_Can_00443]).

Filtrado y valor de retorno

La función devuelve un valor boolean. Si el callout devuelve false, la L-PDU recibida no debe procesarse posteriormente ([SWS_Can_00444]). Interpretación: Si la llamada proporciona true, debería tener lugar la transferencia regular de la L-PDU a las capas superiores. Pregunta Q-e96e75e93881c3af (abierta)

Concurrencia y restricciones

La función está provista del ID de servicio 0x20 y especificada como asíncrona (Asynchronous) y no reentrante (Non Reentrant) ([SWS_Can_00443]). Al no ser reentrante, no deben producirse llamadas paralelas en el mismo contexto.

Este texto fue generado por una IA y sirve como guía orientativa. Son vinculantes las disposiciones de la especificación AUTOSAR.

función 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.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: a6cd22a9e2b1 Procedencia Preguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

La función Can_MainFunction_Write realiza el sondeo cíclico de confirmaciones de transmisión (TX-Confirmation) siempre que el parámetro CAN_TX_PROCESSING esté configurado en POLLING [SWS_Can_00225], AUTOSAR SWS CAN Driver §7 «Scheduled functions». Carece de parámetros (void Can_MainFunction_Write(void)), posee el Service-ID 0x01 y se proporciona al planificador a través del archivo de cabecera SchM_Can.h [SWS_Can_00225]. Mediante interruptores de configuración se puede activar o desactivar la función para el procesamiento de la transmisión de PDU AUTOSAR SWS CAN Driver §10 «CanMainFunctionWrite».

Si en el sistema no se utiliza ningún sondeo para operaciones de transmisión, Can_MainFunction_Write debe implementarse, según la especificación, como un define vacío AUTOSAR SWS CAN Driver §7 «Scheduled functions». Es de esperar que esto evite sobrecarga innecesaria del planificador en sistemas controlados puramente por interrupciones. Pregunta Q-2152a35397130945 (abierta)

En interacción con Can_MainFunction_Read y Can_MainFunction_BusOff, la rutina forma la interfaz cíclica del controlador con el SchM AUTOSAR SWS CAN Driver §7 «Scheduled functions». El procesamiento de confirmación tiene lugar, en función del modo, directamente en el recurso de hardware o en el contexto de Can_MainFunction_Write AUTOSAR SWS CAN Driver §7 «Hardware Resources». La llamada concreta y la asignación se rigen por los elementos referenciados respectivamente AUTOSAR SWS CAN Driver §10 «CanMainFunctionWrite», AUTOSAR SWS CAN Driver §10 «Call Context», respaldadas por un procesamiento de Tx específico de controlador [SWS_Can_00441].

Esta nota de uso se ha generado automáticamente a partir de la especificación AUTOSAR R20-11.

función 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.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 2c7a6a6247b4 Procedencia Preguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

La función Can_MainFunction_Read sirve para la consulta cíclica (sondeo) de mensajes de recepción CAN ([SWS_Can_00226]). Posee la firma void Can_MainFunction_Read (void) con el Service-ID 0x08 y se proporciona a través del archivo de cabecera SchM_Can.h para el control de la ejecución ([SWS_Can_00226]).

Uso y configuración

La función ejecuta el sondeo de indicaciones de RX si el parámetro de configuración CAN_RX_PROCESSING está ajustado a POLLING ([SWS_Can_00226]). En el sistema, este procesamiento puede configurarse por controlador ([SWS_Can_00441]). Si en el controlador CAN no se utiliza ningún sondeo en absoluto, Can_MainFunction_Read puede definirse como una macro vacía (AUTOSAR_SWS_CANDriver p. 77).

Concurrencia y restricciones

La llamada se realiza periódicamente en el contexto del planificador según el periodo de activación parametrizado (AUTOSAR_SWS_CANDriver p. 22). Para la ejecución se aplican condiciones estrictas:

Interpretación: El intervalo de llamada configurado de la tarea probablemente deba dimensionarse de tal forma que una fase de procesamiento siempre haya finalizado antes del inicio del siguiente ciclo, ya que la reentrancia no está permitida (AUTOSAR_SWS_CANDriver p. 47). Pregunta Q-1f2fa9db14970b12 (abierta)

Este texto fue generado por una IA a partir de la especificación AUTOSAR R20-11.

función 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'.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: d6a62aee0c17 Procedencia Preguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

La función principal planificada Can_MainFunction_BusOff sirve para el sondeo cíclico de eventos de Bus-Off de los controladores CAN, siempre que estos estén configurados estáticamente para ser sondeados [SWS_Can_00227], [SWS_Can_00109]. Posee la firma void Can_MainFunction_BusOff(void), no recibe ningún parámetro, no devuelve ningún valor y se proporciona a través de la cabecera SchM_Can.h para el control de la ejecución [SWS_Can_00227].

Uso e interacción

Los eventos de hardware pueden registrarse en el controlador CAN bien mediante interrupción o bien por sondeo de los flags de estado correspondientes, dependiendo de la configuración de la consulta respecto al hardware [SWS_Can_00099]. El controlador también puede configurarse de modo que se prescinda por completo de las interrupciones [SWS_Can_00007]. Si no se utiliza ningún sondeo en todo el sistema, el módulo Can puede implementar la función como una macro vacía [SWS_Can_00183].

Si en Can_MainFunction_BusOff se detecta un evento de Bus-Off mediante bits de estado, el módulo realiza los ajustes de registros necesarios, por ejemplo, para evitar una recuperación automática de hardware SWS_CANDriver §7.3 «CAN Controller State Machine», [SWS_Can_91010]. A continuación, el módulo notifica a la capa superior CanIf a través de la retrollamada correspondiente, en la cual se produce el cambio de estado de software del controlador SWS_CANDriver §7.3 «CAN Controller State Machine».

Contexto de llamada y restricciones

En el funcionamiento sondeado, el contexto de llamada de la notificación de retrollamada no es la ISR, sino la tarea ejecutora de Can_MainFunction_BusOff; no obstante, todas las funciones de retrollamada deben implementarse como si se invocaran desde el contexto de la ISR SWS_CANDriver §7.9 «Notification concept». En cuanto a la reentrancia, el payload no contiene indicaciones explícitas; presumiblemente la función no es reentrante, ya que accede a registros y estados globales del controlador. Pregunta Q-38fcd72c40ce3e66 (abierta)

Esta nota de uso ha sido generada por una IA y se basa exclusivamente en los extractos de especificación de la versión R20-11 de AUTOSAR.

función 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'.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: ce643213c50c Procedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

La función principal Can_MainFunction_Wakeup realiza el sondeo cíclico de eventos de reactivación configurados estáticamente para ser sondeados ([SWS_Can_00228]). La función posee la firma void Can_MainFunction_Wakeup(void), no recibe ningún parámetro, no devuelve ningún valor de retorno y se proporciona para el Schedule Manager a través de la cabecera SchM_Can.h (AUTOSAR_SWS_CANDriver p. 79). El periodo de ejecución de la función se configura en segundos (AUTOSAR_SWS_CANDriver p. 92).

En el marco de la máquina de estados del controlador CAN (SWS_CANDriver §7.3 «CAN Controller State Machine»), los eventos de reactivación de hardware externos pueden señalizarse, en lugar de mediante interrupciones, a través de un bit de estado que se consulta en Can_MainFunction_Wakeup ([SWS_Can_91010]). Además, en las transiciones de estado, la función sondea un flag correspondiente del registro de estado de CAN hasta que este señalice la efectividad del cambio ([SWS_Can_00370]). Tras un cambio de estado satisfactorio, el controlador CAN notifica el nuevo estado a la interfaz CAN mediante la función de retrollamada CanIf_ControllerModeIndication, en relación con la CanIf ControllerId abstracta ([SWS_Can_00370]).

En relación con la configuración y el uso de recursos, la API Can_MainFunction_Wakeup() puede activarse o desactivarse para el tratamiento de eventos de reactivación (AUTOSAR_SWS_CANDriver p. 97). En caso de que en la unidad de control no se utilice sondeo alguno para eventos de reactivación, Can_MainFunction_Wakeup puede definirse como una macro vacía (AUTOSAR_SWS_CANDriver p. 79).

Esta nota de uso ha sido generada de forma automatizada sobre la base de la especificación AUTOSAR CP R20-11.

función Can_MainFunction_Mode [SWS_Can_00368] 📄 PDF

void Can_MainFunction_Mode (void);

This function performs the polling of CAN controller mode transitions.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: feee99301166 Procedencia Preguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

Uso y funcionamiento

La función principal planificada Can_MainFunction_Mode ([SWS_Can_00368]) realiza el polling de transiciones de estado de los controladores de CAN. No posee parámetros de entrada ni valor de retorno (void Can_MainFunction_Mode(void), Service-ID 0x0c) y se declara a través de la cabecera SchM_Can.h SWS_CANDriver §8.5.1.5 «Can_MainFunction_Mode».

La función se invoca cíclicamente de forma continua (AUTOSAR_SWS_CANInterface p. 143). Comprueba en el hardware si ha cambiado el modo de un controlador de CAN. Si se detecta un cambio, se notifica a la interfaz de CAN mediante la llamada a CanIf_ControllerModeIndication(Controller, ControllerMode).

Supervisión asíncrona de modo

Si previamente se solicitó un cambio de modo a través de Can_SetControllerMode() y esta llamada retorna con éxito a CanIf, Can_MainFunction_Mode detecta la transición de estado consumada del hardware del controlador. A continuación, informa de forma asíncrona a CanIf mediante CanIf_ControllerModeIndication sobre el nuevo estado, como por ejemplo CAN_CS_STARTED AUTOSAR_SWS_CANInterface p. 144.

Contexto de llamada y condiciones de contorno

Debido a su puesta a disposición a través de SchM_Can.h y a su definición como Scheduled Function, es probable que la llamada periódica sea realizada por el BSW-Scheduler. Pregunta Q-42edbc2aa591e8d7 (abierta) En el payload no se definen códigos de error específicos ni pasos de desarrollo para esta función.

Este texto fue elaborado por una IA a partir de las especificaciones de AUTOSAR.

Guía del implementador pendiente (complejidad I1)

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

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

tipo 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

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

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

tipo Can_ErrorStateType [SWS_Can_91003] 📄 PDF

Error states of a CAN controller.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 0cb922d28e06 Procedencia Preguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

El tipo de enumeración Can_ErrorStateType de Can_GeneralTypes.h describe los estados de error y de funcionamiento de un controlador de CAN [SWS_Can_91003]. Representa el comportamiento del controlador en el bus CAN a través de tres estados SWS_CANDriver §8.2.7 «Can_ErrorStateType»:

  • CAN_ERRORSTATE_ACTIVE: El controlador de CAN participa plenamente en la comunicación del bus [SWS_Can_91003].
  • CAN_ERRORSTATE_PASSIVE: El controlador de CAN participa en la comunicación, pero ya no envía tramas de error (Error Frames) activas [SWS_Can_91003].
  • CAN_ERRORSTATE_BUSOFF: El controlador de CAN está aislado del bus debido a errores de transmisión graves y ya no participa en la comunicación [SWS_Can_91003].

En tiempo de ejecución, el estado se consulta a través del servicio síncrono del controlador Can_GetControllerErrorState [SWS_Can_91004]. Su parámetro de salida ErrorStatePtr recibe el valor determinado. La misma firma es utilizada también por la función de nivel superior CanIf_GetControllerErrorState en la interfaz de CAN AUTOSAR_SWS_CANInterface p. 78 «CanIf_GetControllerErrorState». En lo relativo a la concurrencia, se aplica que Can_GetControllerErrorState está especificada como no reentrante para el mismo ControllerId [SWS_Can_91004].

En caso de error, Can_GetControllerErrorState proporciona el valor de retorno E_NOT_OK, y E_OK en caso de consulta exitosa [SWS_Can_91004]. Con la detección de desarrollo (DET) activada, una llamada antes de la inicialización del controlador provoca el error CAN_E_UNINIT [SWS_Can_91005]. Un ControllerId no permitido desencadena el error de desarrollo CAN_E_PARAM_CONTROLLER [SWS_Can_91006], y la transferencia de un puntero nulo para ErrorStatePtr se rechaza con un error de desarrollo [SWS_Can_91007].

Interpretación: es probable que el invocador deba asignar el área de memoria para ErrorStatePtr bajo su propia responsabilidad, ya que la interfaz trata el puntero como un parámetro de salida puro y excluye los punteros nulos mediante un error de desarrollo. Pregunta Q-5c907c21bcb50893 (abierta)

Este texto fue generado por una IA a partir de la especificación AUTOSAR R20-11.

Guía del implementador pendiente (complejidad I1)

tipo Can_ControllerStateType [SWS_Can_91013] 📄 PDF

States that are used by the several Controller Mode functions.

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 5eb69ce0444e Procedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

El tipo de enumeración Can_ControllerStateType define los estados de funcionamiento básicos de un controlador de CAN: CAN_CS_UNINIT, CAN_CS_STARTED, CAN_CS_STOPPED y CAN_CS_SLEEP [SWS_Can_91013]. El tipo se utiliza a nivel intermodular para la gestión de estados controlada por software de la máquina de estados del controlador de CAN [SWS_Can_00017].

Los valores se emplean en los siguientes contextos:

En cuanto a concurrencia y tratamiento de errores, se aplica: las funciones del controlador Can_SetControllerMode y Can_GetControllerMode no son reentrantes [SWS_Can_00230], [SWS_Can_91014]. En caso de invocación de Can_GetControllerMode antes de la inicialización del controlador, se notifica el error de desarrollo CAN_E_UNINIT y se devuelve E_NOT_OK [SWS_Can_91016]. La función de callback CanSM_ControllerModeIndication es reentrante para diferentes controladores y notifica un ID de controlador no configurado con CANSM_E_PARAM_CONTROLLER al DET [SWS_CanSM_00396], [SWS_CanSM_00397].

Esta nota de uso se basa en las especificaciones del controlador de CAN, la interfaz de CAN y el CAN State Manager en AUTOSAR Classic R20-11.

Guía del implementador pendiente (complejidad I1)

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

GENERADO POR IA no revisado Modelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: e538be0a65be Procedencia Preguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán

El tipo de enumeración Can_ErrorType define un superconjunto estandarizado de causas de error de CAN que el hardware CAN típico puede registrar y notificar a capas superiores [SWS_Can_91021]. Se proporciona a través del archivo de cabecera Can_GeneralTypes.h SWS_CANDriver §8.2.9 «Can_ErrorType».

Dado que la enumeración está concebida como un superconjunto, no todos los controladores CAN admiten necesariamente la totalidad de los valores especificados [SWS_Can_91021]. Entre los estados de error definidos se encuentran:

  • errores de bit en la monitorización del bus (CAN_ERROR_BIT_MONITORING1, CAN_ERROR_BIT_MONITORING0 o, en resumen, CAN_ERROR_BIT),
  • errores de acuse de recibo (CAN_ERROR_CHECK_ACK_FAILED, CAN_ERROR_ACK_DELIMITER),
  • pérdida de arbitraje del transmisor (CAN_ERROR_ARBITRATION_LOST),
  • estados de sobrecarga por búferes de recepción llenos (CAN_ERROR_OVERLOAD),
  • infracciones de formato y de relleno de bits (bit stuffing) (CAN_ERROR_CHECK_FORM_FAILED, CAN_ERROR_CHECK_STUFFING_FAILED),
  • errores de CRC (CAN_ERROR_CHECK_CRC_FAILED), así como
  • un bloqueo permanente del bus en nivel dominante (CAN_ERROR_BUS_LOCK) SWS_CANDriver §8.2.9 «Can_ErrorType».

En la interacción de los módulos BSW, el tipo sirve como parámetro de la función de callback CanIf_ErrorNotification para la transmisión de errores de controlador a la interfaz CAN AUTOSAR_SWS_CANInterface §8.x «CanIf_ErrorNotification». El valor transferido debería corresponder en este caso al estado de error determinado por el hardware subyacente AUTOSAR_SWS_CANDriver §7.x «Error Notification». Pregunta Q-d23c45dd3b23ec71 (abierta)

Este texto ha sido generado por una IA y sirve para la orientación técnica.

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

Inicialización y estado

Can_DeInit función

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 función

This function initializes the module.

void Can_Init (const Can_ConfigType* Config);

Servicios

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 función

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 e interfaces esperadas

-

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

Cíclico

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

Tipos

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.