目录
一、概述
二、限制说明
三、功能说明
3.1 基础需求
3.2 CAN网络的状态机
3.3 错误分类
3.3.1 开发错误
3.3.2 运行错误
3.3.3 拓展生产错误
3.4 ECU在线主动/被动模式
四、API接口
4.1 API定义
4.2 调度接口
一、概述
该文档描述了AUTOSAR基本软件模块CAN状态管理器的功能、API和配置。AUTOSAR BSW堆栈为每个通信总线指定一个特定于总线的状态管理器。该模块应实现相应总线的控制流程。CAN状态管理器(CanSM)是通信服务层的一个成员。它与通信硬件抽象层和系统服务层进行交互。
二、限制说明
CanSM模块只能用于can通信。它的任务是使用CanIf模块来控制一个或多个底层的CAN控制器和CAN收发器驱动程序。不支持CAN以外的其他协议(即LIN或FlexRay)。
三、功能说明
CanSM模块负责CAN网络的控制流抽象:
(1)它会根据来自ComM模块的模式请求,改变已配置的CAN网络的通信模式。
(2)CanSM模块使用了CanIf模块的API。CanIf模块负责已配置的CAN控制器和CAN收发器的控制流抽象(CanIf模块的数据流抽象与CanSM模块无关)。CAN控制器模式和CAN收发器模式的任何变化都将由CanIf模块通知给CanSM模块。
(3)根据CanSM模块应为每个配置的CAN网络实现的CAN网络状态机的此通知和状态,CanSM模块会通知ComM和BswM。
3.1 基础需求
CANSM_BSM状态机:
【规范】CanSM模块应在内部存储每个已配置的CAN网络的当前网络模式。
【规范】CanSM模块内部存储的网络模式的值可以为COMM_NO_COMMUNICATION、COMM_SILENT_COMMUNICATION、COMM_FULL_COMMUNICATION。
【规范】如果CanSM状态机CANSM_BSM处于CANSM_BSM_S_NOT_INITIALIZED状态,拒绝ComM模块的网络模式请求。
【规范】如果CanSM重复了其中一个CanIf API,那么调用CanIf_SetControllerMode、CanIf_SetTrcvMode、CanIf_ClearTrcvWufFlag或CanIf_CheckTrcvWakeFlag的频率比CanSMModeRequestRepetitionMax高,没有返回值E_OK或没有相应的模式指示回调CanSM_ControllerModeIndication、CanSM_TransceiverModeIndication、CanSM_ClearTrcvWufFlagIndication或CanSM_CheckTransceiverWakeFlagIndication,CanSM应用ErrorId参数CANSM_E_MODE_REQUEST_TIMEOUT调用函数Det_ReportRuntimeError。
【规范】如果CanIf模块用回调函数CanSM_ConfirmPnAvailability通知已配置的CAN收发器的PN可用性给CanSM模块,然后CanSM模块将调用API CanNm_ConfirmPnAvailability,以相关的CAN网络作为通道,以确认对CanNm模块的PN可用性。
【规范】如果没有Can收发器被配置为一个CAN网络,然后CanSM模块应绕过所有指定的CanIf_SetTrcvMode调用CAN网络,并继续进行不同的状态转换,就好像它已经得到了假定的CanSM_TransceiverModeIndication。
【规范】CanSM模块应存储为每个已配置的CAN网络最新的通信模式请求,它已通过在API请求CanSM_RequestComMode中返回E_OK而被接受。,并将其作为相关CAN网络的状态机的触发器。
【规范】CanSM模块应在每次成功更改CAN控制器模式后进行存储。或总线关闭条件下改变到CAN_CS_STOPPED,每个CAN控制器内部改变模式。
3.2 CAN网络的状态机
状态:
- Trigger: PowerOn
- Trigger: CanSM_Init
- Trigger: CanSM_Init
- Trigger: T_START_WAKEUP_SOURCE
- Trigger: T_STOP_WAKEUP_SOURCE
- Trigger: T_FULL_COM_MODE_REQUEST
- Trigger: T_SILENT_COM_MODE_REQUEST
- Trigger: T_NO_COM_MODE_REQUEST
- Trigger: T_BUS_OFF
- Guarding condition: G_FULL_COM_MODE_REQUESTED
- Guarding condition: G_SILENT_COM_MODE_REQUESTED
- Effect: E_PRE_NOCOM
- Effect: E_NOCOM
- Effect: E_FULL_COM
- Effect: E_FULL_TO_SILENT_COM
- Effect: E_BR_END_FULL_COM
- Effect: E_BR_END_SILENT_COM
- Effect: E_SILENT_TO_FULL_COM
子状态机:
- CANSM_BSM_WUVALIDATION
- CANSM_BSM_S_PRE_NOCOM
- CANSM_BSM_S_SILENTCOM_BOR
- CANSM_BSM_S_PRE_FULLCOM
- CANSM_BSM_S_FULLCOM
- CANSM_BSM_S_CHANGE_BAUDRATE
3.3 错误分类
3.3.1 开发错误
3.3.2 运行错误
3.3.3 拓展生产错误
详情请参考手册。
3.4 ECU在线主动/被动模式
【规范】CanSM状态管理器应存储所请求的ECU被动模式的状态。
【规范】当使用CanSM_Passive=true调用CanSM_SetEcuPassive时,CanSM将通过改变已配置的CAN控制器的所有PDU模式,通过调用API CanIf_SetPduMode,目前是CANIF_ONLINE到CANIF_TX_OFFLINE_ACTIVE。
【规范】CanSM_SetEcuPassive用CanSM_Passive=false调用,则CanSM应改变已配置的CAN控制器的所有PDU模式,即CANIF_TX_OFFLINE_ACTIVE到CANIF_ONLINE通过调用API CanIf_SetPduMode。
【规范】如果CanSM需要关于实际Pdu模式的信息,则CanSM应调用API CanIf_GetPduMode,以获取CanIf的当前Pdu模式。
四、API接口
4.1 API定义
- CanSM_Init
- CanSM_DeInit
- CanSM_RequestComMode ——CAN网络的通信模式更改为所请求的通信模式。
- CanSM_GetCurrentComMode ——输出CAN网络的当前的通信方式。
- CanSM_StartWakeupSource
- CanSM_StopWakeupSource
- CanSM_GetVersionInfo
- CanSM_SetBaudrate
- CanSM_SetEcuPassive ——此功能可用于将ECU的所有CanSM通道设置为仅接收模式
- CanSM_ControllerBusOff ——此函数通知CanSM关于某个CAN控制器上的总线关闭事件,
- CanSM_ControllerModeIndication ——此回调应通知CanSM模块关于CAN控制器模式的更改。
- CanSM_TransceiverModeIndication ——此回调应通知CanSM模块关于CAN收发器模式的更改。
- CanSM_TxTimeoutException
- CanSM_ClearTrcvWufFlagIndication
- CanSM_CheckTransceiverWakeFlagIndication
- CanSM_ConfirmPnAvailability ——此回调函数表示收发器正在以PN通信模式运行。
4.2 调度接口
- CanSM_MainFunction ——CanSM模块应为每个配置的CAN网络实现该模块