将CAN节点连接到总线后,可以在不禁用滤波的情况下接收总线上的所有CAN数据帧。 如果只需要接收 ID 范围固定的数据帧,则可以配置掩码代码和验收代码来过滤数据帧。当数据帧在CAN总线上传输时,CAN节点使用接受过滤器来比较总线上数据帧的ID是否与节点的ID一致,如果ID一致,CAN控制器允许将接收到的信息存储在相应的寄存器中id,数据帧将被丢弃,以减少CAN控制器的工作量。 验收过滤器由验收寄存器 (ACR) 和验收屏蔽寄存器 (AMR) 组成。 用户配置验收盾牌寄存器和验收**寄存器,然后获取相应的掩码和验收码,对CAN数据帧进行过滤。 本文以SJA1000为例,其滤波方法分为单滤波和双滤波两种。 由模式寄存器AFM位控制,AFM = 1时的单个滤波器;AFM=0 是双重滤波。
在双滤波模式下,定义了两个接受滤波器,只要接收到的数据帧通过其中一个接受滤波器,就被认为是一个有效帧,可以正常接收并存储在寄存器中。 ACR0、ACR1、AMR0 和 AMR1 构成第一个验收滤波器,ACR2 和 ACR3 构成第二个验收滤波器。 例如,数据帧的 ID 段的前两个字节,即 29 位 ID 的上 16 位参与过滤。 ACR0 和 ACR1 的控件 ID 为 NO13-no.28、ACR2 和 ACR3 也将 ID 位控制为 No13-no.28,如表1所示。 这意味着 CAN 扩展了帧 ID 位 No13-no.28:这 16 位必须与这两组接受中的一组一致,才能被节点接收并存储在接收缓冲区中否则,数据框将被丢弃,从而产生两个过滤器。
表1 AMR、ACR和控制ID位的映射关系
在单滤波模式下,AMR为“0”的所有比特对应的ACR位和单滤波数据对应的比特必须一致,才能认为已通过验收滤波,如表2所示。 当接收到CAN标准帧时,数据段的11位ID、RTR位和前16位都参与滤波当接收到CAN扩展帧时,滤波涉及29位ID和RTR位,如图1所示。
表2 AMR、ACR和过滤ID对应表
图1 CAN标准帧和CAN扩展帧的帧格式示意图。
我们的隔离式SPI UART转CAN芯片CSM330A不使用单滤波器或双滤波器进行接收滤波。 CSM330A的验收过滤器由1个验收盾牌寄存器和6个验收**寄存器组成,用户可以通过配置一组盾牌码来“管理”6组验收码。 当掩码的某位为1时,该位对应的验收码将被“启用”,使能的“验收码”的“验收码”将与产品要接收的CAN帧的“帧ID”相同,CAN帧将被接收到接收缓冲区。 当掩码的位值为0时,验收码不起作用,对应位的帧可以作为任意值接收,如表3所示。
表3 过滤码和屏蔽码的真值
CSM330A适用于工业通讯、电池测试、充电桩、轨道交通、楼宇自动化等领域。 CSM330A协议转换芯片用于智能汽车驾驶员行为监测的应用方案中,如图2所示。 ZLG主要为DMS行业客户提供主控、供电、通信保护等模块化解决方案。 主控为Cortex-A35 M1808 AI核心板,搭载自主研发图像传感技术和车载行为检测系统解决方案。 可实现驾驶员识别、报警、驾驶员异常操作提醒等功能。
图2 驱动行为检测应用方案。