CAN 过滤器的技术原理:硬件级的 ID 匹配逻辑
扫描二维码
随时随地手机看文章
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)、关联的接收 FIFO(FIFO0/FIFO1)、激活状态(激活 / 未激活)。
2. 过滤模式:精准匹配与灵活筛选的选择
CAN 过滤器支持两种核心模式 ——掩码模式(Mask Mode) 与列表模式(List Mode),分别对应 “灵活筛选一类 ID” 与 “精准匹配多个固定 ID” 的需求,是过滤器配置的核心区别。
(1)掩码模式:灵活的 “模糊匹配”
掩码模式(也称为 “掩码位宽模式”)通过 “过滤器 ID” 与 “过滤器掩码” 的配合,实现对某一类 ID 的灵活筛选。其核心逻辑是:掩码的每一位定义了过滤器 ID 对应位的 “匹配强度”—— 掩码位为 1 时,接收帧的对应位必须与过滤器 ID 的对应位完全一致(“严格匹配位”);掩码位为 0 时,接收帧的对应位可任意(0 或 1,“忽略位”)。这种模式适合筛选 “ID 具有相同前缀或后缀” 的一类帧,无需为每个 ID 单独配置过滤器。
以标准 ID(11 位) 为例:若需筛选 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 范围内的帧都会被匹配。
以扩展 ID(29 位) 为例:若需筛选扩展 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(暂停帧)的三个关键帧,可配置两个过滤器组:
过滤器组 1:Filter ID1=0x001,Filter ID2=0x002(列表模式,标准 ID);
过滤器组 2:Filter ID1=0x003,Filter ID2=0x003(列表模式,标准 ID,重复配置以仅匹配 0x003)。
此时,只有 ID 为 0x001、0x002、0x003 的帧能通过过滤,其他 ID(如 0x004、0x123)会被直接丢弃。
列表模式的优势是 “精准筛选,无冗余数据”,适合需要严格控制接收 ID 的场景(如安全相关帧);缺点是 “一 ID 需一规则”,过滤器组资源消耗大 —— 若需匹配 10 个 ID,至少需要 5 个过滤器组(每个组存 2 个 ID),不适用于多 ID 筛选场景。
3. ID 类型:标准 ID 与扩展 ID 的匹配适配
CAN 帧的 ID 分为 “标准 ID(11 位)” 与 “扩展 ID(29 位)”,过滤器需先配置 “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 寄存器获取 ID,CAN_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 + 数据 + 状态)存入关联的接收 FIFO(FIFO0 或 FIFO1),若 FIFO 未满,直接存入;若 FIFO 满,按溢出模式处理(丢弃或覆盖),同时置位 “FIFO 满标志”,提醒 MCU 及时读取。
无效帧:控制器直接丢弃该帧,不占用 FIFO 资源,也不触发 MCU 中断,仅更新 “无效帧计数寄存器”(部分控制器支持),用于后续故障排查。
整个流程的耗时均为 “硬件级速度”(通常为几十纳秒),远快于 MCU 的软件解析速度(需数百纳秒到微秒),确保了筛选的高效性。





