DEENESPTFRRUARHIKOZHNL

CAN Driver (Can)

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

Guia do móduloGERADO POR IA

Controla o hardware do controlador CAN e intermedeia transmissão, recepção e mudanças de estado para o CAN Interface.
GERADO POR IA não revisado Modelo: claude-opus-5-5 · Esforço: high · Temperatura: não controlável · Prompt: b6833c934a77 Procedência Perguntas em aberto (2)
Âncora causal: R20-11 Válido a partir de R20-11 Sintetizado para esta versão de especificação.
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

Controla o hardware do controlador CAN e intermedeia transmissão, recepção e mudanças de estado para o CAN Interface.

O driver CAN controla os controladores CAN de uma unidade de hardware e constitui a camada de hardware sob o CAN Interface. A este ele notifica recepção, confirmação de transmissão, bus-off e mudança de modo via callback [SWS_Can_00234]. De acordo com Can_Init, todos os controladores estão em STOPPED. Cada controlador é iniciado individual e assincronamente com Can_SetControllerMode; o êxito é reportado apenas posteriormente [SWS_Can_00230]. A transmissão ocorre com Can_Write através de hardware transmit handles. Se nenhum objeto de transmissão estiver livre, o driver retorna CAN_BUSY, e o CanIf armazena a requisição em buffer.

O driver CAN encapsula qualquer acesso aos controladores CAN de uma unidade de hardware. Ele serve ao CAN Interface como único utilizador e reporta recepção, confirmação de transmissão, bus-off e mudança de modo através de callbacks predefinidos do CanIf [SWS_Can_00234]. O ECU State Manager inicializa-o com Can_Init e um Can_ConfigType específico de hardware [SWS_Can_00223]. Depois disso, o driver fica em CAN_READY e todos os controladores em 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 Solicitações de modo CanIf->CanSM Mensagens de modo e 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: Integração do Can entre EcuM, BSW Scheduler, CanIf, DET, Os e o hardware do controlador. Fontes: [SWS_Can_00234], SWS CANDriver p. 78

Cada controlador passa pelos estados UNINIT, STOPPED, STARTED e SLEEP [SWS_Can_91013]. Ele é iniciado individual e assincronamente com Can_SetControllerMode: E_OK significa apenas «aceito» [SWS_Can_00230]. O driver reporta o estado alcançado posteriormente via CanIf_ControllerModeIndication SWS CANDriver p. 33. O bus-off conduz o controlador para STOPPED sem recuperação por hardware; um wakeup de barramento conduz-o de SLEEP para STOPPED SWS CANDriver p. 35.

controllerzustand reset Power-on-Reset UNINIT CAN_CS_UNINIT reset->UNINIT STOPPED CAN_CS_STOPPED UNINIT->STOPPED Can_Init STOPPED->UNINIT Can_DeInit STOPPED->STOPPED Can_SetBaudrate STARTED CAN_CS_STARTED STOPPED->STARTED Can_SetControllerMode(CAN_CS_STARTED) SLEEP CAN_CS_SLEEP STOPPED->SLEEP Can_SetControllerMode(CAN_CS_SLEEP) STARTED->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) ou bus-off (hardware) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) ou wakeup pelo barramento SLEEP->SLEEP Can_SetBaudrate

Diagrama de estados: Transições de um controlador por chamadas de software, bem como eventos de bus-off e de wakeup. Fontes: [SWS_Can_91010], SWS CANDriver p. 38

O envio é realizado com Can_Write(Hth, PduInfo). Os dois bits superiores de Can_IdType distinguem entre CAN 2.0 e CAN FD, bem como ID padrão e estendido [SWS_Can_00233] [SWS_Can_00416]. Se nenhum objeto de transmissão estiver livre, o driver retorna CAN_BUSY, e o CanIf armazena a solicitação em buffer [SWS_Can_00039] SWS CANDriver p. 47. Eventos são detectados por interrupção ou por pooling. Para o pooling, existem funções principais cíclicas SWS CANDriver p. 41:

  • Write e Read: confirmações de transmissão e recepção
  • BusOff e Wakeup: eventos de bus-off e de wakeup
  • Mode: transições de modo

As funções principais estão definidas em [SWS_Can_00225] a [SWS_Can_00228] e [SWS_Can_00368].

Em caso de falha, o driver reporta erros de desenvolvimento como CAN_E_UNINIT ou CAN_E_TRANSITION ao DET [SWS_Can_91019]. Funções com valor de retorno fornecem então E_NOT_OK SWS CANDriver p. 48. A recuperação de bus-off é assumida pelo CanSM através do CanIf. O reinício deve ocorrer novamente através de Can_SetControllerMode(CAN_CS_STARTED) SWS CANInterface p. 138. O estado de erro e os contadores de erros podem ser consultados; contudo, os valores dos contadores não são considerados um estado de barramento confiável [SWS_Can_91004] [SWS_Can_00516]. Pergunta (aberta)

Papel: driver de baixo nível entre o CanIf e os controladores CAN

O driver CAN encapsula qualquer acesso ao hardware CAN de uma unidade de hardware. Alterações de estado dos controladores ocorrem exclusivamente através de Can_Init, Can_SetBaudrate e Can_SetControllerMode. O driver não armazena as mudanças de estado por si mesmo SWS CANDriver p. 30. O seu parceiro superior é o CAN Interface. Todos os callbacks chamados pelo driver estão implementados no CanIf e não são configuráveis: CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff e CanIf_ControllerModeIndication. Adicionalmente, ele requer Det_ReportRuntimeError e o serviço do Os GetCounterValue [SWS_Can_00234] SWS CANDriver p. 73. Tipos importados provêm, entre outros, de ComStack_Types, EcuM e Os [SWS_Can_00222].

O ECU State Manager inicializa o driver via Can_Init. Conforme a nota de implementação, ele chama a função no máximo uma vez em tempo de execução [SWS_Can_00223] SWS CANDriver p. 29. As funções principais cíclicas são chamadas diretamente pelo BSW Scheduler. Elas não possuem parâmetros nem valor de retorno e não são reentrantes; uma ordem de execução não é prescrita SWS CANDriver p. 78. Para baixo, o driver não oferece callbacks. Controladores CAN externos só podem ser acessados via APIs 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 Solicitações de modo CanIf->CanSM Mensagens de modo e 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 é inicializado pelo EcuM, chamado ciclicamente pelo BSW Scheduler e utilizado pelo CanIf. Reporta ao CanIf, EcuM e DET e utiliza o Os para timeouts. Fontes: [SWS_Can_00234], SWS CANDriver p. 45, SWS CANDriver p. 78

Do power-on até STARTED: estados do driver e do controlador

O driver como um todo conhece apenas os estados CAN_UNINIT e CAN_READY. Após o reset, ele se encontra em CAN_UNINIT. Can_Init inicializa todos os controladores de acordo com a configuração e transita depois para CAN_READY. Can_DeInit define o estado do módulo para CAN_UNINIT antes de desinicializar os controladores [SWS_Can_00223] [SWS_Can_91002] SWS CANDriver p. 29.

Separadamente disso, cada controlador possui quatro estados de Can_ControllerStateType: CAN_CS_UNINIT, CAN_CS_STOPPED, CAN_CS_STARTED e CAN_CS_SLEEP [SWS_Can_91013].

  • Em STOPPED, o controlador está inicializado, mas não participa do barramento e não transmite nem quadros de erro nem reconhecimentos (acknowledges).
  • STARTED é a operação normal.
  • SLEEP difere de STOPPED apenas em hardware dotado de modo sleep SWS CANDriver p. 31.

Can_Init coloca todos os controladores em STOPPED SWS CANDriver p. 32. Can_DeInit conduz-os de STOPPED ou SLEEP para UNINIT [SWS_Can_91010] SWS CANDriver p. 38. A partir de STARTED, não há caminho direto para UNINIT SWS CANDriver p. 38.

controllerzustand reset Power-on-Reset UNINIT CAN_CS_UNINIT reset->UNINIT STOPPED CAN_CS_STOPPED UNINIT->STOPPED Can_Init STOPPED->UNINIT Can_DeInit STOPPED->STOPPED Can_SetBaudrate STARTED CAN_CS_STARTED STOPPED->STARTED Can_SetControllerMode(CAN_CS_STARTED) SLEEP CAN_CS_SLEEP STOPPED->SLEEP Can_SetControllerMode(CAN_CS_SLEEP) STARTED->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) ou bus-off (hardware) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) ou wakeup pelo barramento SLEEP->SLEEP Can_SetBaudrate

Diagrama de estados: Ciclo de vida de um controlador CAN. Chamadas de software e eventos de barramento disparam transições; o retorno para UNINIT é efetuado unicamente por Can_DeInit a partir de STOPPED ou SLEEP. Fontes: [SWS_Can_91013], [SWS_Can_91010], SWS CANDriver p. 38, SWS CANDriver p. 34, SWS CANDriver p. 35

Cada controlador é iniciado individualmente com Can_SetControllerMode(CAN_CS_STARTED) SWS CANDriver p. 29. O serviço opera de forma assíncrona: E_OK significa apenas que a solicitação foi aceita [SWS_Can_00230]. A cada transição para STARTED, o controlador é reinicializado com a configuração usada por último por Can_Init ou Can_SetBaudrate SWS CANDriver p. 59. O hardware pode aplicar a mudança com atraso. Por esse motivo, o driver reporta o estado alcançado apenas posteriormente via CanIf_ControllerModeIndication; se o destino é alcançado é monitorado por uma camada superior SWS CANDriver p. 33. Transições de modo sob polling são detectadas por Can_MainFunction_Mode [SWS_Can_00368]. Can_GetControllerMode consulta o modo atual de forma síncrona [SWS_Can_91014].

Inicialização e inicialização de um controlador CANEcuMCanIf-Nutzer (z. B. CanSM)CanIfCanBSW SchedulerCAN-ControllerUse Case: InitialisierungCan_Init(Config)configurar todos os 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_OKloopaté que a transição seja efetivaCan_MainFunction_Mode()Statusflag lesenCanIf_ControllerModeIndication(ControllerId, CAN_CS_STARTED)<User_ControllerModeIndication>

Diagrama de sequência: Inicialização pelo EcuM e início assíncrono de um controlador. A notificação de êxito ocorre apenas após o polling em Can_MainFunction_Mode. Fontes: [SWS_Can_00230], [SWS_Can_00368], SWS CANInterface p. 156, SWS CANDriver p. 29

Transmissão através de hardware transmit handles

O CanIf passa requisições de transmissão com Can_Write(Hth, PduInfo). O Hth indica o objeto de transmissão de hardware e, consequentemente, também o controlador, já que os números de HTH são exclusivos dentro de uma unidade de hardware [SWS_Can_00233]. Can_HwHandleType abrange, por padrão, 0..0x0FF e, no caso de mais de 255 objetos de hardware, a faixa estendida até 0xFFFF [SWS_Can_00429]. Can_PduType agrega os campos swPduHandle, length, id e sdu [SWS_Can_00415].

Em Can_IdType, os dois bits mais significativos codificam o tipo de quadro [SWS_Can_00416]:

  • 00: CAN com ID padrão
  • 01: CAN FD com ID padrão
  • 10: CAN com ID estendido
  • 11: CAN FD com ID estendido

Dessa forma, quadros CAN 2.0 e CAN FD podem ser mesclados no nível de quadro, desde que uma configuração de taxa de transmissão (baud rate) FD esteja ativa para o controlador SWS CANDriver p. 49 SWS CANInterface p. 71.

Can_Write deve ser thread-safe, pois CanIf_Transmit é reentrante. O driver retorna CAN_BUSY se nenhum objeto de transmissão estiver livre ou se uma chamada preemptiva não puder ser executada de forma reentrante [SWS_Can_00039] SWS CANDriver p. 47. O CanIf então armazena a requisição em buffer. Quando um objeto fica livre, o CanIf chama Can_Write novamente em ordem de prioridade SWS CANInterface p. 48. O driver mantém o swPduHandle disponível até o CanIf_TxConfirmation correspondente SWS CANDriver p. 35. Para evitar inversão de prioridade, a transmissão multiplexada (Multiplexed Transmission) pode ser configurada estaticamente; nessa configuração, múltiplos objetos de hardware formam um HTH SWS CANDriver p. 40.

Transmissão de uma L-PDU com confirmaçãoCanIfCanCAN-ControllerBSW SchedulerCan_Write(Hth, PduInfo)altHardware-Sendeobjekt freiswPduHandle je HTH merkenL-PDU ins Hardwareobjekt,Disparar transmissãoE_OKnenhum objeto livre ou não executável de forma reentranteCAN_BUSYBufferizar L-PDU no CanIfTxBufferFrame enviado e confirmado pelo barramentoaltInterrupt-BetriebTX-InterruptPolling-BetriebCan_MainFunction_Write()verificar confirmações pendentesCanIf_TxConfirmation(swPduHandle)optL-PDU bufferizada para este HTHCan_Write(Hth, L-PDU de maior prioridade)

Diagrama de sequência: Ordem de transmissão com os caminhos E_OK e CAN_BUSY, seguida pela confirmação via interrupção ou polling. Em seguida, o CanIf pode enviar subsequentemente uma L-PDU armazenada em buffer. Fontes: [SWS_Can_00233], [SWS_Can_00039], SWS CANInterface p. 142, SWS CANInterface p. 48

Recepção e as funções principais cíclicas

Na recepção, o driver chama CanIf_RxIndication. Ele passa o ID, o objeto de hardware e o ControllerId abstrato do CanIf, bem como o comprimento e o ponteiro para a L-SDU. Em quadros estendidos, ele define o MSB do ID para que o CanIf reconheça o tipo de quadro SWS CANDriver p. 43. Opcionalmente, um callout de L-PDU configurável <LPDU_CalloutName> é intercalado previamente [SWS_Can_00443]. Se ele retornar false, a L-PDU não é mais processada, de acordo com o trecho do documento (R25-11) SWS CANDriver p. 77.

Eventos são detectados por interrupção ou por polling de flags de status. Uma operação puramente baseada em polling, sem qualquer interrupção, deve ser configurável. No polling, as funções principais chamam os mesmos callbacks, apenas a partir do contexto de tarefa em vez do contexto de ISR SWS CANDriver p. 41. Cada função principal realiza o polling de um tipo de evento:

As descrições de Read e Write no R20-11 mencionam apenas o caso POLLING [SWS_Can_00225] [SWS_Can_00226]. Os trechos documentais de releases posteriores complementam com MIXED; nesse caso, apenas objetos com CanHardwareObjectUsesPolling = TRUE são consultados por polling SWS CANDriver p. 81 SWS CANDriver p. 79. Os requisitos do R20-11 não comprovam essa extensão. Se múltiplos períodos forem configurados via CanMainFunctionRWPeriods, os nomes das funções recebem o sufixo _<ShortName> [SWS_Can_00441] SWS CANDriver p. 122. Sem nenhum polling, uma função principal pode ser implementada como um define vazio SWS CANDriver p. 81.

Recepção de uma L-PDU em modo pollingBSW SchedulerCanCAN-ControllerL-PDU-CalloutCanIfCanIf-NutzerloopzyklischCan_MainFunction_Read()verificar a existência de novas L-PDUsaltneue L-PDU vorhandenID normieren (Extended: MSB = 1),Daten ggf. in angepassten PufferoptL-PDU-Callout konfiguriert<LPDU_CalloutName>(Hrh, CanId, CanDataLegth, CanSduPtr)true / falseem caso de false: descartar L-PDUCanIf_RxIndication(Mailbox, PduInfoPtr)Indicação de Rx ao usuárionenhuma nova L-PDU

Diagrama de sequência: Recepção em modo de polling com normalização de ID, callout opcional de L-PDU e repasse ao CanIf. Fontes: [SWS_Can_00226], [SWS_Can_00443], SWS CANInterface p. 153, SWS CANDriver p. 43

Sleep, wakeup e controle de interrupções

O driver trata apenas wakeups que o próprio controlador detecta, e não aqueles que ocorrem através do transceptor SWS CANDriver p. 45. Em caso de wakeup por hardware, o controlador passa de SLEEP para STOPPED. A L-PDU causadora não é processada adiante. EcuM_CheckWakeup é chamado na interrupção ou em Can_MainFunction_Wakeup, com a fonte configurada via CanWakeupSourceRef SWS CANDriver p. 35. O EcuM chama então Can_CheckWakeup através do CanIf. Essa função reporta um wakeup detectado via EcuM_SetWakeupEvent [SWS_Can_00360] SWS CANDriver p. 63. Para evitar falsos wakeups, o EcuM e o CanIf realizam a validação sem a participação do driver SWS CANDriver p. 45.

Can_DisableControllerInterrupts e Can_EnableControllerInterrupts são reentrantes e atuam de forma aninhada. Após n chamadas de disable, são necessárias n chamadas de enable. Um enable sem prévio disable permanece ineficaz [SWS_Can_00231] [SWS_Can_00232] SWS CANDriver p. 61 SWS CANDriver p. 62.

Wakeup a partir do barramento CANCAN-ControllerCanEcuMCanIfUse Case: Controller in CAN_CS_SLEEPEvento de wakeup a partir do barramentoaltInterrupt-BetriebWakeup-ISRPolling-BetriebCan_MainFunction_Wakeup()Controller SLEEP -> STOPPED,não processar L-PDU disparadoraEcuM_CheckWakeup(fonte de CanWakeupSourceRef)Verificar fonte de wakeup via CanIfCan_CheckWakeup(Controller)optWakeup erkanntEcuM_SetWakeupEventE_OKValidierung gegen Fehlwakeupspor EcuM e CanIf, sem Can

Diagrama de sequência: Wakeup do barramento a partir de SLEEP, notificação ao EcuM e consulta via CanIf com Can_CheckWakeup. Fontes: [SWS_Can_00360], [SWS_Can_00228], SWS CANDriver p. 45, SWS CANDriver p. 35

Conjuntos de configuração, partições e referência de instância

Can_Init recebe um ponteiro para Can_ConfigType. Essa estrutura específica de hardware contém configurações para todos os controladores e referências às configurações individuais de controlador [SWS_Can_00223] [SWS_Can_00413]. O módulo suporta VARIANT-PRE-COMPILE e VARIANT-POST-BUILD SWS CANDriver p. 96. No exemplo post-build, um de vários conjuntos de configuração é selecionado durante a chamada de Can_Init EXP LayeredSoftwareArchitecture p. 120. Por controlador, CanController define, entre outros, CanRxProcessing, CanTxProcessing, CanBusoffProcessing, CanWakeupProcessing e pelo menos uma CanControllerBaudrateConfig SWS CANDriver p. 101.

Em sistemas multipartição, o módulo opera em cada partição como uma instância independente. Uma chamada de API tem efeito apenas em sua própria partição [SWS_Can_CONSTR_00508]. Aplicam-se três regras para a atribuição de partições:

  • As partições em CanControllerEcucPartitionRef devem ser um subconjunto das partições em CanEcucPartitionRef [SWS_Can_CONSTR_00509].
  • O controlador e o canal de transceptor de um canal de comunicação referenciam a mesma partição [SWS_Can_CONSTR_00510].
  • O driver rejeita atribuições não suportadas [SWS_Can_00507].

Vários módulos Can em uma ECU diferenciam-se por um prefixo de função modificado SWS CANDriver p. 51.

Comportamento em caso de erro

Com a Development Error Detection ativada, o driver reporta erros de desenvolvimento ao DET. Os códigos vão de CAN_E_PARAM_POINTER (0x01), passando por CAN_E_UNINIT (0x05) e CAN_E_TRANSITION (0x06), até CAN_E_INIT_FAILED (0x09) [SWS_Can_91019]. Após o retorno do DET, a função retorna imediatamente; funções com valor de retorno fornecem então E_NOT_OK SWS CANDriver p. 48. Alguns exemplos:

Como erro de tempo de execução, CAN_E_DATALOST está definido para mensagens de recepção perdidas [SWS_Can_91020]. É provável que ele seja reportado através do Det_ReportRuntimeError exigido [SWS_Can_00234]. Pergunta Q-50225b25430c9660 (aberta)

Se um controlador entrar em Bus-off, ele transita de STARTED para STOPPED. O driver não executa recuperação de hardware. Ele reporta o evento por interrupção ou em Can_MainFunction_BusOff via CanIf_ControllerBusOff [SWS_Can_00227] SWS CANDriver p. 35. A recuperação é assumida pelo CanSM, que o CanIf informa com CanSM_ControllerBusOff SWS CANInterface p. 138. Interpretação: É provável que o reinício ocorra novamente através de Can_SetControllerMode(CAN_CS_STARTED), que recarrega a configuração durante esse processo SWS CANDriver p. 59. Pergunta Q-83e484ab9f8b1aac (aberta)

Detecção e notificação de bus-offCAN-ControllerCanBSW SchedulerCanIfCanSMController erreicht Bus-offaltInterrupt-BetriebBus-off-InterruptPolling-BetriebCan_MainFunction_BusOff()Statusbit lesenSTARTED -> STOPPED,sem recuperação por hardwareCanIf_ControllerBusOff(ControllerId)CanSM_ControllerBusOffRecuperação de bus-off cabe ao CanSMUse Case: Neustart (Interpretation)Neustart anfordern (Interpretation)Can_SetControllerMode(Controller, CAN_CS_STARTED)Reinicialização comzuletzt verwendeter Konfiguration

Diagrama de sequência: Deteção e notificação de um Bus-off até o CanSM. O reinício marcado como interpretação não está explicitamente comprovado. Fontes: [SWS_Can_00227], [SWS_Can_00234], SWS CANDriver p. 35, SWS CANInterface p. 138

Para diagnóstico, Can_GetControllerErrorState fornece o estado de erro: ACTIVE, PASSIVE ou BUSOFF [SWS_Can_91004] [SWS_Can_91003]. Os contadores de erros de Rx e Tx também podem ser consultados. Se o controlador não os disponibilizar, as funções retornam E_NOT_OK. Como o hardware mantém os contadores de forma assíncrona, os valores não servem para suposições sobre o estado do barramento [SWS_Can_00511] [SWS_Can_00516] SWS CANDriver p. 67. Can_ErrorType descreve um superconjunto de tipos típicos de falhas de hardware, desde erros de bit até travamento do barramento (bus-lock) [SWS_Can_91021].

Contra hardware que não responde, o driver utiliza um OsCounter para timeouts SWS CANDriver p. 23. Se uma mudança de modo não se tornar efetiva dentro de CanTimeoutDuration, Can_SetControllerMode sai da função em vez de bloquear SWS CANDriver p. 33. Se ocorrer um wakeup do barramento durante a transição para o modo sleep, Can_SetControllerMode(CAN_CS_STOPPED) retorna E_NOT_OK SWS CANDriver p. 35.

Evidências mais detalhadas

Muitas passagens do documento provêm de R23-11 a R25-11. Normativos para R20-11 são os requisitos citados. Diretamente de R20-11 provém o diagrama de estados SWS CANDriver p. 38.

Guia gerado por IA com base nos requisitos e passagens de documentos fornecidos no payload para R20-11. Suposições estão identificadas como interpretação; a especificação permanece determinante.

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

função Can_Init [SWS_Can_00223] 📄 PDF

void Can_Init (const Can_ConfigType* Config);

This function initializes the module.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 8afbe47dbadd Procedência
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

A função síncrona e não reentrante Can_Init inicializa todo o módulo do driver CAN, bem como as unidades de hardware associadas, de acordo com a configuração passada [SWS_Can_00223].

Utilização e contexto de chamada

A chamada de Can_Init é realizada obrigatoriamente pelo ECU State Manager durante a fase de inicialização da unidade de controle, antes mesmo que qualquer outra função do driver CAN possa ser chamada [SWS_Can_91012]. Como parâmetro, a função recebe através de Config um ponteiro para a configuração do driver (const Can_ConfigType*) e não retorna nenhum valor [SWS_Can_00223].

Escopo de inicialização e transições de estado

No âmbito da inicialização, a função define todos os registradores de hardware necessários e inicializa todos os controladores CAN AUTOSAR_SWS_CANDriver p. 33:

  • Inicialização de variáveis estáticas e flags internas [SWS_Can_91012],
  • Configuração de ajustes comuns para a unidade de hardware CAN completa [SWS_Can_91012],
  • Configurações específicas do controlador para cada controlador CAN individual [SWS_Can_91012].

Através da chamada da função são disparadas transições de estado do hardware CAN AUTOSAR_SWS_CANDriver p. 10, onde Can_Init realiza a configuração de registradores para transferir os controladores para o estado básico previsto [SWS_Can_91010] AUTOSAR_SWS_CANDriver p. 36.

Simultaneidade e restrições

Como Can_Init é especificada como não reentrante, nenhuma chamada paralela ou repetida deve ocorrer durante uma inicialização em andamento [SWS_Can_00223]. Além disso, determinadas configurações globais da unidade de hardware só podem ser definidas dentro de Can_Init AUTOSAR_SWS_CANDriver p. 33.

Esta nota de uso foi gerada automaticamente com base nos dados de especificação do AUTOSAR Classic R20-11.

Guia do implementador em breve (complexidade I1)

função Can_DeInit [SWS_Can_91002] 📄 PDF

void Can_DeInit (void);

This function de - initializes the module.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 982976925c7a Procedência Perguntas em aberto (2)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

A função Can_DeInit serve para a desinicialização do módulo do driver CAN ([SWS_Can_91002]). Ela possui a assinatura void Can_DeInit(void), não recebe parâmetros, não fornece valor de retorno e é executada de forma síncrona e não reentrante ([SWS_Can_91002]). A interface está disponível através do cabeçalho Can.h ([SWS_Can_91002]).

A chamada inicia uma transição de estado controlada por software (AUTOSAR_SWS_CANDriver p. 10; AUTOSAR_SWS_CANDriver p. 41). Nisso, Can_DeInit altera o estado do módulo (AUTOSAR_SWS_CANDriver p. 33) e redefine todos os controladores CAN (AUTOSAR_SWS_CANDriver p. 41).

Simultaneidade e restrições

Para a execução aplicam-se pré-condições rígidas e requisitos de ordem relativos aos estados do hardware e do módulo:

Interação

O comportamento de erro e de transição reflete os fluxos consolidados do driver, segundo os quais transições de estado inválidas são interceptadas de forma uniforme ([SWS_Can_00441]).

Este texto foi gerado por uma IA com base na especificação AUTOSAR CP R20-11.

função 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.

função 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.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: a4b356b48b8a Procedência Perguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

A função Can_SetControllerMode (disponibilizada através de Can.h com o Service-ID 0x03) executa transições de estado disparadas por software da máquina de estados do controlador CAN ([SWS_Can_00230], AUTOSAR_SWS_CANDriver p. 35). Ela realiza os ajustes de registradores relativos ao hardware para provocar as transições entre os estados básicos do controlador UNINIT, STOPPED, STARTED e SLEEP ([SWS_Can_91010], AUTOSAR_SWS_CANDriver §7.3 «CAN Controller State Machine»).

Utilização e semântica

A chamada ocorre com o parâmetro Controller para a identificação do controlador CAN e Transition do tipo Can_ControllerStateType para a especificação da transição de estado desejada ([SWS_Can_00230]). O serviço é definido como assíncrono e não reentrante (Non Reentrant) ([SWS_Can_00230]). Um valor de retorno de E_OK confirma que a solicitação foi aceita; E_NOT_OK indica que a solicitação foi rejeitada e que existe um erro de desenvolvimento ([SWS_Can_00230], [SWS_Can_00441]).

Sequência e interação

Após a definição da configuração dos registradores, Can_SetControllerMode é finalizada (AUTOSAR_SWS_CANDriver p. 38). Como o módulo Can não armazena as mudanças de estado do hardware em si ([SWS_Can_91010]), presume-se que a função cíclica Can_Mainfunction_Mode assuma a conclusão assíncrona ou a verificação da transição iniciada por Can_SetControllerMode (AUTOSAR_SWS_CANDriver p. 38). Pergunta Q-03edb1b665a1624b (aberta)

Este texto foi gerado por uma IA com base nos dados de especificação do AUTOSAR R20-11.

Guia do implementador em breve (complexidade I1)

função Can_DisableControllerInterrupts [SWS_Can_00231] 📄 PDF

void Can_DisableControllerInterrupts (uint8 Controller);

This function disables all interrupts for this CAN controller.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 9d72b1d46d5d Procedência Perguntas em aberto (2)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

A função síncrona e reentrante Can_DisableControllerInterrupts desativa todas as interrupções para um controlador CAN especificado ([SWS_Can_00231]). A passagem ocorre através do parâmetro Controller sem valor de retorno ([SWS_Can_00231]).

Em relação ao contexto de chamada e à concorrência, a função foi projetada para ser reentrante e suporta chamadas múltiplas (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). Interpretação: Uma chamada múltipla provavelmente incrementa um contador interno de aninhamento, de modo que as interrupções só voltem a ser ativadas após um número correspondente de chamadas de liberação (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts», AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). Pergunta Q-61be56207aa92ee0 (aberta)

No âmbito do tratamento de erros, a especificação exige o disparo do erro CAN_E_UNINIT caso o módulo do driver ainda não esteja inicializado no momento da chamada (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). Além disso, a especificação requer o disparo de um outro erro (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»); presumivelmente, isso serve para a verificação de um identificador de controlador inválido. Pergunta (aberta)

Na interação dentro do driver CAN, a chamada serve para proteger seções críticas relativas ao controlador enquanto o controlador permanece ativo (AUTOSAR_SWS_CANDriver §7.5 «Interrupt handling»). Limpezas formais e alterações históricas de interface do driver estão documentadas nas notas de release ([SWS_Can_00441]).

Este texto foi gerado por uma IA e serve como nota de uso complementar à especificação.

função Can_EnableControllerInterrupts [SWS_Can_00232] 📄 PDF

void Can_EnableControllerInterrupts (uint8 Controller);

This function enables all allowed interrupts.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 374e141963cb Procedência Perguntas em aberto (2)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

A função síncrona e reentrante Can_EnableControllerInterrupts reativa todas as interrupções permitidas para o controlador CAN especificado através do parâmetro Controller ([SWS_Can_00232]). Ela não possui valor de retorno e é disponibilizada através do arquivo de cabeçalho Can.h ([SWS_Can_00232]).

Em relação ao fluxo, a função lê flags de controle do lado do software (AUTOSAR_SWS_CANDriver p. 65). Se as interrupções do controlador tiverem sido desativadas várias vezes anteriormente, Can_EnableControllerInterrupts deve ser chamada o mesmo número de vezes antes da liberação propriamente dita (AUTOSAR_SWS_CANDriver p. 65). Interpretação: O driver provavelmente gerencia seções de bloqueio aninhadas através de contadores ou flags internos, de modo que as interrupções de hardware só sejam reativadas após a compensação completa de todas as chamadas de desativação. Pergunta Q-6781f0fc9ad7d221 (aberta)

Se a função for chamada antes de o driver CAN ter sido inicializado corretamente, ela reporta o erro CAN_E_UNINIT (AUTOSAR_SWS_CANDriver p. 66). Isso deve ser tratado no contexto do driver como um Development-Error ([SWS_Can_00441]). Pergunta Q-efbbcf03a2589e4e (aberta) No estado não inicializado, a função não executa nenhuma outra ação no controlador (AUTOSAR_SWS_CANDriver p. 66).

Esta nota de uso foi gerada automaticamente com base na especificação.

função Can_CheckWakeup [SWS_Can_00360] 📄 PDF

Std_ReturnType Can_CheckWakeup (uint8 Controller);

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

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 720a4fc64f2a Procedência
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

Uso e comportamento

A função síncrona Can_CheckWakeup verifica, para um determinado controlador CAN, se um evento de wake-up foi detectado ([SWS_Can_00360], AUTOSAR_SWS_CANDriver p. 48, AUTOSAR_SWS_CANDriver p. 67). Ela está disponível através do arquivo de cabeçalho Can.h e possui o ID de serviço 0x0b ([SWS_Can_00360]).

  • Parâmetro: Controller (in) designa o identificador do controlador CAN cujo estado deve ser verificado quanto a um wake-up ([SWS_Can_00360]).
  • Valor de retorno: Retorna Std_ReturnType. O valor de retorno E_OK sinaliza que a chamada da API foi aceita, enquanto E_NOT_OK indica a rejeição ([SWS_Can_00360]).
  • Simultaneidade: A função é definida como não reentrante (Non Reentrant) ([SWS_Can_00360]).

Configuração e tratamento de erros

A disponibilidade da função é configurável em tempo de pré-compilação; o serviço Can_CheckWakeup pode ser incluído no código ou removido dele por meio disso (AUTOSAR_SWS_CANDriver p. 67, AUTOSAR_SWS_CANDriver p. 97). Se a função for chamada antes que o driver CAN tenha sido inicializado, ela reporta o erro CAN_E_UNINIT (AUTOSAR_SWS_CANDriver p. 67).

Interação

A chamada de Can_CheckWakeup é normalmente disparada pela CAN Interface (AUTOSAR_SWS_CANDriver p. 48). No caso de um evento de wake-up no barramento, CanIf_CheckWakeup pode ser chamado durante o processamento de EcuM_CheckWakeup (AUTOSAR_SWS_CANInterface §7.18.4.1 «Wake-up detection»). De acordo com [SWS_CANIF_00395], CanIf consulta aqui, via Can_CheckWakeup() ou CanTrcv_CheckWakeup(), qual dispositivo de hardware concreto acionou o wake-up do barramento (AUTOSAR_SWS_CANInterface p. 55).

Esta nota de uso foi criada de forma automatizada e baseia-se exclusivamente nas especificações da release R20-11 do AUTOSAR.

função 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.

função 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.

função 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.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: f2d4ad3f2f32 Procedência Perguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

Utilização e semântica

A função Can_Write é chamada sincronicamente pelo módulo CanIf para passar uma mensagem CAN para transmissão ao driver CAN (CanDrv) ([SWS_Can_00233]). O chamador passa dois parâmetros:

  • Hth: handle de transmissão de hardware, que define o objeto de transmissão a ser utilizado e determina implicitamente o controlador, já que os números de handle são unívocos dentro de uma unidade de hardware ([SWS_Can_00233]).
  • PduInfo: ponteiro para uma estrutura com dados úteis de SDU, comprimento de dados e identificador CAN ([SWS_Can_00233]).

Antes do envio, a função verifica o objeto de transmissão de hardware endereçado (SWS_CANDriver p. 73) e protege o swPduHandle transmitido (SWS_CANDriver p. 43). Por meio do valor de retorno do tipo Std_ReturnType (SRS_BSWGeneral §5.2.3.6 «Types and keywords»), o E_OK sinaliza a aceitação da solicitação, enquanto CAN_BUSY indica que nenhum buffer de transmissão de hardware está disponível ([SWS_Can_00233], SWS_CANDriver p. 51).

Tratamento de erros

Se ocorrer um erro de desenvolvimento durante a execução, a função retorna E_NOT_OK ([SWS_Can_00233], [SWS_Can_00441]). Interpretação: códigos de erro DET específicos não são mencionados explicitamente no extrato disponível; no entanto, handles incorretos ou ponteiros inválidos provavelmente levam ao retorno de E_NOT_OK. Pergunta Q-ca947a7e0e4fd7d6 (aberta)

Simultaneidade e restrições

Can_Write é especificado como reentrante ou thread-safe ([SWS_Can_00233], SWS_CANDriver p. 49). Se uma chamada preemptiva não puder ser executada de forma reentrante pelo lado do driver, isso também será informado ao CanIf por meio do valor de retorno CAN_BUSY ([SWS_Can_00233]). O chamador deve garantir que a memória da PDU permaneça válida e inalterada até o retorno da chamada da função (SWS_CANDriver p. 45).

Interação

Por meio de [SWS_Can_00416], é transmitido na chamada de qual tipo de PDU se trata (SWS_CANDriver p. 51), com o driver suportando a transmissão até o comprimento máximo de PDU (SWS_CANDriver p. 52).

Esta nota de uso foi gerada automaticamente com base nos documentos de especificação do AUTOSAR R20-11.

função <LPDU_CalloutName> [SWS_Can_00443] 📄 PDF

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

-

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 3538baa0cf7b Procedência Perguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

Utilização e contexto de chamada

A interface de call-out configurável <LPDU_CalloutName> é chamada opcionalmente pelo módulo CAN AUTOSAR a cada recepção de uma L-PDU (SWS_CANDriver §8.4.1 «Call-out function»). A declaração da função é disponibilizada através do arquivo de cabeçalho Can_Externals.h ([SWS_Can_00443]). O nome real da função é configurado de forma específica para o projeto ([SWS_Can_00443]).

Como parâmetros de entrada são passados o handle de recepção de hardware Hrh, o identificador CanId, o comprimento dos dados CanDataLegth bem como um ponteiro para os dados úteis CanSduPtr ([SWS_Can_00443]).

Filtragem e valor de retorno

A função fornece um valor boolean. Se o call-out retornar false, a L-PDU recebida não deve ser processada posteriormente ([SWS_Can_00444]). Interpretação: Se a chamada fornecer true, o encaminhamento regular da L-PDU para as camadas superiores deve ocorrer. Pergunta Q-e96e75e93881c3af (aberta)

Simultaneidade e restrições

A função é provida com a ID de serviço 0x20 e especificada como assíncrona (Asynchronous), bem como não reentrante (Non Reentrant) ([SWS_Can_00443]). Como ela é não reentrante, não devem ocorrer chamadas paralelas no mesmo contexto.

Este texto foi gerado por uma IA e serve como orientação. Vinculantes são as diretrizes da especificação AUTOSAR.

função 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.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: a6cd22a9e2b1 Procedência Perguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

A função Can_MainFunction_Write executa o polling cíclico de confirmações de envio (TX-Confirmation), desde que o parâmetro CAN_TX_PROCESSING esteja configurado para POLLING [SWS_Can_00225], AUTOSAR SWS CAN Driver §7 «Scheduled functions». Ela não tem parâmetros (void Can_MainFunction_Write(void)), possui o Service-ID 0x01 e é disponibilizada através do arquivo de cabeçalho SchM_Can.h para o escalonador [SWS_Can_00225]. Através de chaves de configuração, a função pode ser ativada ou desativada para o processamento da transmissão de PDU AUTOSAR SWS CAN Driver §10 «CanMainFunctionWrite».

Se nenhum polling for utilizado no sistema para operações de envio, Can_MainFunction_Write deve, de acordo com a especificação, ser implementada como um define vazio AUTOSAR SWS CAN Driver §7 «Scheduled functions». Isso deve evitar overhead desnecessário do escalonador em sistemas puramente controlados por interrupção. Pergunta Q-2152a35397130945 (aberta)

Na interação com Can_MainFunction_Read e Can_MainFunction_BusOff, a rotina forma a interface cíclica do driver para o SchM AUTOSAR SWS CAN Driver §7 «Scheduled functions». O processamento de confirmação ocorre diretamente no recurso de hardware ou no contexto de Can_MainFunction_Write, dependendo do modo AUTOSAR SWS CAN Driver §7 «Hardware Resources». A chamada concreta e o mapeamento baseiam-se nos respectivos elementos referenciados AUTOSAR SWS CAN Driver §10 «CanMainFunctionWrite», AUTOSAR SWS CAN Driver §10 «Call Context», suportados por um processamento de Tx relativo ao controlador [SWS_Can_00441].

Esta nota de uso foi gerada automaticamente com base na especificação AUTOSAR R20-11.

função 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.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 2c7a6a6247b4 Procedência Perguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

A função Can_MainFunction_Read serve para a consulta cíclica (polling) de mensagens de recepção CAN ([SWS_Can_00226]). Ela possui a assinatura void Can_MainFunction_Read (void) com o Service-ID 0x08 e é disponibilizada através do arquivo de cabeçalho SchM_Can.h para o controle de fluxo ([SWS_Can_00226]).

Utilização e configuração

A função executa o polling de indicações de RX quando o parâmetro de configuração CAN_RX_PROCESSING está ajustado para POLLING ([SWS_Can_00226]). No sistema, esse processamento pode ser configurado por controlador ([SWS_Can_00441]). Se nenhum polling for utilizado no driver CAN, Can_MainFunction_Read pode ser definida como uma macro vazia (AUTOSAR_SWS_CANDriver p. 77).

Simultaneidade e restrições

A chamada ocorre periodicamente no contexto do escalonador de acordo com o período de trigger parametrizado (AUTOSAR_SWS_CANDriver p. 22). Condições estritas se aplicam à execução:

Interpretação: O intervalo de chamada configurado da tarefa provavelmente deve ser dimensionado de modo que uma fase de processamento esteja sempre concluída antes do início do próximo ciclo, uma vez que a reentrância é inadmissível (AUTOSAR_SWS_CANDriver p. 47). Pergunta Q-1f2fa9db14970b12 (aberta)

Este texto foi gerado por uma IA com base na especificação AUTOSAR R20-11.

função 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'.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: d6a62aee0c17 Procedência Perguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

A função principal planejada Can_MainFunction_BusOff serve para o polling cíclico de eventos de bus-off dos controladores CAN, desde que estes estejam estaticamente configurados para polling [SWS_Can_00227], [SWS_Can_00109]. Ela possui a assinatura void Can_MainFunction_BusOff(void), não recebe parâmetros, não retorna valor e é disponibilizada através do cabeçalho SchM_Can.h para o controle de fluxo [SWS_Can_00227].

Utilização e interação

Eventos de hardware podem ser capturados no driver CAN ou por interrupção ou por polling de flags de status correspondentes, sendo que a configuração da consulta depende do hardware [SWS_Can_00099]. O driver também pode ser configurado de modo a dispensar completamente interrupções [SWS_Can_00007]. Se nenhum polling for utilizado em todo o sistema, o módulo Can pode implementar a função como uma macro vazia [SWS_Can_00183].

Se um evento de bus-off for detectado em Can_MainFunction_BusOff através de bits de status, o módulo realiza os ajustes de registradores necessários – por exemplo, para evitar uma recuperação automática de hardware SWS_CANDriver §7.3 «CAN Controller State Machine», [SWS_Can_91010]. Em seguida, o módulo notifica a camada superior CanIf através do callback associado, no qual ocorre a mudança de estado de software do controlador SWS_CANDriver §7.3 «CAN Controller State Machine».

Contexto de chamada e restrições

Na operação por polling, o contexto de chamada da notificação de callback não é a ISR, mas a tarefa executora de Can_MainFunction_BusOff; no entanto, todas as funções de callback devem ser implementadas como se fossem chamadas a partir do contexto de ISR SWS_CANDriver §7.9 «Notification concept». Em relação à reentrância, o payload não contém indicações explícitas; presumivelmente a função não é reentrante, pois acessa registradores e estados globais do controlador. Pergunta Q-38fcd72c40ce3e66 (aberta)

Esta nota de uso foi gerada por uma IA e baseia-se exclusivamente nos extratos de especificação da versão AUTOSAR R20-11.

função 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'.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: ce643213c50c Procedência
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

A função principal Can_MainFunction_Wakeup executa o polling cíclico de eventos de wake-up que estão estaticamente configurados para polling ([SWS_Can_00228]). A função possui a assinatura void Can_MainFunction_Wakeup(void), não recebe parâmetros, não retorna valor e é disponibilizada através do cabeçalho SchM_Can.h para o Schedule Manager (AUTOSAR_SWS_CANDriver p. 79). O período de execução da função é configurado em segundos (AUTOSAR_SWS_CANDriver p. 92).

No âmbito da máquina de estados do controlador CAN (SWS_CANDriver §7.3 «CAN Controller State Machine»), eventos externos de wake-up de hardware podem ser sinalizados, em vez de interrupções, através de um bit de status que é consultado em Can_MainFunction_Wakeup ([SWS_Can_91010]). Além disso, em transições de estado, a função faz polling de uma flag correspondente do registrador de status CAN até que esta sinalize a efetivação da alteração ([SWS_Can_00370]). Após uma mudança de estado bem-sucedida, o driver CAN reporta o novo estado à CAN Interface com a função de callback CanIf_ControllerModeIndication, em relação à CanIf ControllerId abstrata ([SWS_Can_00370]).

Em termos de configuração e uso de recursos, a API Can_MainFunction_Wakeup() pode ser ativada ou desativada para o tratamento de eventos de wake-up (AUTOSAR_SWS_CANDriver p. 97). Se nenhum polling for utilizado para eventos de wake-up na ECU, Can_MainFunction_Wakeup pode ser definida como uma macro vazia (AUTOSAR_SWS_CANDriver p. 79).

Esta nota de uso foi gerada automaticamente com base na especificação AUTOSAR CP R20-11.

função Can_MainFunction_Mode [SWS_Can_00368] 📄 PDF

void Can_MainFunction_Mode (void);

This function performs the polling of CAN controller mode transitions.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: feee99301166 Procedência Perguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

Utilização e funcionamento

A função principal agendada Can_MainFunction_Mode ([SWS_Can_00368]) realiza o polling de transições de estado dos controladores CAN. Ela não possui parâmetros de passagem nem valor de retorno (void Can_MainFunction_Mode(void), ID de serviço 0x0c) e é declarada através do cabeçalho SchM_Can.h SWS_CANDriver §8.5.1.5 «Can_MainFunction_Mode».

A função é chamada continuamente de forma cíclica (AUTOSAR_SWS_CANInterface p. 143). Ela verifica o hardware quanto à alteração do modo de um controlador CAN. Caso seja detectada uma alteração, a interface CAN é notificada por meio da chamada de CanIf_ControllerModeIndication(Controller, ControllerMode).

Monitoramento assíncrono de modo

Se uma alteração de modo tiver sido solicitada anteriormente via Can_SetControllerMode() e essa chamada retornar com sucesso para CanIf, Can_MainFunction_Mode reconhece a transição de estado concluída do hardware do controlador. Em seguida, ela informa CanIf de forma assíncrona mediante CanIf_ControllerModeIndication sobre o novo estado, como por exemplo CAN_CS_STARTED AUTOSAR_SWS_CANInterface p. 144.

Contexto de chamada e condições de contorno

Devido à disponibilização através de SchM_Can.h e à definição como Scheduled Function, a chamada periódica provavelmente ocorre por meio do BSW Scheduler. Pergunta Q-42edbc2aa591e8d7 (aberta) Não são definidos no payload códigos de erro específicos ou etapas de desenvolvimento para esta função.

Este texto foi criado por uma IA com base nas especificações AUTOSAR.

Guia do implementador em breve (complexidade 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.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 0cb922d28e06 Procedência Perguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

O tipo de enumeração Can_ErrorStateType de Can_GeneralTypes.h descreve os estados de falha e de operação de um controlador CAN [SWS_Can_91003]. Ele mapeia o comportamento do controlador no barramento CAN através de três estados SWS_CANDriver §8.2.7 «Can_ErrorStateType»:

  • CAN_ERRORSTATE_ACTIVE: o controlador CAN participa plenamente da comunicação do barramento [SWS_Can_91003].
  • CAN_ERRORSTATE_PASSIVE: o controlador CAN participa da comunicação, mas não envia mais quadros de erro ativos (Error Frames) [SWS_Can_91003].
  • CAN_ERRORSTATE_BUSOFF: o controlador CAN está isolado do barramento em decorrência de erros de transmissão graves e não participa mais da comunicação [SWS_Can_91003].

Em tempo de execução, o estado é consultado através do serviço síncrono de driver Can_GetControllerErrorState [SWS_Can_91004]. O parâmetro de saída ErrorStatePtr deste recebe o valor determinado. A função de nível superior CanIf_GetControllerErrorState na CAN Interface AUTOSAR_SWS_CANInterface p. 78 «CanIf_GetControllerErrorState» também utiliza a mesma assinatura. Com relação à simultaneidade, aplica-se que Can_GetControllerErrorState é especificado como não reentrante para o mesmo ControllerId [SWS_Can_91004].

Em caso de erro, Can_GetControllerErrorState fornece o valor de retorno E_NOT_OK e, no caso de consulta bem-sucedida, E_OK [SWS_Can_91004]. Com a detecção de desenvolvimento (DET) ativada, uma chamada antes da inicialização do driver leva ao erro CAN_E_UNINIT [SWS_Can_91005]. Um ControllerId inválido dispara o erro de desenvolvimento CAN_E_PARAM_CONTROLLER [SWS_Can_91006], e a passagem de um ponteiro nulo para ErrorStatePtr é rejeitada com um erro de desenvolvimento [SWS_Can_91007].

Interpretação: o chamador provavelmente deve alocar a área de memória para ErrorStatePtr sob sua própria responsabilidade, uma vez que a interface trata o ponteiro como parâmetro puramente de saída e exclui ponteiros nulos via erro de desenvolvimento. Pergunta Q-5c907c21bcb50893 (aberta)

Este texto foi gerado por uma IA com base na especificação AUTOSAR R20-11.

Guia do implementador em breve (complexidade I1)

tipo Can_ControllerStateType [SWS_Can_91013] 📄 PDF

States that are used by the several Controller Mode functions.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 5eb69ce0444e Procedência
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

O tipo de enumeração Can_ControllerStateType define os estados fundamentais de operação de um controlador CAN: CAN_CS_UNINIT, CAN_CS_STARTED, CAN_CS_STOPPED e CAN_CS_SLEEP [SWS_Can_91013]. O tipo é utilizado transversalmente entre módulos para o controle de estados guiado por software da máquina de estados do controlador CAN [SWS_Can_00017].

Os valores são aplicados nos seguintes contextos:

Quanto à simultaneidade e ao tratamento de erros, aplica-se: as funções de driver Can_SetControllerMode e Can_GetControllerMode são não reentrantes [SWS_Can_00230], [SWS_Can_91014]. Em caso de chamada de Can_GetControllerMode antes da inicialização do driver, o erro de desenvolvimento CAN_E_UNINIT é reportado e E_NOT_OK é retornado [SWS_Can_91016]. A função de callback CanSM_ControllerModeIndication é reentrante para diferentes controladores e reporta um ID de controlador não configurado com CANSM_E_PARAM_CONTROLLER ao DET [SWS_CanSM_00396], [SWS_CanSM_00397].

Esta nota de uso baseia-se nas definições das especificações do driver CAN, da interface CAN e do CAN State Manager no AUTOSAR Classic R20-11.

Guia do implementador em breve (complexidade 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.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: e538be0a65be Procedência Perguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

O tipo de enumeração Can_ErrorType define um superconjunto padronizado de causas de erros CAN que o hardware CAN típico pode registrar e reportar para camadas superiores [SWS_Can_91021]. Ele é disponibilizado através do arquivo de cabeçalho Can_GeneralTypes.h SWS_CANDriver §8.2.9 «Can_ErrorType».

Como a enumeração é concebida como um superconjunto, nem todo controlador CAN suporta obrigatoriamente todos os valores especificados [SWS_Can_91021]. Entre os estados de erro definidos estão:

  • Erros de bit no monitoramento do barramento (CAN_ERROR_BIT_MONITORING1, CAN_ERROR_BIT_MONITORING0 ou, de forma resumida, CAN_ERROR_BIT),
  • Erros de confirmação (CAN_ERROR_CHECK_ACK_FAILED, CAN_ERROR_ACK_DELIMITER),
  • Perda de arbitragem do transmissor (CAN_ERROR_ARBITRATION_LOST),
  • Estados de sobrecarga devido a buffers de recepção cheios (CAN_ERROR_OVERLOAD),
  • Violações de formato e de bit stuffing (CAN_ERROR_CHECK_FORM_FAILED, CAN_ERROR_CHECK_STUFFING_FAILED),
  • Erros de CRC (CAN_ERROR_CHECK_CRC_FAILED), bem como
  • um bloqueio permanente do barramento em nível dominante (CAN_ERROR_BUS_LOCK) SWS_CANDriver §8.2.9 «Can_ErrorType».

Na interação dos módulos BSW, o tipo serve como parâmetro da função de callback CanIf_ErrorNotification para o repasse de erros de controlador para a CAN Interface AUTOSAR_SWS_CANInterface §8.x «CanIf_ErrorNotification». O valor passado deve corresponder ao estado de erro detectado pelo hardware subjacente AUTOSAR_SWS_CANDriver §7.x «Error Notification». Pergunta Q-d23c45dd3b23ec71 (aberta)

Este texto foi gerado por uma IA e serve para orientação 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#0a03608c
Content hash
0a03608c
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANDriver.pdf#nameddest=SWS_Can_00223

Inicialização e estado

Can_DeInit função

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 função

This function initializes the module.

void Can_Init (const Can_ConfigType* Config);

Serviços

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 função

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.