【AUTOSAR】【Can通信】CanSM

时间:2022-06-28 01:21:37

目录

一、概述

二、限制说明

三、功能说明

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)是通信服务层的一个成员。它与通信硬件抽象层和系统服务层进行交互。

【AUTOSAR】【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状态机:

【AUTOSAR】【Can通信】CanSM

【规范】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 开发错误

【AUTOSAR】【Can通信】CanSM

3.3.2 运行错误

【AUTOSAR】【Can通信】CanSM 

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定义

  1. CanSM_Init
  2. CanSM_DeInit
  3. CanSM_RequestComMode ——CAN网络的通信模式更改为所请求的通信模式。
  4. CanSM_GetCurrentComMode ——输出CAN网络的当前的通信方式。
  5. CanSM_StartWakeupSource
  6. CanSM_StopWakeupSource
  7. CanSM_GetVersionInfo
  8. CanSM_SetBaudrate
  9. CanSM_SetEcuPassive ——此功能可用于将ECU的所有CanSM通道设置为仅接收模式
  10. CanSM_ControllerBusOff ——此函数通知CanSM关于某个CAN控制器上的总线关闭事件,
  11. CanSM_ControllerModeIndication ——此回调应通知CanSM模块关于CAN控制器模式的更改。
  12. CanSM_TransceiverModeIndication ——此回调应通知CanSM模块关于CAN收发器模式的更改。
  13. CanSM_TxTimeoutException
  14. CanSM_ClearTrcvWufFlagIndication
  15. CanSM_CheckTransceiverWakeFlagIndication
  16. CanSM_ConfirmPnAvailability ——此回调函数表示收发器正在以PN通信模式运行。

4.2 调度接口

  1. CanSM_MainFunction ——CanSM模块应为每个配置的CAN网络实现该模块