CAN数据帧验收屏蔽码设置
1.滤波原理
SJA1000滤波器由4个验收代码寄存器和4个屏蔽代码寄存器组成,分别为ACR0,ACR1,ACR2, ACR3,AMR0, AMR1,AMR2,AMR3。其中每个寄存器都为一个字节。
单滤波是指只有一个由4个验收码寄存器和4个验收屏蔽码寄存器组成的验收滤波器,总线上的信息只有通过了它的验收滤波,才予以接收。对于单滤波情况下的标准帧而言,验收屏蔽寄存器的设置如下图所示:ACR0与AMR0对应ID.10~ ID.3,ACR1与AMR1中的高四位对应ID.2、ID.0、ID.0、RTR位。数据帧中RTR 为0。ACR1与AMR1中的低四位未使用,即均为零。
ACR2、ACR3与AMR2、AMR3对应数据区域的前两个字节,由于本程序中不需要将数据区域的数据进行滤波,将AMR2、AMR3均设为1即可。
图2 标准帧报文的单滤波器设置
验收规则如下:
((ID.10~ID.0)同或(ACR.10~ACR.0))或(AMR.10~AMR.0)=11111111111B。
注意实际上ID后面还有RTR位参与滤波,两个数据字节由于AMR2、AMR3的设置被屏蔽掉。
例如:
如上表所示,验收码高11位与ID各对应位相同,才能接收到此ID数据帧。如ID号为00010110000,则验收码ACR0和ACR1的高三位也为00010110000。ACR1和A M R1的低四位为保留位,均为0。注意RTR位为0,表示数据帧。这样,验收码在二进制形式下为0001 0110 0000 0000 0000 0000 0000 0000。
屏蔽码的后两个字节共16均为1,即可屏蔽掉数据区域DB1,DB2滤波。验收码在十六进制下为0x16000000,屏蔽码为0x0000ffff,ID为0x0b0。