文章目录
CanIf配置介绍
在AUTOSAR CAN通信架构下,CanIf是位于Can模块上层的模块,向下与Can模块交互。CanIf模块的配置比Can模块稍微复杂些,一级配置容器就有6个,如下图所示,下面一一详细介绍。
CanIfStrlDrvCfgs
CanIfCtrlDrvCfg中需要注意的是Ctrl Drv Init Hoh Config Ref是引用CanIf的Hoh配置容器(后续介绍);Ctrl Drv Name Ref是引用Can模块的CanGeneral。
CanIfCtrlCfg
CanIfCtrlCfg是CanIfCtrlDrvCfg的二级配置容器,其包含了相应Can通道的参数配置,如下图所示:
需要注意的配置项是:
- Controller Can Controller Ref,引用Can模块的通道对应的Can控制器配置容器;
- Controller J1939 Dynamic Address Support,定义是否支持J1939协议的动态CAN控制器地址;
- Controller Transceiver Cfg Ref,引用CanIf模块的配置容器CanIfTrcvCfg;
- Controller Wakeup Support,定义是否支持唤醒(CAN控制器硬件具有支持唤醒功能才可用);
CanIfTrcvCfg
CanIfTrcvCfg配置容器是CAN发送器相关设置,如下图所示:
在该容器的设置中仅是对CanTrcv模块的发送器配置的引用,以及决定发送器唤醒功能的开关的配置。
CanIfDispatchCfg
下图是CanIfDispatchCfg容器的配置项。
这里大部分配置都是配置函数名及报告的上层的,多数和Partial Network相关,另外还有几个Ram检查相关的,根据项目具体需求配置即可。
CanIfInitCfg
CanIfInitCfg配置容器是CanIf模块比较重要的一个配置单元,其中包括了CanIfBufferCfgs、CanIfInitHohCfgs、CanIfRxPduCfgs和CanIfTxPduCfgs四个二级配置容器。
CanIfBufferCfgs
CanIfBufferCfg是用于配置CanIf相对应每一个CAN通道,所使用的buffer属性,配置参数项如下:
这里需要注意的是:
- Buffer Hth Ref,该项是引用Hth,后续介绍;
- Tx Buffer Handling Type,定义Tx缓存处理方式,有三种参数 PRIO_BY_CANID、FIFO和NONE,分别表示储存在Tx缓存中的Tx-PDUs将以CANID优先级方式处理、以First-In-First-Out方式处理和禁用Tx缓存。当CAN硬件对象(MailBox)为FULL类型时,该参数必须设置为NONE;
- Tx Buffer Mapped Tx Pdus,该参数表示处理的Tx Pdu数量,这个参数是工具从参数BufferHthRef中自动计算出来的;
CanIfInitHohCfgs
CanIfHrhCfg
该配置容器包含了每个硬件接收对象(Hardware Rx Object,HRH)的配置。
- Hrh Can Ctrl Id Ref,引用前面CanIf模块对应的CanIfCtrlDrvCfg;
- Hrh Id Sym Ref,引用Can模块定义的对应的Rx类型的Can硬件对象;
CanIfHthCfg
该配置容器包含了每个硬件发送处理(Hardware Tx Handle,HtH)的配置。
- Hth Can Ctrl Id Ref,引用前面CanIf模块对应的CanIfCtrlDrvCfg;
- Hth Id Sym Ref,引用Can模块定义的对应的Tx类型的Can硬件对象;
CanIfRxPduCfgs
该配置容器包含了每一个Rx-PDU的配置参数,每一个PDU为一个子容器,如下图所示。
这里面的配置需要注意的是:
- Rx Pdu Can Id;
- Can Id Type;
- 对相应Hrh的引用;
- EcuC中Pdu的引用;
- Rx Indication UL;
Can Id Type就是CAN报文类型,分为标准/扩展、FD/非FD,组合六种情况;对与EcuC中Pdu的引用可以看作是该PDU的存放的地方;Rx Indication UL是通知的上层,根据实际需求可以是PduR,CanTp,CDD等等。
CanIfTxPduCfgs
该配置容器包含了每一个Tx-PDU的配置参数,每一个PDU为一个子容器,如下图所示。
这里面的配置需要注意可Rx类型的基本一样。Tx Pdu Type这个参数是Tx Pdu特有的,用于定义Tx Pdu的类型,可定义为STATIC或DYNAMIC, DYNAMIC类型的Tx-PDU可以使用CanIf_SetDynamicTxId进行动态设置CanId,而STATIC类型的不可以;
CanIfPrivateCfg
CanIfPrivateCfg的配置项如下图所示,基本不需要特殊注意的配置。
CanIfPublicCfg
CanIfPublicCfg配置参数基本也不需要特殊关注,需要稍微注意的是开启了唤醒支持时,需要开启唤醒验证支持;另外是定义是否仅对NM报文做验证的配置项 WakeupCheckValidationByNM。
总结
CanIf模块配置主要分为如下四部分:
- 通过CanIfCtrlDrvCfg引用到对应Can控制器;
- 通过CanIfTrcvDrvCfg 引用到对应的Can收发器;
- CanIf buffer的定义、配置;
- CanIf Pdu的定义、配置(Tx和Rx)
需要特别注意的是在Pdu的配置中,需要引用到EcuC模块定义的Pdu,这里这个EcuC模块定义的Pdu,可以理解为存放该CanIf Pdu的容器。