MCAN接收处理:硬件过滤、FIFO与缓冲区配置实战

发布时间:2026/7/24 12:59:34
MCAN接收处理:硬件过滤、FIFO与缓冲区配置实战 1. 项目概述MCAN接收处理的核心逻辑在嵌入式系统尤其是汽车电子和工业控制领域控制器局域网CAN总线是连接各个电子控制单元ECU的神经系统。随着车载网络复杂度的提升CAN FD灵活数据速率协议因其更高的带宽和更长的数据场而日益普及。作为CAN FD控制器MCAN模块的接收处理单元特别是其硬件消息过滤机制是决定整个节点通信效率和实时性的关键。想象一下一个车载网关节点每秒可能收到成千上万条来自不同传感器、执行器的CAN消息如果每条消息都交由CPU软件去判断是否处理CPU将不堪重负实时性也无从谈起。MCAN的接收处理单元正是为了解决这个核心痛点而设计的硬件加速器。它就像一个智能的邮件分拣中心。当CAN总线上的“信件”消息帧到达时分拣中心Rx Handler不会把每封信都直接送到你的办公桌CPU而是先经过一系列高速、并行的“分拣规则”Acceptance Filters进行判断。这些规则可以精确地指定哪些“信件”需要紧急处理放入高优先级信箱Rx FIFO 0哪些可以暂存到普通信箱Rx FIFO 1哪些需要直接归档到指定的文件柜Dedicated Rx Buffer而哪些“垃圾邮件”则可以直接丢弃。这一切判断和分拣动作都是在硬件层面瞬间完成的CPU完全无需干预只有当“信箱”里有新“信件”时才会通过中断通知CPU来取。这种设计将CPU从繁重的消息筛选工作中解放出来使其能专注于应用逻辑同时确保了关键消息的极低延迟响应。本次我们将深入拆解MCAN模块的接收处理流程聚焦于三个核心部分接收过滤Acceptance Filtering的原理与配置策略、接收FIFORx FIFO的工作模式与溢出处理机制以及专用接收缓冲区Dedicated Rx Buffer的应用场景。我会结合寄存器配置、数据结构以及实际工程中的配置心得为你呈现一套可直接“抄作业”的MCAN接收端配置方案。2. 接收过滤机制深度解析与配置策略接收过滤是MCAN模块的“守门员”它的配置直接决定了哪些消息能被节点接收并处理。理解其工作原理和配置细节是构建高效、可靠CAN通信节点的第一步。2.1 过滤器的架构与工作流程MCAN模块配备了两套独立的过滤器列表分别用于处理11位的标准帧ID和29位的扩展帧ID。这两套列表在物理上是分开的通过不同的寄存器组进行配置这为混合网络同时存在标准帧和扩展帧的管理提供了便利。过滤器的执行遵循“首次匹配”原则。当一帧完整的消息ID被接收后硬件过滤器开始按顺序遍历对应的过滤器列表标准或扩展。它会从列表的第一个元素索引0开始检查一旦找到第一个使能Enabled且与接收ID匹配的过滤器元素过滤过程立即停止并执行该过滤器元素所定义的动作如存入FIFO 0、存入缓冲区或拒绝。如果遍历完整个列表都没有找到匹配项则根据全局过滤配置寄存器MCAN_GFC的设置来决定最终动作是接受为非匹配帧存入指定FIFO还是直接丢弃。这个流程有几个关键点需要注意。首先过滤器的顺序至关重要。如果你将一条“拒绝所有”的规则放在列表开头那么后面的所有允许规则都将失效。其次过滤动作是在ID接收完成后立即进行的早于数据场和CRC的接收这进一步降低了消息处理的延迟。最后匹配成功后原始的、未经修改的接收ID会被完整地存储到目标FIFO或缓冲区中过滤器仅用于决策不修改消息内容。2.2 三种过滤器类型详解与应用场景MCAN提供了三种强大的过滤器类型每种都适用于不同的网络管理场景。2.2.1 范围过滤器范围过滤器SFT/EFT 00是最直观的一种。它定义了一个ID的闭区间[SFID1, SFID2]标准帧或[EFID1, EFID2]扩展帧。任何落在此区间内的接收ID都会被匹配。这种过滤器非常适合管理一组ID连续分配的设备。例如在汽车中所有车门模块的ID可能被分配在0x100到0x103这个连续范围内。只需配置一个范围过滤器即可接收所有车门的状态信息。对于扩展帧范围过滤器有一个特殊配置EFT 11。当EFT00时范围判断前会先将接收ID与扩展ID与掩码寄存器MCAN_XIDAM进行“与”操作这允许你屏蔽掉ID中的某些位如优先级位再进行范围比较提供了额外的灵活性。而当EFT11时则直接使用原始ID进行范围比较MCAN_XIDAM寄存器在此模式下不起作用。2.2.2 特定ID过滤器特定ID过滤器SFT/EFT 01用于匹配一个或两个特定的ID。每个过滤器元素包含两个ID值SFID1/EFID1 和 SFID2/EFID2。当接收ID等于SFID1或SFID2EFID1或EFID2时即视为匹配。如果需要只匹配一个ID只需将SFID1和SFID2设置为相同的值即可。这种过滤器效率极高因为它直接进行等值比较。通常用于接收关键的控制命令或高优先级的状态反馈例如发动机的转速指令ID: 0x0CF或刹车踏板状态ID: 0x0B0。2.2.3 经典位掩码过滤器经典位掩码过滤器SFT/EFT 10提供了最灵活的匹配方式它通过一个掩码Mask来定义ID中哪些位需要严格匹配哪些位是“不关心”的。其工作原理是过滤器元素中的SFID1/EFID1作为“过滤ID”SFID2/EFID2作为“掩码”。掩码中的每一位决定了对应ID位的匹配规则掩码位 1接收ID的对应位必须与过滤ID的对应位完全相同。掩码位 0接收ID的对应位可以是任意值0或1即该位被“屏蔽”不参与匹配。这带来了两个极端且有用的案例精确匹配当掩码的所有位都设置为1时它退化为特定ID过滤器仅匹配与过滤ID完全一致的ID。全部接收当掩码的所有位都设置为0时它将匹配任何ID。这通常用作过滤器列表末尾的“兜底”规则配合全局配置可以实现“接受所有非匹配帧”的功能。位掩码过滤器的强大之处在于可以对ID进行分组。例如在CANopen协议中节点IDNode-ID通常占据ID的低几位。你可以设置一个过滤ID为某个特定值如0x180掩码设置为0x7F0二进制111 1111 0000。这意味着ID的高7位0x180必须严格匹配而低4位可以是任意值。这样一个过滤器就能匹配从0x180到0x18F的所有ID高效地接收发给同一功能类型但不同节点的一组消息。实操心得过滤器规划在实际项目中切忌随意添加过滤器。一个良好的习惯是先规划后配置。列出你的节点需要接收的所有ID按优先级和功能分组。将高优先级、需要快速响应的消息如故障码、安全指令用特定ID过滤器放在列表前端。将功能组消息如所有温度传感器用位掩码或范围过滤器放在中间。最后谨慎使用“接受所有非匹配帧”功能除非是用于网络监控或调试否则可能引入大量不必要的CPU中断。2.3 过滤器元素配置与动作每个过滤器元素的核心配置在于其“元素配置”字段标准帧的SFEC[2:0]和扩展帧的EFEC[2:0]。这个3位字段定义了匹配成功后要执行的动作是过滤逻辑的“决策器”。其取值含义如下表所示值 (HEX)动作说明与应用场景0x0禁用过滤器元素被忽略过滤流程继续检查下一个元素。0x1存入 Rx FIFO 0匹配的消息存入FIFO 0。通常用于高优先级或需快速处理的消息流。0x2存入 Rx FIFO 1匹配的消息存入FIFO 1。用于普通优先级或备用消息流。0x3拒绝匹配的消息被直接丢弃。用于屏蔽不需要的、甚至可能是恶意的网络消息。0x4设置高优先级消息标志触发高优先级消息中断MCAN_IR.HPM但不存储消息。用于需要CPU立即知晓但无需数据内容的网络事件如特定ID的远程帧。0x5设置优先级并存入 FIFO 0结合0x1和0x4的动作。0x6设置优先级并存入 FIFO 1结合0x2和0x4的动作。0x7存入专用 Rx 缓冲区消息被存入由SFID2/EFID2[5:0]指定的专用Rx缓冲区。用于为特定关键消息提供专属存储避免被FIFO中的其他消息覆盖。配置示例为专用Rx缓冲区配置过滤器假设我们需要将ID为0x123的标准帧消息存储到专用Rx缓冲区数组中的第2个缓冲区索引从0开始。首先在MCAN_RXBC寄存器中配置Rx缓冲区的起始地址。然后配置一个标准ID过滤器元素SFT[1:0] 01(特定ID过滤)SFEC[2:0] 111(存入专用Rx缓冲区)SFID1[10:0] 0x123(目标ID)SFID2[10:9] 00(表示存入Rx Buffer非调试消息)SFID2[5:0] 0x02(缓冲区索引偏移量。假设每个缓冲区元素大小为4个字则实际存储地址为RBSA 2 * 元素大小)这样当ID为0x123的消息到达时它会被直接存入指定的缓冲区并置位对应的新数据标志同时不会影响Rx FIFO的状态。3. Rx FIFO消息的队列化管理接收FIFO是MCAN模块用于缓存已通过过滤的消息的硬件队列。模块提供两个独立的Rx FIFOFIFO 0和FIFO 1允许对消息进行优先级分类。理解其状态机和工作模式对于防止数据丢失至关重要。3.1 FIFO状态指针与水位线每个Rx FIFO由三个核心指针/状态值管理它们位于MCAN_RXFnS状态寄存器中Put Index (FnPI): 写指针。指示下一个接收到的、合格的消息应该被存入FIFO中的哪个位置元素索引。由硬件自动更新。Get Index (FnGI): 读指针。指示主机CPU下一次应该从FIFO中的哪个位置读取消息。由软件在读取消息后更新。Fill Level (FnFL): 填充等级。实时指示当前FIFO中存储的消息数量。FnFL (FnPI - FnGI) mod FIFO_SIZE。当FnPI FnGI时意味着写指针追上了读指针FIFO可能为空如果刚读完也可能为满如果刚写满。为了区分MCAN使用一个独立的FIFO满 (FnF)状态位。当硬件尝试写入但发现FnPI FnGI且该位置已有未读数据时FnF位被置1。水位线 (Watermark)是一个重要的预防机制。通过配置MCAN_RXFnC.FnWM字段可以设置一个阈值。当FIFO的填充等级 (FnFL) 达到或超过这个水位线时中断标志MCAN_IR.RF0W/RF1W会被置位。这给了软件一个“预警”可以在FIFO真正溢出之前提前读取数据从而避免数据丢失。例如将一个深度为32的FIFO水位线设置为24当FIFO中消息数达到24时触发中断提醒软件及时处理。3.2 阻塞模式 vs. 覆盖模式Rx FIFO可以工作在两种模式下通过MCAN_RXFnC.FnOM位配置。3.2.1 阻塞模式 (FnOM 0)这是默认模式行为保守。当FIFO满 (FnF1) 时任何试图写入该FIFO的新消息都会被拒绝。MCAN_RXFnS.RFnL消息丢失标志会被置位并可能产生中断。在这种模式下数据不会丢失但新消息会被丢弃直到软件读取至少一条消息使FnGI前进解除“满”状态。这种模式适用于消息绝对不允许丢失的场景例如关键的安全指令或控制反馈。它迫使软件必须设计足够高效的中断服务程序ISR来及时清空FIFO。3.2.2 覆盖模式 (FnOM 1)这是一种“牺牲旧数据保全新数据”的模式。当FIFO满时新到来的消息不会像阻塞模式那样被丢弃而是会覆盖当前FnPI也就是FnGI指向的、最旧的那条消息。然后FnPI和FnGI会同时递增1。这种模式听起来简单但存在一个关键的风险点读写指针冲突。考虑这样一个场景FIFO已满FnPI和FnGI都指向元素0。此时一个新消息到达硬件开始将其写入元素0覆盖旧数据。几乎同时CPU尝试读取元素0。这会导致CPU读到一部分旧数据和一部分新数据即数据损坏。为了解决这个问题MCAN模块在覆盖模式下引入了一个读取偏移的安全机制。软件在读取时不能直接读取FnGI指向的元素而应该读取FnGI N的元素其中N是一个偏移量通常至少为2。这个偏移量需要根据你的CPU读取FIFO的速度即ISR的延迟和执行时间来确定以确保当CPU开始读取时硬件早已完成对该位置的写入。避坑指南覆盖模式下的安全读取在覆盖模式下永远不要直接使用FnGI作为读取地址。安全的做法是在ISR中先读取MCAN_RXFnS获取当前的FnGI和FnFL。计算可读的起始索引read_index (FnGI OFFSET) % FIFO_SIZE。OFFSET需要根据你的系统最坏响应时间测试确定。根据FnFL和OFFSET计算实际可读的消息数量确保不会读到“未来”的数据。读取完成后通过写入MCAN_RXFnA.FnAI寄存器来更新FnGI。你写入的值应该是你最后成功读取的那个元素的索引而不是简单的FnGI1。3.3 消息RAM与元素大小配置Rx FIFO和缓冲区都位于MCAN模块的共享消息RAM中。其布局和元素大小需要软件精心配置。3.3.1 消息RAM布局规划消息RAM被划分为多个段标准ID过滤器列表、扩展ID过滤器列表、Rx FIFO 0、Rx FIFO 1、专用Rx缓冲区、Tx缓冲区、Tx事件FIFO等。每个段的起始地址由相应的寄存器如MCAN_RXF0C.F0SA,MCAN_RXBC.RBSA配置这些地址是32位字的地址偏移。规划时必须确保各段在内存中不重叠。MCAN硬件不会检查地址冲突配置错误会导致数据被意外覆盖引发难以调试的问题。一个稳妥的配置流程是确定每个段需要的元素数量例如Rx FIFO 0深度为16专用Rx缓冲区数量为8。根据帧数据长度DLC确定每个元素的大小字数。参见MCAN_RXESC寄存器配置和元素大小表。从消息RAM起始地址通常是0x00开始依次为每个段分配地址。计算下一个段的起始地址为当前段起始地址 元素数量 * 元素大小字数。3.3.2 元素大小选择元素大小由MCAN_RXESC寄存器中的F0DS、F1DS、RBDS字段控制它定义了每个Rx FIFO元素或Rx缓冲区元素能容纳的最大数据字节数。选择的原则是必须大于或等于你网络中可能出现的最大数据场长度。例如如果你只使用经典CAN最大8字节那么选择8字节对应4个字即可。但如果网络中存在CAN FD帧且可能用到64字节数据场则必须为相应的FIFO/缓冲区选择64字节对应18个字的配置。选择一个过小的元素大小会导致长数据帧被截断或写入越界破坏内存。下表总结了不同DLC码对应的数据字节数及推荐的元素大小RAM字数DLC码数据字节数 (经典CAN/CAN FD)所需元素大小 (32-bit Words)0-80-8 / 0-8498 / 125108 / 166118 / 207128 / 248138 / 3210148 / 4814158 / 6418配置心得消息RAM计算器我强烈建议在项目初期编写一个简单的“消息RAM计算器”脚本或函数。输入你计划的所有段过滤器数量、FIFO深度、缓冲区数量、Tx配置等及其元素大小脚本自动计算各段起始地址并检查是否溢出1KB或你的芯片具体大小的RAM空间。这能从根本上避免地址配置错误。4. 专用Rx缓冲区与消息处理流程专用Rx缓冲区为特定的、关键的消息提供了“专属停车位”与FIFO的“公共队列”形成互补。4.1 专用缓冲区 vs. FIFO两者的核心区别在于寻址方式Rx FIFO是队列遵循先进先出原则。软件通过Get Index顺序读取不知道下一条消息具体是什么ID。专用Rx缓冲区是索引数组每个缓冲区有固定的地址。过滤器通过SFID2/EFID2[5:0]直接指定消息存入哪个具体的缓冲区索引。这种特性使得专用缓冲区非常适合处理周期固定、内容重要、需要被及时消费的消息。例如发动机的转速消息ID: 0x0C0可以配置为直接存入专用缓冲区0。这样应用软件可以随时、直接地去缓冲区0读取最新的转速值而不用担心它被其他消息挤占或需要遍历FIFO来查找。4.2 新数据标志与缓冲区锁定每个专用Rx缓冲区都有一个对应的“新数据”标志位位于MCAN_NDAT1或MCAN_NDAT2寄存器中。当一条消息被成功存入某个专用缓冲区后硬件会自动置位其新数据标志。这个标志有一个关键作用缓冲区锁定。只要某个缓冲区的新数据标志为1该缓冲区就被锁定不会被新的匹配消息覆盖。即使总线上又来了一个ID匹配该缓冲区过滤器的消息过滤器也会因为目标缓冲区被锁定而跳过该过滤器元素继续向下匹配。这条新消息可能会被后续的过滤器存入FIFO也可能被拒绝。这个机制保证了软件有足够的时间来处理缓冲区中的关键消息不会因为处理不及时而导致数据被覆盖。软件在读取完缓冲区数据后必须通过向MCAN_NDAT1/2的对应位写1来清除该新数据标志以解锁缓冲区。4.3 接收处理的中断驱动编程模型一个健壮的接收处理程序通常采用中断驱动模型。以下是基于Rx FIFO和专用缓冲区混合使用的典型ISR处理流程中断入口与源判断进入CAN接收中断服务程序ISR后首先读取MCAN_IR寄存器判断中断来源。可能是RF0N(FIFO 0新消息)、RF1N(FIFO 1新消息)、DRX(专用缓冲区新消息)、RF0W/F1W(FIFO水位线) 或RF0F/F1F(FIFO满) 等。处理专用缓冲区如果DRX置位读取MCAN_NDAT1和MCAN_NDAT2找出具体是哪个缓冲区的标志被置位。根据缓冲区索引计算出该缓冲区在消息RAM中的确切地址。从该地址读取完整的消息元素包括ID、DLC、数据等。处理消息数据。关键步骤向MCAN_NDATx寄存器的对应位写1清除新数据标志解锁缓冲区。清除MCAN_IR.DRX中断标志。处理Rx FIFO 0/1如果RF0N或RF1N置位读取对应的MCAN_RXFnS寄存器获取当前填充等级FnFL。在一个循环中根据FnGI注意在覆盖模式下要加偏移量计算读取地址从消息RAM中读取消息元素。每读取一条处理一条。循环结束后通过写入MCAN_RXFnA.FnAI寄存器来更新FnGI。写入的值应为最后读取的元素索引。清除MCAN_IR.RF0N或RF1N中断标志。处理预警与错误如果RF0W/F1W水位线置位这是一个预警提示FIFO快满了应加速处理。如果RF0F/F1FFIFO满或RF0L/F1L消息丢失置位说明软件处理速度跟不上接收速度可能发生了数据丢失。这需要记录日志并考虑优化软件性能或调整FIFO深度/模式。中断返回清除MCAN模块级的中断标志如果存在退出ISR。性能优化技巧批处理与DMA对于高负载CAN网络频繁进入ISR和单条处理消息会成为性能瓶颈。两个优化方向批处理在ISR中不要每读一条消息就处理一条然后更新指针。而是先根据FnFL将FIFO中所有可读消息一次性拷贝到一个由软件维护的环形缓冲区中然后快速更新硬件FnGI并退出ISR。消息的实际处理放在主循环或低优先级任务中完成。这极大缩短了ISR执行时间。使用DMA如果MCAN模块和芯片支持可以配置DMA在消息到达时自动将数据从消息RAM搬运到指定的系统内存区域。这几乎可以将CPU从数据搬运工作中完全解放仅在新数据块就绪时产生一个中断通知CPU处理是应对极高波特率和大数据量场景的终极方案。5. 常见问题排查与调试技巧即使理解了所有原理在实际调试中依然会遇到各种问题。下面是一些典型问题的排查思路和调试方法。5.1 消息无法接收过滤器配置问题现象节点似乎没有收到总线上已知存在的消息。排查步骤检查MCAN基础配置确认MCAN_CCCR.INIT已清零退出初始化模式MCAN_CCCR.CCE在配置后已清零模块处于正常运行模式。确认波特率与模式检查MCAN_NBTP,MCAN_DBTP等寄存器确保与总线其他节点匹配。确认MCAN_CCCR.FDOE和BRSE位设置正确经典CAN或CAN FD。检查过滤器使能这是最常见的问题。确认MCAN_SIDFC.LSS标准过滤器列表大小和MCAN_XIDFC.LSE扩展过滤器列表大小是否大于0如果为0则对应类型的过滤器列表被禁用。检查全局过滤配置查看MCAN_GFC寄存器。RRFS/RRFE是否错误地拒绝了所有远程帧ANFS/ANFE对于未匹配任何过滤器的消息你的策略是“接受”还是“拒绝”如果你希望接收某些消息但没配过滤器这里需要设置为“接受到FIFO X”。逐条检查过滤器元素通过调试器读取消息RAM中过滤器列表区域的内容与你软件配置的值进行比对。常见错误包括过滤器类型SFT/EFT配置错误例如想用范围过滤却配成了特定ID。过滤器动作SFEC/EFEC配置为000禁用。范围过滤的上下界SFID1 SFID2导致范围无效。位掩码过滤器的掩码位理解错误。专用缓冲区过滤器的缓冲区索引SFID2[5:0]超出了实际配置的缓冲区数量。检查接收FIFO/缓冲区状态即使过滤器匹配如果目标FIFO已满阻塞模式或目标专用缓冲区的新数据标志未清除消息也会被拒绝或跳过。检查MCAN_RXFnS.FnF和MCAN_NDATx寄存器。5.2 数据损坏或错位现象能收到消息但数据字节混乱或者ID、DLC等信息不对。排查步骤检查消息RAM元素大小配置这是导致数据错位的头号元凶。确认MCAN_RXESC寄存器中F0DS,F1DS,RBDS的设置是否大于等于你接收帧的实际数据长度注意DLC到字节数的映射特别是CAN FD。如果配置过小长帧的数据会写入相邻的内存区域破坏其他数据。检查消息RAM地址重叠重新核算为每个段FIFO0, FIFO1, Rx Buffer, Tx Buffer等配置的起始地址和大小确保它们没有重叠。使用第3.3节提到的“计算器”进行验证。检查读取逻辑对于FIFO确保你使用了正确的Get Index(MCAN_RXFnS.FnGI) 来计算读取地址。在覆盖模式下务必加上安全偏移量。对于专用缓冲区确保你用于计算缓冲区地址的基址MCAN_RXBC.RBSA和索引是正确的。检查字节序MCAN模块的消息RAM通常按32位字组织但数据字节是按小端序低位字节在低地址存储在字中的。你的读取和解析代码需要正确处理字节序。参考图31-21的数据结构DB0在R2字的低8位。5.3 FIFO溢出与消息丢失现象在阻塞模式下MCAN_RXFnS.RFnL消息丢失标志被置位或者在覆盖模式下发现数据序列中出现不连续的跳变。排查步骤确认中断是否及时响应使用示波器或逻辑分析仪测量从CAN帧结束到CPU进入ISR的延迟。过长的中断关闭时间、高优先级中断阻塞都会导致丢失。优化ISR效率按照第4.3节的建议将耗时的消息处理移出ISRISR只负责快速搬运数据和更新指针。使用批处理软件环形缓冲区。调整FIFO深度和水位线如果消息流量大且突发性强尝试增加FIFO的深度MCAN_RXFnC.FnS。同时将水位线MCAN_RXFnC.FnWM设置到一个更保守的值例如深度的一半以便更早预警。评估改用覆盖模式如果消息流是“取最新值”的类型如传感器周期性数据旧数据可以丢弃那么切换到覆盖模式MCAN_RXFnC.FnOM1可以避免因缓冲区满而丢失最新数据。但务必实现第3.2.2节提到的安全读取偏移。检查总线负载使用CAN分析仪检查总线的实际负载率。如果负载率持续超过70%-80%可能需要从网络架构层面进行优化如增加网关、分割网络、提升波特率如果支持等。5.4 调试工具与技巧寄存器地图与调试器熟练使用芯片的参考手册和调试器如Keil, IAR, Lauterbach等的内存/外设查看窗口实时监控关键寄存器MCAN_IR,MCAN_PSR,MCAN_RXFnS,MCAN_NDATx和消息RAM区域的内容。这是最直接的调试手段。软件仿真与逻辑分析在项目早期可以使用CANoe、CANalyzer或PCAN-View等工具模拟总线流量向你的MCAN节点发送特定ID和数据的帧观察其响应和寄存器变化。“打印”到CAN总线在资源受限的系统中可以编写一个简单的调试函数将内部状态如FIFO填充等级、错误标志等封装成特定的CAN帧发送到总线上用另一个节点或分析仪接收查看。利用过滤器事件引脚一些MCAN实现支持将过滤器匹配事件映射到一个外部GPIO引脚上通过SFID2[8:6]配置。可以用逻辑分析仪抓取这个引脚的电平变化直观地看到哪些ID的帧被成功过滤匹配这对于验证复杂的过滤器配置非常有用。