了解CAN总线的人都知道,CAN总线在的帧数据在总线上传送时,其它的CAN控制器是经过检验滤波来决议总线上的数据帧的ID是否和本节点相契合,假如与本节点契合,那么总线上的数据就被存入总线控制器的相应寄存器里,不然就扔掉该数据,然后也能够减轻总线控制器的工作量。换句话说,总线上数据帧的ID经过待接纳节点的检验滤波后是契合的,是能够被接纳的。
那么,总线控制器是怎么进行检验滤波的呢?检验滤波分单滤波和双滤波。规范帧和扩展帧由于ID长度不同,它们的两种滤波也有所区别。这儿我只需点举一个比如,由于只需理解了一种滤波方法,其它的滤波方法都是相似的,也很简单就理解了。
这儿就说扩展帧的双滤波方法。所谓双滤波,便是有两次的滤波,但并非两次滤波都需求经过才双经过,两次滤波只需有一次滤波成功那么就默许滤波经过,能够接纳数据了。
如上表所示,ACR寄存器是接纳代码寄存器,AMR是接纳屏蔽寄存器。ACR一般是需求与对应的ID相契合的,可是假如AMR的相应位上设置为1的时分,ID的那一位数据能够不好AMR的相应位相同,也便是起到屏蔽的作用。
举个比如。假如ACR0=11101111,AMR0=00000000,那么要想经过检验滤波,有必要ID.28- ID.21=ACR0=11101111。假如AMR0=00010000,那么ID.28-ID.21=11111111时,也能够经过检验滤波,由于此刻AMR0的第五位为1,也便是屏蔽了ACR0的第五位。所以ID的相应位能够不合ACR0共同。
在扩展帧的双滤波方法下,ACR0\ACR1别离对应ID.28-ID.13 ,ACR2\ACR3别离也对应ID.28-ID.13,这就达到了两次滤波的作用。
别的要阐明的一点是:经过检验滤波后契合节点要求的数据就存储到节点的相应寄存器里,其它的帧信息并不做存储。