当前位置:首页 > 嵌入式 > 嵌入式分享

CAN 过滤器的本质是 “基于 CAN 帧 ID 的硬件匹配电路”,其核心功能是通过预设的 “过滤规则”,判断接收帧的 ID 是否符合条件,仅允许符合条件的帧进入接收缓冲区。不同厂商的 CAN 控制器(如 ST 的 bxCAN、NXP 的 SJA1000、Microchip 的 MCP2515)在过滤器的硬件实现上略有差异,但核心逻辑一致,主要包含 “过滤器组”“过滤模式”“ID 类型”“接收 FIFO” 四大组件,共同构成 “帧接收 - ID 匹配 - FIFO 存储” 的完整流程。

(一)过滤器的核心组件:从规则定义到数据存储

1. 过滤器组(Filter Bank):过滤规则的载体

CAN 控制器通常包含多个 “过滤器组”(如 STM32 bxCAN 支持 28 个过滤器组,SJA1000 支持 2 个),每个过滤器组可独立配置一套过滤规则,实现多维度的筛选需求。例如,某汽车 ECU 需要同时接收 “发动机转速帧”(ID=0x123)与 “水温帧”(ID=0x124),可配置两个过滤器组,分别匹配这两个 ID;也可通过一个过滤器组的 “列表模式” 同时匹配多个 ID,灵活度取决于应用场景。

每个过滤器组包含 “过滤器寄存器”(用于存储目标 ID 与匹配规则)与 “控制寄存器”(用于配置过滤模式、ID 类型、激活状态):

过滤器寄存器:通常分为 “过滤器 ID 寄存器”(Filter ID Register)与 “过滤器掩码寄存器”(Filter Mask Register),前者存储目标 ID 的位 pattern,后者定义哪些位需要严格匹配、哪些位可忽略(仅掩码模式需要);

控制寄存器:配置过滤器的工作模式(掩码模式 / 列表模式)、ID 类型(标准 ID / 扩展 ID)、关联的接收 FIFOFIFO0/FIFO1)、激活状态(激活 / 未激活)。

2. 过滤模式:精准匹配与灵活筛选的选择

CAN 过滤器支持两种核心模式 ——掩码模式(Mask Mode) 与列表模式(List Mode),分别对应 “灵活筛选一类 ID” 与 “精准匹配多个固定 ID” 的需求,是过滤器配置的核心区别。

1)掩码模式:灵活的 “模糊匹配”

掩码模式(也称为 “掩码位宽模式”)通过 “过滤器 ID” 与 “过滤器掩码” 的配合,实现对某一类 ID 的灵活筛选。其核心逻辑是:掩码的每一位定义了过滤器 ID 对应位的 “匹配强度”—— 掩码位为 1 时,接收帧的对应位必须与过滤器 ID 的对应位完全一致(“严格匹配位”);掩码位为 0 时,接收帧的对应位可任意(0 1,“忽略位”)。这种模式适合筛选 “ID 具有相同前缀或后缀” 的一类帧,无需为每个 ID 单独配置过滤器。

以标准 ID11 位) 为例:若需筛选 ID 0x120~0x12F 的所有帧(共 16 ID),过滤器 ID 可设为 0x120(二进制00010010000),过滤器掩码设为 0x1F0(二进制00011111000)。此时,掩码的高 6 位(bit10~bit5)为 1,接收帧的这 6 位必须与过滤器 ID 000100完全一致(即 ID 的高 6 位为 0x12);掩码的低 4 位(bit4~bit0)为 0,接收帧的这 4 位可任意(0~F),因此所有 ID 0x120~0x12F 范围内的帧都会被匹配。

以扩展 ID29 位) 为例:若需筛选扩展 ID 0x12345000~0x12345FFF 的帧(低 8 位任意),过滤器 ID 设为 0x12345000,过滤器掩码设为 0xFFFFFF00。掩码的高 21 位为 1,需严格匹配 0x12345;低 8 位为 0,可任意,实现对该范围 ID 的筛选。

掩码模式的优势是 “一规则覆盖多 ID”,节省过滤器组资源;缺点是无法排除 “范围内不需要的 ID”—— 例如,若 0x120~0x12F 中包含不需要的 0x128 帧,掩码模式无法单独排除,需结合软件二次筛选(但仍比无过滤器时节省资源)。

2)列表模式:精准的 “枚举匹配”

列表模式(也称为 “标识符列表模式”)将过滤器 ID 寄存器直接作为 “目标 ID 列表”,接收帧的 ID 需与列表中的某一个 ID 完全一致才能通过筛选。其核心逻辑是:过滤器组的两个寄存器(Filter ID1 Filter ID2)可存储两个目标 ID,接收帧的 ID 只需与其中一个完全匹配(标准 ID 11 位全一致,扩展 ID 29 位全一致),即可通过过滤。部分高端 CAN 控制器(如 STM32H7 bxCAN)支持 “扩展列表模式”,可通过多个过滤器组级联,实现更多 ID 的精准匹配。

例如,某工业 PLC 需精准接收 ID 0x001(紧急停止帧)、0x002(启动帧)、0x003(暂停帧)的三个关键帧,可配置两个过滤器组:

过滤器组 1Filter ID1=0x001Filter ID2=0x002(列表模式,标准 ID);

过滤器组 2Filter ID1=0x003Filter ID2=0x003(列表模式,标准 ID,重复配置以仅匹配 0x003)。

此时,只有 ID 0x0010x0020x003 的帧能通过过滤,其他 ID(如 0x0040x123)会被直接丢弃。

列表模式的优势是 “精准筛选,无冗余数据”,适合需要严格控制接收 ID 的场景(如安全相关帧);缺点是 “一 ID 需一规则”,过滤器组资源消耗大 —— 若需匹配 10 ID,至少需要 5 个过滤器组(每个组存 2 ID),不适用于多 ID 筛选场景。

3. ID 类型:标准 ID 与扩展 ID 的匹配适配

CAN 帧的 ID 分为 “标准 ID11 位)” 与 “扩展 ID29 位)”,过滤器需先配置 “ID 类型”,确保与接收帧的 ID 位宽一致,否则会导致匹配失效。

标准 ID 过滤:过滤器仅匹配 11 ID CAN 帧(CAN 2.0A 协议),过滤器 ID 寄存器的高 11 位存储目标 ID,低 18 位(扩展位宽)无效或设为 0

扩展 ID 过滤:过滤器仅匹配 29 ID CAN 帧(CAN 2.0B 协议),过滤器 ID 寄存器的高 29 位存储目标 ID,低 3 位无效或设为 0

部分 CAN 控制器支持 “混合模式”(如 SJA1000 的 “双缓冲器模式”),可同时接收标准 ID 与扩展 ID 帧,但过滤器需分别配置 —— 例如,用一个过滤器组匹配标准 ID,另一个过滤器组匹配扩展 ID,避免 ID 类型混淆导致的过滤错误。

4. 接收 FIFO:过滤后数据的暂存区

通过过滤的 CAN 帧会被存入 CAN 控制器的 “接收 FIFO”(通常包含 FIFO0 FIFO1 两个独立 FIFO),FIFO 的作用是 “暂存有效数据,避免 MCU 读取不及时导致的数据丢失”。每个 FIFO 有固定的深度(如 STM32 bxCAN FIFO 深度为 3 级,可存储 3 帧数据),当 FIFO 未满时,新过滤后的帧会依次存入;当 FIFO 满时,新帧的处理策略由 “FIFO 溢出模式” 决定:

丢弃模式:新帧直接丢弃,仅保留 FIFO 中的旧数据;

覆盖模式:新帧覆盖 FIFO 中最早存入的帧(FIFO 头部数据),确保最新数据不丢失(适用于实时性要求高的场景)。

MCU 通过读取 FIFO 中的数据(如读取 CAN_RIR 寄存器获取 IDCAN_RDLR/CAN_RDHR 寄存器获取数据),完成有效帧的处理;处理后需通过 “释放 FIFO” 操作(如读取 FIFO 后自动释放,或通过寄存器手动释放),为新帧腾出空间。

(二)过滤器的工作流程:从帧接收到数据存储

CAN 过滤器的工作流程是 “硬件自动执行” 的,无需 MCU 干预,核心步骤可分为四步:

帧接收与 ID 提取:CAN 控制器接收总线上的差分信号,解析出 CAN 帧的结构(帧起始、ID 场、控制场、数据场、CRC 场、ACK 场),并提取 ID 场的二进制数据(11 位标准 ID 29 位扩展 ID),暂存到 “临时 ID 寄存器”。

过滤器激活判断:控制器检查当前配置的过滤器组是否处于 “激活状态”(通过控制寄存器的 “激活位” 判断)—— 未激活的过滤器组不参与匹配,所有帧直接进入 FIFO(或丢弃,取决于控制器配置);激活的过滤器组进入下一步匹配。

ID 匹配与规则判断:激活的过滤器组根据预设的 “过滤模式” 与 “ID 类型”,对临时 ID 寄存器中的 ID 进行匹配:

若为掩码模式:将临时 ID 与过滤器 ID 进行 “按位与” 运算,再与 “过滤器 ID & 过滤器掩码” 的结果比较 —— 若一致,说明 ID 符合规则;若不一致,判定为无效帧。

若为列表模式:将临时 ID 与过滤器 ID1、过滤器 ID2 分别比较 —— 若与任意一个 ID 完全一致,判定为有效帧;若均不一致,判定为无效帧。

有效帧存储与无效帧丢弃:

有效帧:控制器将完整的 CAN 帧(ID + 数据 + 状态)存入关联的接收 FIFOFIFO0 FIFO1),若 FIFO 未满,直接存入;若 FIFO 满,按溢出模式处理(丢弃或覆盖),同时置位 “FIFO 满标志”,提醒 MCU 及时读取。

无效帧:控制器直接丢弃该帧,不占用 FIFO 资源,也不触发 MCU 中断,仅更新 “无效帧计数寄存器”(部分控制器支持),用于后续故障排查。

整个流程的耗时均为 “硬件级速度”(通常为几十纳秒),远快于 MCU 的软件解析速度(需数百纳秒到微秒),确保了筛选的高效性。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭