AUTOSAR CanSM模块的分享分为CanSM模块概念详解和CanSM模块配置及代码分析,具体的项目实战请关注本号的后续文章,本篇为CanSM模块配置及代码分析篇。
1.CanSM和其他模块交互时序分析
CanSM模块的所有交互接口都依赖于CanIf,ComM,BswM,Dem,CanNM等模块。这里以CanSM模块调用CanIf模块接口控制Can控制器为例,说明CanSM模块和其他模块的交互过程。
1.1 CanSm_StartCanController时序图
CanSM模块可同步或者异步的设置Can控制器模式。
同步:CanSM模块调用CanIf模块的接口函数CanIf_SetControllerMode设置Can控制器模式,直到接收到CanIf模块的的回调通知CanSM_ControllerModeIndication后CanIf_SetControllerMode函数才返回E_OK,此时Can控制器已经切换到预定的模式。
异步:CanSM模块调用CanIf模块的接口函数CanIf_SetControllerMode后立即返回,之后在CanSM模块的MainFunction中轮询CanIf模块的Indication通知。
1.2 CanSm_StopCanController时序图
和CanSm_StartCanController基本类似。
2.CanSM模块配置
CanSM配置主要包括CanSMConfiguration和CanSMGeneral的配置。
CanSMConfiguration: CAN网络的特殊配置,主要包括一些全局配置参数及一些子配置容器的配置。
CanSMGeneral: 通用配置项,主要配置一些预编译功能的开闭。
2.1 CanSMGeneral
CanSMDevErrorDetect: 配置是否开启Error检测上报功能。
CanSMGetBusOffDelayFunction: 该参数设置<User_GetBusOffDelay> callout函数的名称,CanSM使用该函数获取额外的L1/L2延迟时间。此功能仅在启用了CanSMEnableBusOffDelay的通道中调用。
CanSMGetBusOffDelayHeader: 该参数配置包含<User_GetBusOffDelay> callout函数原型的头文件。
CanSMIcomSupport: 配置CanSM中对虚拟网络特性的支持。
CanSMMainFunctionTimePeriod: 配置主函数的调度周期。
CanSMPncSupport: 配置是否支持局部网络功能。
CanSMSetBaudrateApi: 配置是否支持Can_SetBaudrate API的使用。
CanSMTxOfflineActiveSupport: 配置是否支持ECU被动功能。
CanSMVersionInfoApi: 配置是否支持版本检测API。
2.2CanSMConfiguration
CanSMModeRequestRepetitionMax: CanSM在进行模式切换请求过程中未收到对应模块模式切换成功的Indication后最大的重试次数。
CanSMModeRequestRepetitionTime: CanSM模块使用CanIf模块的接口重复进行模式切换请求的重复间隔时间。
CanSMManagerNetwork: 这个容器包含每个CAN网络的特定参数。
CanSMBorCounterL1ToL2: 此阈值定义Bus-Off恢复从第1级(短恢复时间)切换到第2级(长恢复时间)之前的Bus-Off计数。
CanSMBorTimeL1: 这个时间参数以秒为单位定义一级(短恢复时间)中Bus-Off恢复时间的持续时间。
CanSMBorTimeL2: 这个时间参数以秒为单位定义第2级(长恢复时间)中Bus-Off恢复时间的持续时间。
CanSMBorTimeTxEnsured: 此参数以秒为单位定义Bus-Off事件检查的持续时间。
CanSMBorTxConfirmationPolling: 如果CanSM轮询CanIf_GetTxConfirmationState API来决定要恢复的总线关闭状态,而不是使用CanSMBorTimeTxEnsured参数来决定,则应该配置此参数。
CanSMEnableBusOffDelay: 这个参数定义了是否应该为这个网络调用<User_GetBusOffDelay>。
CanSMComMNetworkHandleRef: ComM模块中标识一个Can网络的唯一句柄(handle, ComMChannel)。
CanSMTransceiverId: 标识CAN收发器的句柄。
2.2.1 CanSMController
CanSMControllerId: 标识CAN控制器的句柄。
2.2.2 CanSMDemEventParameterRefs
容器中引用DemEventParameter元素,当发生相应的错误时,应该使用API Dem_SetEventStatus调用这些元素。
CANSM_E_MODE_REQUEST_TIMEOUT: 参考配置的DEM事件来报告这个CAN网络的总线关闭错误。
3.ComM模块代码分析
3.1 重要数据结构分析
(1)配置代码
配置项结构体:
CanSM.h中声明配置项数据结构
CanSM_PBcfg.c中定义了这些配置项。
(2)模块的实时状态数据结构
每个通道都会有一个实时的状态机,以及一些运行中的实时状态,这些状态一般保存在一个全局数据结构当中。
CanSM_Init.c中的全局数组保存当前每个通道的模式。
CanSM.h中的枚举定义了所有的模式
这些全局变量是我们在调试ComM的时候需要观测的重要数据结构,通常在排查问题的时候,我们仅仅需要观测这几个全局变量。
3.2 主逻辑代码分析
自顶向下分析一个Can模式请求过程:
ComM_Cfg.c中配置ComM模块通过CanSM_RequestComMode函数请求CanSM模式。
ComM模块怎么调用CanSM_RequestComMode函数,看ComM模块的具体分析。
分析CanSM_RequestComMode函数:
CanSM_MainFunction中会根据CanSM_ReqComM_Mode_en的设置执行相应的操作。
3.3 Bus-Off回调函数使用分析
自底向上分析一个busoff事件的快慢恢复处理:
发生buss off事件后底层CanDrv调用CanIf_BusOffNotification回调函数,CanIf模块调用CanSM的CanSM_ControllerBusOff回调函数通知到CanSM模块。
CanSM_ControllerBusOff函数负责通知BSW和COM及DEM模块busoff事件。
CanSM_MainFunction根据BusOff recovery配置及BusOff全局标志置位后调用CanSM_BusOffTransitions进行busoff恢复。
CanSM_BusOffTransitions函数执行Can BusOff恢复策略
End
欢迎点赞,关注,转发,在看,您的每一次鼓励,都是我最大的动力!
汽车电子嵌入式
微信扫描二维码,关注我的公众号
原文始发于微信公众号(汽车电子嵌入式):AUTOSAR 通信服务-CanSM配置及代码分析