FlexCAN-收发报文ID超出物理邮箱数量时邮箱分配参考方案
-
1. 前言
在汽车电子领域,CAN总线通信是核心的数据交互方式。随着系统复杂度的提升,ECU节点往往需要同时接收和处理大量不同ID的报文。然而,受限于芯片成本和硬件设计,微控制器通常只提供有限数量的CAN接收邮箱(通常为32个或64个)。 当系统需要接收的报文ID数量远超硬件邮箱数量时,就会出现“邮箱不够用”的场景。如果处理不当,极易导致接收邮箱溢出、报文丢失,进而引发系统故障。针对这一痛点,本文基于云途YTM32B1LE05芯片,针对不同的报文特征和CAN控制器工作模式,提出了三种针对性的解决方案,并完成了Demo开发与验证,旨在为开发者提供一个设计参考。2. YTM32B1LE05 CAN控制器基本介绍
YTM32B1LE05具备以下主要特性: - 最多32个邮箱。 - 支持经典CAN与CAN FD模式:CAN FD模式下支持最高8字节到64字节的数据场,可变波特率使数据传输更高效。 - 硬件掩码过滤:每个接收邮箱支持独立的ID和掩码配置,可实现硬件级别的报文过滤。 - 中断及FIFO机制:支持接收中断及硬件Legacy FIFO(深度6)。3. 三种场景及原理介绍
根据报文ID的分布特征(集中或分散)以及CAN工作模式(经典模式或FD模式),邮箱不够用的场景可归纳为以下三种,其解决原理分别如下:3.1 场景1:经典模式/FD模式,报文数量多,ID基本都在某个区间
- 原理:邮箱掩码过滤法 - 分析:当多个报文ID集中在某个区间(如连续的ID段,或高几位相同、低几位变化的ID群),可以利用CAN硬件的Mask(掩码)机制。Mask寄存器中置0的位表示“不关心”,置1的位表示“必须匹配”。通过配置一个邮箱的Mask,使其只校验ID的公共高位,忽略低位变化,从而实现“一个邮箱接收一组ID”的效果,极大释放了邮箱资源。3.2 场景2:经典模式,报文数量多,ID比较分散
- 原理:硬件FIFO法 - 分析:在经典模式下,ID毫无规律且跨度极大,Mask方式无法有效合并。此时应将多个连续的硬件邮箱硬件邮箱区域配置为接收FIFO模式。在FIFO模式下,匹配ID的报文基本不会因为缓冲区填满而被覆盖,这种方式增加了接收缓冲深度,给予CPU更充裕的响应时间来统一读取和软件分发。3.3 场景3:FD模式,报文数量多,ID比较分散
- 原理:软件轮询法 - 分析:在CAN FD模式下,由于报文数据场长度最大可达64字节,报文长度差异极大。由于MCU对硬件Legacy FIFO和FD的支持存在冲突)。因此,这里用单个邮箱对多个报文进行周期性轮询配置和接收,一旦检测到接收缓冲区有数据就转移数据并清空缓冲区,等待下一次接收,无数据则跳过。此方式牺牲了一定的实时性,但换来了FD模式下的兼容性。4. 实现方式
4.1 场景1实现:邮箱Mask方式
- 实现步骤:
- 设置掩码类型为独立掩码。
- 设置一个目标区间的基准ID(如0x100)。
- 配置Mask寄存器,将需要忽略的低位设为0,必须匹配的高位设为1(如Mask = 0x7F8,表示低3位不关心,可接收0x100~0x107)。
- 配置接收邮箱。

- 测试结果:
- 向总线发送0x100~0x10F的报文,芯片均能正常触发接收中断。
- 区间之外的ID则无法接收。
4.2 场景2实现:FIFO方式
- 实现步骤:
- 将硬件邮箱Mailbox_0至Mailbox_17配置为接收FIFO。
- 配置FIFO的过滤方式为FORMAT A(所有ID位都过滤)。
- 配置滤波表


Legacy FIFO模式下,因为NumberofLegacyRxFIFOFilters(RFFN)最大为15,因此滤波表参数最多为(15 + 1)* 8 = 128个。
4.3 场景3实现:邮箱轮询方式
- 实现步骤:
- 先将邮箱配置为独立接收模式,单独配置固定报文ID。
- 在主程序中,同一类型的的报文(比如都是标准帧)可通过同一邮箱遍历所有TX ID和TX data的方式进行发送。
- 在主程序中周期性的切换配置接收邮箱,切换周期越短,丢帧率越低。
- 为防止总线拥堵时轮询周期不够导致溢出,可增加溢出标志位监控及错误恢复逻辑。
- 测试结果:
- 在CAN FD模式下(仲裁段500kbps,数据段2Mbps),发送ID分散的报文。
- 轮询周期设为100ms,数据均可正常接收。
- 在负荷率比较高的情况下,可能会出现单个邮箱溢出覆盖,但通过软件逻辑检测溢出标志位并丢弃旧帧,也可保证基本功能。
- 结论:轮询方式扩大了总线接收报文的数量,虽然实时性略有下降(取决于轮询周期),但在FD分散ID场景下也能实现了较为稳定可靠的数据接收。
5. 总结
YTM32B1Mx系列均有多路CAN控制器,且MD1/ME0/HA0均支持EnhanceFIFO,基本不会出现邮箱不够用的情况,一般L系列由于邮箱数量较少且只有一个CAN控制器,当开发者使用到FD模式时经常会邮箱不够用,在实际项目中,开发者可根据报文字阵的定义和总线负载情况,灵活选择或组合上述方案,以实现YTM32B1LE05 CAN通信资源的最优配置。
- 实现步骤:
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...