1. 什么是 FilterMask
答:首先CAN的传输分为Basic Can和Full Can。Basic Can 的作用是一个 MailBox 可以接收一组或多个 CAN 报文(一组的报文都有哪些,就要用到FilterMask,它会将我需要的报文过滤过来,也就是说fifo buffer存储的都是我想要的报文。),而Full Can MailBox 的作用是一个 MailBox 只能接收一个CAN 报文,并且会将所有的报文存储在MailBox里。
MailBox就是一个RAM区域,如果接收的报文是Full Can,它存储在mailbox里就是按照一个一个存储的,如果我想要获取某个报文,我需要把整个Full Can的mailbox遍历一遍。
如果接收的报文是Basic Can,它存储在mailbox里就是一个fifo buffer存储的,我想要获取这部分报文,我就需要从FIFO buffer里获取。
2. 何时用到 FilterMask,或者一般什么情况用Basic Can或Full Can(配置准则-参考)
3. FilterMask是如何基于Basic Can筛选信号的
FilterMask是通过CAN在初始化的情况下,将要过滤的报文写到内存里。
根据controller判断要拿的信号要从哪里开始,比如Can_GetCanSIDFEStartIndex(canHwChannel)=0,则他的范围是0,下一个19。
Can_GetCanSIDFC_LSSOfCanSIDFC(canHwChannel)=每个controller的范围,比如controller=0时,他的范围是19,也就是0x13。
0~19的范围就对应下表:
将要过滤的报文写到共享的内存里:
根据报文所处的位置,将报文放到对应的内存地址
共享的内存:
kCanRegCheckMaskSMIDFE_S0 = 0x7FF
如果是Extended ID Filter 需要进一步check,可以通过下面的方式:
最后将所有的报文ID写道寄存器里
首先我们用的是标准的筛选模式:
11 位标准Message ID 筛选的设置。标准 ID 筛选器配置控制标准Message筛选器路径。
(vuint32)( ((vuint32)(initPara->stdFeCount) << 16) | ((vuint32)Can_GetCanSIDFC_FLSSAOfCanSIDFC(canHwChannel)) )
扩展模式下的描述。与标准模式对比:
标准模式描述:
可为 11 位标准 ID 配置 128 个Filter。访问标准Message ID Filter元素时,其地址是筛选器列表标准起始地址 SIDFCi.FLSSA 加上筛选器元素的索引 (0...127)
&(Cn->SIDFC)是 CAN 控制器的寄存器地址,基地址
((vuint32)Can_GetCanSIDFC_FLSSAOfCanSIDFC(canHwChannel)) 是 SIDFCi.FLSSA 筛选器列表起始地址
End
「
原文始发于微信公众号(汽车电子嵌入式):AUTOSAT-Can-FilterMask 为什么用FilterMask,什么时候用,为什么用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论