CAN Driver (Can)
The CAN driver provides hardware-dependent access to the internal and external CAN controllers (CAN 2.0B, CAN FD, CAN XL).
Funktionen — Übersicht
void Can_Init (const Can_ConfigType* Config);This function initializes the module.void Can_GetVersionInfo (Std_VersionInfoType* versioninfo);This function returns the version information of this module.void Can_DeInit (void);This function de - initializes the module.Std_ReturnType Can_SetBaudrate (uint8 Controller, uint16 BaudRateConfig ID); ⚠️This service shall set the baud rate configuration of the CAN controller.Std_ReturnType Can_SetControllerMode (uint8 Controller, Can_ControllerStateType Transition);This function performs software triggered state transitions of the CAN controller State machine.void Can_DisableControllerInterrupts (uint8 Controller);This function disables all interrupts for this CAN controller.void Can_EnableControllerInterrupts (uint8 Controller);This function enables all allowed interrupts.Std_ReturnType Can_CheckWakeup (uint8 Controller);This function checks if a wakeup has occurred for the given controller.Std_ReturnType Can_GetControllerErrorState (uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr);This service obtains the error state of the CAN controller.Std_ReturnType Can_GetControllerMode (uint8 Controller, Can_ControllerStateType* ControllerModePtr);This service reports about the current status of the requested CAN controller.Std_ReturnType Can_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);Returns the Rx error counter for a CAN controller.Std_ReturnType Can_GetControllerTxErrorCounter (uint8 ControllerId, uint8* TxErrorCounterPtr);Returns the Tx error counter for a CAN controller.Std_ReturnType Can_Write (Can_HwHandleType Hth, const Can_PduType* PduInfo);This function is called by Can If to pass a CAN message to Can Drv for transmission.boolean <LPDU_CalloutName> (uint8 Hrh, Can_IdType CanId, uint8 CanDataLegth, const uint8* CanSduPtr);-void Can_MainFunction_Write (void);This function performs the polling of TX confirmation when CAN_ TX_ PROCESSING is set to POLLING.void Can_MainFunction_Read (void);This function performs the polling of RX indications when CAN_ RX_ PROCESSING is set to POLLING.void Can_MainFunction_BusOff (void);This function performs the polling of bus - off events that are configured statically as 'to be polled'.void Can_MainFunction_Wakeup (void);This function performs the polling of wake - up events that are configured statically as 'to be polled'.void Can_MainFunction_Mode (void);This function performs the polling of CAN controller mode transitions.
Typen — Übersicht
struct Can_ConfigTypeThis is the type of the external data structure containing the overall initialization data for the CAN driver and SFR settings...Can_PduTypeThis type unites Pdu Id (sw Pdu Handle), Sdu Length (length), Sdu Data (sdu), and Can Id (id) for any CAN L - SDU.Can_IdTypeRepresents the Identifier of an L - PDU.Can_HwHandleTypeRepresents the hardware object handles of a CAN hardware unit.struct Can_HwTypeThis type defines a data structure which clearly provides an Hardware Object Handle including its corresponding CAN Controller...enum Can_ErrorStateTypeError states of a CAN controller.enum Can_ControllerStateTypeStates that are used by the several Controller Mode functions.enum Can_ErrorTypeThe enumeration represents a superset of CAN Error Types which typical CAN HW is able to report.
Funktionen & Typen — Detailansicht
函数 Can_Init [SWS_Can_00223] 📄 PDF
void Can_Init (const Can_ConfigType* Config);
This function initializes the module.
同步且不可重入的函数 Can_Init 根据传入的配置初始化整个 CAN 驱动程序模块以及关联的硬件单元 [SWS_Can_00223]。
用法与调用上下文
在 ECU 的启动阶段中,Can_Init 的调用由 ECU State Manager 强制执行,且必须在允许调用 CAN 驱动程序的任何其他函数之前进行 [SWS_Can_91012]。作为参数,该函数通过 Config 接收指向驱动程序配置(const Can_ConfigType*)的指针,且不返回任何返回值 [SWS_Can_00223]。
初始化范围与状态转换
在初始化过程中,该函数设置所有必需的硬件寄存器并初始化所有 CAN 控制器 AUTOSAR_SWS_CANDriver 第33页:
- 初始化静态变量和内部标志 [SWS_Can_91012],
- 为完整的 CAN 硬件单元配置通用设置 [SWS_Can_91012],
- 针对每个单独 CAN 控制器的控制器专属设置 [SWS_Can_91012]。
通过该函数调用触发 CAN 硬件的状态转换 AUTOSAR_SWS_CANDriver 第10页,其中 Can_Init 执行寄存器配置,以将控制器转换至预期的基本状态 [SWS_Can_91010] AUTOSAR_SWS_CANDriver 第36页。
并发性与限制
由于 Can_Init 被指定为不可重入,因此在正在运行的初始化期间不得发生并行或重复调用 [SWS_Can_00223]。此外,硬件单元的某些全局设置只能在 Can_Init 内设置 AUTOSAR_SWS_CANDriver 第33页。
本使用说明根据 AUTOSAR Classic R20-11 的规范数据自动生成。
实现者指南即将推出(复杂度 I1)
函数 Can_GetVersionInfo [SWS_Can_00224] 📄 PDF
void Can_GetVersionInfo (Std_VersionInfoType* versioninfo);
This function returns the version information of this module.
函数 Can_DeInit [SWS_Can_91002] 📄 PDF
void Can_DeInit (void);
This function de - initializes the module.
函数 Can_DeInit 用于 CAN 驱动程序模块的去初始化 ([SWS_Can_91002])。它具有签名 void Can_DeInit(void),不接收任何参数,不返回任何返回值,并以同步且不可重入的方式执行 ([SWS_Can_91002])。该接口可通过头文件 Can.h 获取 ([SWS_Can_91002])。
该调用触发一个软件控制的状态转换 (AUTOSAR_SWS_CANDriver 第10页;AUTOSAR_SWS_CANDriver 第41页)。在此过程中,Can_DeInit 切换模块状态 (AUTOSAR_SWS_CANDriver 第33页) 并重置所有 CAN 控制器 (AUTOSAR_SWS_CANDriver 第41页)。
并发性与限制
对于执行,在硬件和模块状态方面存在严格的前提条件和顺序要求:
- 调用者必须确保没有 CAN 控制器处于不允许的状态 (AUTOSAR_SWS_CANDriver 第61页);据推测,活动通信过程必须预先终止。 问题 Q-311343fa42add3a3 (未决)
- 如果 CAN 模块在调用时未处于要求的初始状态 (AUTOSAR_SWS_CANDriver 第41页),则该函数报告错误
CAN_E_TRANSITION(AUTOSAR_SWS_CANDriver 第61页)。 - 同样,如果 CAN 控制器保持在阻止去初始化的状态,也会触发错误
CAN_E_TRANSITION(AUTOSAR_SWS_CANDriver 第61页)。解释:在转换之前,驱动程序可能假定所有控制器均处于停止状态。 问题 Q-435095949dafba5c (未决)
相互作用
错误与转换行为反映了经清理的驱动程序流程,根据该流程,无效的状态转换将被统一步骤捕获 ([SWS_Can_00441])。
本段文本由 AI 基于 AUTOSAR CP R20-11 规范生成。
函数 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.
函数 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.
函数 Can_SetControllerMode(通过 Can.h 提供,服务 ID 为 0x03)执行 CAN 控制器状态机的软件触发状态转换([SWS_Can_00230], AUTOSAR_SWS_CANDriver 第35页)。它执行与硬件相关的寄存器设置,以实现基本控制器状态 UNINIT、STOPPED、STARTED 和 SLEEP 之间的转换([SWS_Can_91010], AUTOSAR_SWS_CANDriver §7.3 “CAN Controller State Machine”)。
用法与语义
调用时使用参数 Controller 来标识 CAN 控制器,并使用类型为 Can_ControllerStateType 的 Transition 来指定所需的状态转换([SWS_Can_00230])。该服务被定义为异步且不可重入(Non Reentrant)([SWS_Can_00230])。返回值 E_OK 确认请求已被接受;E_NOT_OK 指示请求被拒绝且存在开发错误([SWS_Can_00230], [SWS_Can_00441])。
流程与交互
在设置寄存器配置后,将退出 Can_SetControllerMode(AUTOSAR_SWS_CANDriver 第38页)。由于 Can 模块本身不存储硬件的状态切换([SWS_Can_91010]),周期性函数 Can_Mainfunction_Mode 可能承担由 Can_SetControllerMode 发起的状态转换的异步完成或检查(AUTOSAR_SWS_CANDriver 第38页)。 问题 Q-03edb1b665a1624b (未决)
此文本由 AI 基于 AUTOSAR R20-11 的规范数据生成。
实现者指南即将推出(复杂度 I1)
函数 Can_DisableControllerInterrupts [SWS_Can_00231] 📄 PDF
void Can_DisableControllerInterrupts (uint8 Controller);
This function disables all interrupts for this CAN controller.
同步且可重入的函数 Can_DisableControllerInterrupts 为指定的 CAN 控制器禁用所有中断([SWS_Can_00231])。通过参数 Controller 传入,无返回值([SWS_Can_00231])。
关于调用上下文和并发性,该函数设计为可重入并支持多次调用(AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”)。Interpretation:多次调用可能会增加一个内部嵌套计数器,从而使中断仅在相应次数的使能调用之后才重新激活(AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”, AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”)。 问题 Q-61be56207aa92ee0 (未决)
在错误处理方面,若驱动程序模块在调用时尚未初始化,规范要求触发错误 CAN_E_UNINIT(AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”)。此外,规范要求触发另一个错误(AUTOSAR_SWS_CANDriver §8.3 “Can_DisableControllerInterrupts”);这可能用于检查是否存在无效的控制器标识。 问题 (未决)
在 CAN 驱动程序内部的交互中,该调用用于在控制器保持活动状态的同时保护与控制器相关的临界区(AUTOSAR_SWS_CANDriver §7.5 “Interrupt handling”)。驱动程序的形式清理和历史接口变更记录在发行说明中([SWS_Can_00441])。
此文本由 AI 生成,用作规范的补充使用说明。
函数 Can_EnableControllerInterrupts [SWS_Can_00232] 📄 PDF
void Can_EnableControllerInterrupts (uint8 Controller);
This function enables all allowed interrupts.
同步且可重入的函数 Can_EnableControllerInterrupts 为通过参数 Controller 指定的 CAN 控制器重新激活所有允许的中断([SWS_Can_00232])。它没有返回值,并通过头文件 Can.h 提供([SWS_Can_00232])。
关于执行流程,该函数读取软件端控制标志(AUTOSAR_SWS_CANDriver 第65页)。如果先前已多次禁用该控制器的中断,则在实际使能之前必须同样多次调用 Can_EnableControllerInterrupts(AUTOSAR_SWS_CANDriver 第65页)。Interpretation:驱动程序可能通过内部计数器或标志来管理嵌套的锁定段,使得硬件中断仅在完全抵消所有禁用调用之后才被重新激活。 问题 Q-6781f0fc9ad7d221 (未决)
如果在 CAN 驱动程序正确初始化之前调用该函数,它将报告错误 CAN_E_UNINIT(AUTOSAR_SWS_CANDriver 第66页)。在驱动程序上下文中,这可能被作为开发错误来处理([SWS_Can_00441])。 问题 Q-efbbcf03a2589e4e (未决)在未初始化状态下,该函数不对控制器执行任何进一步的操作(AUTOSAR_SWS_CANDriver 第66页)。
本使用说明基于规范自动生成。
函数 Can_CheckWakeup [SWS_Can_00360] 📄 PDF
Std_ReturnType Can_CheckWakeup (uint8 Controller);
This function checks if a wakeup has occurred for the given controller.
使用与行为
同步函数 Can_CheckWakeup 针对特定 CAN 控制器检查是否检测到唤醒事件([SWS_Can_00360], AUTOSAR_SWS_CANDriver 第48页, AUTOSAR_SWS_CANDriver 第67页)。它可通过头文件 Can.h 使用,并具有服务 ID 0x0b([SWS_Can_00360])。
- 参数:
Controller(in)表示要检查其状态是否存在唤醒的 CAN 控制器的标识符([SWS_Can_00360])。 - 返回值:返回
Std_ReturnType。返回值E_OK指示 API 调用已被接受,而E_NOT_OK则指示拒绝([SWS_Can_00360])。 - 并发性:该函数被定义为不可重入(
Non Reentrant)([SWS_Can_00360])。
配置与错误处理
该函数的可用性可在预编译时配置;服务 Can_CheckWakeup 可据此包含在代码中或从中移除 (AUTOSAR_SWS_CANDriver 第67页, AUTOSAR_SWS_CANDriver 第97页)。如果在 CAN 驱动程序初始化之前调用该函数,它将报告错误 CAN_E_UNINIT (AUTOSAR_SWS_CANDriver 第67页)。
相互作用
对 Can_CheckWakeup 的调用通常由 CAN 接口触发 (AUTOSAR_SWS_CANDriver 第48页)。在总线发生唤醒事件的情况下,CanIf_CheckWakeup 可以在执行 EcuM_CheckWakeup 期间被调用 (AUTOSAR_SWS_CANInterface §7.18.4.1 “Wake-up detection”)。根据 [SWS_CANIF_00395],CanIf 在此通过 Can_CheckWakeup() 或 CanTrcv_CheckWakeup() 查询具体是哪个硬件设备触发了总线唤醒 (AUTOSAR_SWS_CANInterface 第55页)。
本使用说明由自动系统生成,且完全基于 AUTOSAR 规范版本 R20-11。
函数 Can_GetControllerErrorState [SWS_Can_91004] 📄 PDF
Std_ReturnType Can_GetControllerErrorState (uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr);
This service obtains the error state of the CAN controller.
函数 Can_GetControllerMode [SWS_Can_91014] 📄 PDF
Std_ReturnType Can_GetControllerMode (uint8 Controller, Can_ControllerStateType* ControllerModePtr);
This service reports about the current status of the requested CAN controller.
函数 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.
函数 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.
函数 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.
用法与语义
模块 CanIf 同步调用函数 Can_Write,以将待传输的 CAN 消息传递给 CAN 驱动程序(CanDrv)([SWS_Can_00233])。调用方在此传递两个参数:
Hth:硬件发送句柄,用于指定要使用的发送对象并隐式确定控制器,因为句柄编号在硬件单元内是唯一的([SWS_Can_00233])。PduInfo:指向包含 SDU 有效载荷数据、数据长度和 CAN 标识符的结构的指针([SWS_Can_00233])。
在发送之前,该函数检查被寻址的硬件发送对象(SWS_CANDriver 第73页)并保存传入的 swPduHandle(SWS_CANDriver 第43页)。通过类型为 Std_ReturnType(SRS_BSWGeneral §5.2.3.6 “Types and keywords”)的返回值,E_OK 指示接受请求,而 CAN_BUSY 则指示没有可用的硬件发送缓冲区([SWS_Can_00233], SWS_CANDriver 第51页)。
错误处理
如果在执行期间发生开发错误,该函数将返回 E_NOT_OK([SWS_Can_00233], [SWS_Can_00441])。Interpretation:在可用摘录中未明确提及具体 DET 错误代码;然而,错误的句柄或无效指针可能会导致返回 E_NOT_OK。 问题 Q-ca947a7e0e4fd7d6 (未决)
并发性与限制
Can_Write 被指定为可重入或线程安全([SWS_Can_00233], SWS_CANDriver 第49页)。如果驱动程序端无法以可重入方式执行抢占式调用,这也将通过返回值 CAN_BUSY 报告给 CanIf([SWS_Can_00233])。调用方必须确保 PDU 内存直到函数调用返回为止保持不变且有效(SWS_CANDriver 第45页)。
相互作用
在调用时通过 [SWS_Can_00416] 传递所涉及的 PDU 类型(SWS_CANDriver 第51页),其中驱动程序支持直至最大 PDU 长度的传输(SWS_CANDriver 第52页)。
本使用说明基于 AUTOSAR R20-11 的规范文档自动生成。
函数 <LPDU_CalloutName> [SWS_Can_00443] 📄 PDF
boolean <LPDU_CalloutName> (uint8 Hrh, Can_IdType CanId, uint8 CanDataLegth, const uint8* CanSduPtr);
-
用法与调用上下文
可配置的标注(Call-out)接口 <LPDU_CalloutName> 在每次接收到 L-PDU 时由 AUTOSAR CAN 模块可选调用(SWS_CANDriver §8.4.1 “Call-out function”)。该函数的声明通过头文件 Can_Externals.h 提供([SWS_Can_00443])。函数的实际名称根据项目具体进行配置([SWS_Can_00443])。
作为输入参数传递硬件接收句柄 Hrh、标识符 CanId、数据长度 CanDataLegth 以及指向有效载荷数据的指针 CanSduPtr([SWS_Can_00443])。
过滤与返回值
该函数返回一个 boolean 值。如果标注返回 false,则不得对接收到的 L-PDU 进行进一步处理([SWS_Can_00444])。解释:如果调用返回 true,则应将 L-PDU 正常转发至上层。 问题 Q-e96e75e93881c3af (未决)
并发性与限制
该函数带有服务 ID 0x20,并被指定为异步(Asynchronous)且不可重入(Non Reentrant)([SWS_Can_00443])。由于其不可重入,因此不得在同一上下文中发生并行调用。
本段文本由 AI 生成,旨在提供指导参考。具有约束力的是 AUTOSAR 规范中的要求。
函数 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.
只要参数 CAN_TX_PROCESSING 配置为 POLLING,函数 Can_MainFunction_Write 就会执行发送确认(TX-Confirmation)的周期性轮询 [SWS_Can_00225], AUTOSAR SWS CAN Driver §7 “Scheduled functions”。它无参数(void Can_MainFunction_Write(void)),具有服务 ID 0x01,并通过头文件 SchM_Can.h 提供给调度程序 [SWS_Can_00225]。通过配置开关可以启用或禁用该函数以进行 PDU 传输的处理 AUTOSAR SWS CAN Driver §10 “CanMainFunctionWrite”。
如果系统中完全不使用针对发送过程的轮询,根据规范应将 Can_MainFunction_Write 实现为空 define AUTOSAR SWS CAN Driver §7 “Scheduled functions”。在纯中断驱动的系统中,这可能有助于避免不必要的调度程序开销。 问题 Q-2152a35397130945 (未决)
在与 Can_MainFunction_Read 和 Can_MainFunction_BusOff 的交互中,该例程构成了驱动程序到 SchM 的周期性接口 AUTOSAR SWS CAN Driver §7 “Scheduled functions”。确认处理取决于模式,直接在硬件资源上或在 Can_MainFunction_Write 的上下文中进行 AUTOSAR SWS CAN Driver §7 “Hardware Resources”。具体调用和分配取决于分别引用的元素 AUTOSAR SWS CAN Driver §10 “CanMainFunctionWrite”、AUTOSAR SWS CAN Driver §10 “Call Context”,并由基于控制器的 Tx 处理提供支持 [SWS_Can_00441]。
本使用说明是基于规范 AUTOSAR R20-11 自动生成的。
函数 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.
函数 Can_MainFunction_Read 用于 CAN 接收消息([SWS_Can_00226])的周期性查询(轮询)。它具有签名 void Can_MainFunction_Read (void) 及服务 ID 0x08,并通过头文件 SchM_Can.h 提供给流程控制([SWS_Can_00226])。
使用与配置
当配置参数 CAN_RX_PROCESSING 设置为 POLLING 时,该函数执行 RX 指示的轮询([SWS_Can_00226])。在系统中,可以按控制器对该处理进行配置([SWS_Can_00441])。如果 CAN 驱动程序中完全不使用轮询,则可将 Can_MainFunction_Read 定义为空宏(AUTOSAR_SWS_CANDriver 第77页)。
并发性与限制
根据参数化的触发周期(AUTOSAR_SWS_CANDriver 第22页),在调度程序上下文中周期性进行调用。执行时适用严格的条件:
- 该函数不得被自身中断(AUTOSAR_SWS_CANDriver 第47页)。
- 通常,不得中断 CAN 主函数(如
Can_MainFunction_Read)(AUTOSAR_SWS_CANDriver 第49页),以确保在轮询模式下对驱动程序和硬件资源的一致访问(AUTOSAR_SWS_CANDriver 第46页)。
Interpretation:由于不可重入(AUTOSAR_SWS_CANDriver 第47页),任务的已配置调用间隔可能必须设定为使得一个处理阶段始终在下一个周期开始之前结束。 问题 Q-1f2fa9db14970b12 (未决)
本段文本由人工智能基于 AUTOSAR 规范 R20-11 生成。
函数 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'.
计划的主函数 Can_MainFunction_BusOff 用于周期性轮询 CAN 控制器的 Bus-Off 事件,前提是这些控制器被静态配置为待轮询 [SWS_Can_00227], [SWS_Can_00109]。它具有签名 void Can_MainFunction_BusOff(void),不接收参数,不返回值,并通过头文件 SchM_Can.h 提供给流程控制 [SWS_Can_00227]。
使用与交互
在 CAN 驱动程序中,硬件事件可以通过中断或通过轮询相应状态标志来捕获,其中查询的配置取决于硬件 [SWS_Can_00099]。驱动程序也可以配置为完全不使用中断 [SWS_Can_00007]。如果全系统根本不采用轮询,Can 模块可以将该函数实现为空宏 [SWS_Can_00183]。
如果在 Can_MainFunction_BusOff 中通过状态位检测到 Bus-Off 事件,该模块将进行必要的寄存器设置——例如用于避免硬件自动恢复 SWS_CANDriver §7.3 “CAN Controller State Machine”, [SWS_Can_91010]。随后,该模块通过相应的回调通知上层 CanIf,控制器的软件状态更改在该回调中发生 SWS_CANDriver §7.3 “CAN Controller State Machine”。
调用上下文与限制
在轮询模式下,回调通知的调用上下文不是 ISR,而是 Can_MainFunction_BusOff 的执行任务;尽管如此,所有回调函数都必须以如同从 ISR 上下文调用的方式实现 SWS_CANDriver §7.9 “Notification concept”。关于可重入性,有效载荷未包含明确说明;该函数可能是不可重入的,因为它访问全局控制器寄存器和状态。 问题 Q-38fcd72c40ce3e66 (未决)
本使用说明由 AI 生成,并仅基于 AUTOSAR 版本 R20-11 的规范摘录。
函数 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'.
主函数 Can_MainFunction_Wakeup 对静态配置为待轮询的唤醒事件执行周期性轮询([SWS_Can_00228])。该函数具有签名 void Can_MainFunction_Wakeup(void),不接收参数,不返回返回值,并通过头文件 SchM_Can.h 提供给调度管理器(AUTOSAR_SWS_CANDriver 第79页)。该函数的执行周期以秒为单位进行配置(AUTOSAR_SWS_CANDriver 第92页)。
在 CAN 控制器的状态机(SWS_CANDriver §7.3 “CAN Controller State Machine”)框架内,外部硬件唤醒事件可以通过在 Can_MainFunction_Wakeup 中查询的状态位来指示,而不是通过中断([SWS_Can_91010])。此外,在状态转换时,该函数轮询 CAN 状态寄存器的相应标志,直到其指示更改生效([SWS_Can_00370])。状态成功切换后,CAN 驱动程序使用回调函数 CanIf_ControllerModeIndication 向 CAN 接口报告新状态,涉及抽象的 CanIf ControllerId([SWS_Can_00370])。
关于配置和资源利用,可以启用或禁用用于处理唤醒事件的 API Can_MainFunction_Wakeup()(AUTOSAR_SWS_CANDriver 第97页)。如果在 ECU 中完全不使用针对唤醒事件的轮询,则可将 Can_MainFunction_Wakeup 定义为空宏(AUTOSAR_SWS_CANDriver 第79页)。
此使用说明基于 AUTOSAR CP R20-11 规范自动生成。
函数 Can_MainFunction_Mode [SWS_Can_00368] 📄 PDF
void Can_MainFunction_Mode (void);
This function performs the polling of CAN controller mode transitions.
使用与工作原理
计划的主函数 Can_MainFunction_Mode ([SWS_Can_00368]) 执行 CAN 控制器状态转换的轮询。它既没有传入参数,也没有返回值 (void Can_MainFunction_Mode(void),服务 ID 0x0c),并通过头文件 SchM_Can.h 声明 SWS_CANDriver §8.5.1.5 “Can_MainFunction_Mode”。
该函数会被持续周期性调用 (AUTOSAR_SWS_CANInterface 第143页)。它检查硬件以确认 CAN 控制器的模式是否已发生改变。在检测到更改时,将通过调用 CanIf_ControllerModeIndication(Controller, ControllerMode) 通知 CAN 接口。
异步模式监控
如果此前通过 Can_SetControllerMode() 请求了模式更改,并且该调用成功返回至 CanIf,则 Can_MainFunction_Mode 会识别控制器硬件已完成的状态转换。随后它通过 CanIf_ControllerModeIndication 将新状态(例如 CAN_CS_STARTED)异步通知给 CanIf AUTOSAR_SWS_CANInterface 第144页。
调用上下文与约束条件
由于通过 SchM_Can.h 提供并被定义为计划函数(Scheduled Function),周期性调用应由 BSW 调度程序执行。 问题 Q-42edbc2aa591e8d7 (未决)在载荷中并未为该函数定义具体的错误代码或开发步骤。
本文由 AI 基于 AUTOSAR 规范生成。
实现者指南即将推出(复杂度 I1)
类型 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.
类型 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.
类型 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
类型 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.
类型 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.
类型 Can_ErrorStateType [SWS_Can_91003] 📄 PDF
Error states of a CAN controller.
来自 Can_GeneralTypes.h 的枚举类型 Can_ErrorStateType 描述了 CAN 控制器的错误和运行状态 [SWS_Can_91003]。它通过三种状态映射控制器在 CAN 总线上的行为 SWS_CANDriver §8.2.7 “Can_ErrorStateType”:
CAN_ERRORSTATE_ACTIVE:CAN 控制器完全参与总线通信 [SWS_Can_91003]。CAN_ERRORSTATE_PASSIVE:CAN 控制器参与通信,但不再发送主动错误帧(Error Frames)[SWS_Can_91003]。CAN_ERRORSTATE_BUSOFF:CAN 控制器因严重传输错误而与总线隔离,不再参与通信 [SWS_Can_91003]。
在运行时,通过同步驱动程序服务 Can_GetControllerErrorState 查询该状态 [SWS_Can_91004]。其输出参数 ErrorStatePtr 接收所确定的值。CAN 接口中的上层函数 CanIf_GetControllerErrorState 也使用相同的签名 AUTOSAR_SWS_CANInterface 第78页 “CanIf_GetControllerErrorState”。关于并发性,针对同一 ControllerId,Can_GetControllerErrorState 被指定为不可重入 [SWS_Can_91004]。
在出错时 Can_GetControllerErrorState 返回返回值 E_NOT_OK,成功查询时返回 E_OK [SWS_Can_91004]。在启用开发错误检测(DET)的情况下,在驱动程序初始化之前调用会导致错误 CAN_E_UNINIT [SWS_Can_91005]。无效的 ControllerId 会触发开发错误 CAN_E_PARAM_CONTROLLER [SWS_Can_91006],并且为 ErrorStatePtr 传入空指针会被开发错误拒绝 [SWS_Can_91007]。
解释:调用者可能必须自行负责为 ErrorStatePtr 分配内存区域,因为该接口将指针视为纯输出参数,并通过开发错误排除空指针。 问题 Q-5c907c21bcb50893 (未决)
本段文本由人工智能基于 AUTOSAR 规范 R20-11 生成。
实现者指南即将推出(复杂度 I1)
类型 Can_ControllerStateType [SWS_Can_91013] 📄 PDF
States that are used by the several Controller Mode functions.
枚举类型 Can_ControllerStateType 定义了 CAN 控制器的基本运行状态:CAN_CS_UNINIT、CAN_CS_STARTED、CAN_CS_STOPPED 和 CAN_CS_SLEEP [SWS_Can_91013]。该类型跨模块用于 CAN 控制器状态机的软件控制状态管理 [SWS_Can_00017]。
这些值在以下上下文中使用:
- 状态请求:在
Can_SetControllerMode中,该类型作为转换值(参数Transition)用于异步请求新的运行状态 [SWS_Can_00230];与其对应存在CanIf_SetControllerModeAUTOSAR_SWS_CANInterface §- “CanIf_SetControllerMode”。驱动程序将请求转发给控制器硬件,实际的状态更改会立即或在数毫秒后生效 AUTOSAR_SWS_CANInterface §- “Can_SetControllerMode”。转换至CAN_CS_STARTED还会触发控制器的重新初始化 [SWS_Can_00384]。 - 状态查询:通过
Can_GetControllerMode可以通过输出指针ControllerModePtr同步查询当前状态 [SWS_Can_91014], [SWS_Can_91015](在CanIf_GetControllerMode中类似 AUTOSAR_SWS_CANInterface §- “CanIf_GetControllerMode”)。 - 状态指示:在完成切换后,诸如
CanSM_ControllerModeIndication[SWS_CanSM_00396]、CanIf_ControllerModeIndicationAUTOSAR_SWS_CANInterface §- “CanIf_ControllerModeIndication” 等回调以及用户回调 AUTOSAR_SWS_CANInterface §- “User_ControllerModeIndication” 会就新的控制器模式同步通知上层。
关于并发性和错误处理:驱动程序函数 Can_SetControllerMode 和 Can_GetControllerMode 不可重入 [SWS_Can_00230], [SWS_Can_91014]。若在驱动程序初始化之前调用 Can_GetControllerMode,则会报告开发错误 CAN_E_UNINIT 并返回 E_NOT_OK [SWS_Can_91016]。回调函数 CanSM_ControllerModeIndication 针对不同的控制器是可重入的,并向 DET 报告未配置的控制器 ID 为 CANSM_E_PARAM_CONTROLLER [SWS_CanSM_00396], [SWS_CanSM_00397]。
本使用说明基于 AUTOSAR Classic R20-11 中 CAN 驱动程序、CAN 接口和 CAN 状态管理器的规范规定。
实现者指南即将推出(复杂度 I1)
类型 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.
枚举类型 Can_ErrorType 定义了典型 CAN 硬件能够采集并报告给上层的 CAN 错误原因的标准超集 [SWS_Can_91021]。它通过头文件 Can_GeneralTypes.h 提供 SWS_CANDriver §8.2.9 “Can_ErrorType”。
由于该枚举被设计为超集,因此并非每个 CAN 控制器都必然支持所有指定的值 [SWS_Can_91021]。已定义的错误状态包括:
- 总线监控时的位错误(
CAN_ERROR_BIT_MONITORING1、CAN_ERROR_BIT_MONITORING0或统称为CAN_ERROR_BIT), - 应答错误(
CAN_ERROR_CHECK_ACK_FAILED、CAN_ERROR_ACK_DELIMITER), - 发送器仲裁丢失(
CAN_ERROR_ARBITRATION_LOST), - 由于接收缓冲区满导致的过载状态(
CAN_ERROR_OVERLOAD), - 格式违规和位填充违规(
CAN_ERROR_CHECK_FORM_FAILED、CAN_ERROR_CHECK_STUFFING_FAILED), - CRC 错误(
CAN_ERROR_CHECK_CRC_FAILED)以及 - 总线在显性电平上的持续阻塞(
CAN_ERROR_BUS_LOCK)SWS_CANDriver §8.2.9 “Can_ErrorType”。
在 BSW 模块的协作中,该类型用作回调函数 CanIf_ErrorNotification 的参数,用于将控制器错误转发到 CAN 接口 AUTOSAR_SWS_CANInterface §8.x “CanIf_ErrorNotification”。传入的值应与底层硬件所确定的错误状态相对应 AUTOSAR_SWS_CANDriver §7.x “Error Notification”。 问题 Q-d23c45dd3b23ec71 (未决)
本文由 AI 生成,用于技术指导。
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#017fb731- Content hash
017fb731- Source
- https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANDriver.pdf#nameddest=SWS_Can_00223
gemini-3.8-flash-low· 2026-10-13 · 德文原文