前言
由于客户提供的CANFD报文接收数量越来越多,使用FULL CAN模式的mailbox完全不够用了,之前为了图方便继续使用FULLCAN,采用了分CanRamBlock的方式,参考:S32K324 CANFD报文接收超限分析,本文介绍使用BasicCAN方式,通过CANIF的过滤实现特定报文的接收
MCAL CAN的修改
将对应CAN Mailbox修改为Basic CAN,并修改对应的CanHwFilter。本文以报文0x305为例,需要接收的报文还有0x307,0x302,低3bit分别为101b,111b,010b,故最低三个bit不能作为过滤的bit,所以在MCAL这边需要配置的Can Hw Filter Code为0x305,Can Hw Filter Mask为0x7f8,这样配置完后,在CAN Driver这边能接收的报文可以从0x300-0x307
在ISOLAR对应的CAN模块中也要修改,否则生成BSW会报错
CANIF配置修改
CanIfInitCfg
CanIfInitHohCfg
将CanIfInitHohCfg中对应接收报文的CanIfHrhCfg中的配置修改为与MCAL CAN中一致,并关联对应的CAN Mailbox
CanIfRxPduCfg
创建对应的PDU,并配置对应的ID和MASK(mask为0x7ff,或者不填,默认也是7ff),以0x302为例,示例配置如下:
需要关联对应的CanIfRxPduHrhIdRef(CanIfHrhCfg中配置)和PDU。
后面还需要配置PduR,及Com中的Pdu和Signal,本文不再介绍,可以参考:Autosar 通讯栈配置-手动配置PDU及Signal-基于ETAS软件
总结
通过软件过滤的方式,会增加CAN驱动接收的负载,因为使用Mask方式,难免会有不希望接收的报文进入CAN Driver,但是在硬件无法满足过滤的情况下,软件过滤也是一种合理的方法。