当前位置: 首页 > news >正文

CAN 数据丢帧?别只加 FIFO,看看接收过载与错误处理

摘要:CAN 总线波形正常,但上位机偶尔收不到某一帧数据?或者节点突然进入“被动错误”状态?不是波特率问题,而是接收 FIFO 溢出或错误计数器触发的自我保护。本文解析 CAN 的“隐身杀手”——错误帧。


一、问题描述(现象)

**CAN 总线负载率只有 30%,理论上不会丢包;

但监控软件偶尔抓不到报文;

或者某个节点突然“失联”,示波器看总线还在跳,但它就是不回 ACK。**

很多工程师的排查方向是:

  1. FIFO 深度不够?

  2. 中断里处理太慢?

  3. 换个更强的 MCU?


二、原理分析

1. 物理模型

CAN 控制器有一套自治的错误处理机制

接收报文 -> [Acceptance Filter] -> [FIFO] -> [CPU Interrupt]

2. 核心参数

  • FIFO 深度:通常只有 3 级(STM32)。

  • Error Counter(错误计数器):TEC / REC。

  • State(节点状态):Active -> Passive -> Bus Off。

3. 反直觉真相

CAN 丢帧通常不是“没收到”,而是“被硬件丢弃了”。

  • FIFO 溢出:中断处理慢了一点点,第 4 帧进来,硬件直接丢弃,且不通知你。

  • 错误被动(Error Passive):节点发送错误过多,被禁止主动发送,只能被动接收。

  • Bus Off:节点自我隔离,彻底沉默。


三、工程级解决方案

方案 1:必须处理 FIFO 溢出(软件解法)

不要指望 FIFO 无限缓存。

// 在 CAN 中断里 if (__HAL_CAN_GET_FLAG(&hcan, CAN_FLAG_FOV0)) { __HAL_CAN_CLEAR_FLAG(&hcan, CAN_FLAG_FOV0); // 记录一次溢出错误 can_fifo_overflow_cnt++; }

最佳实践:

  • 中断里只做标记,不做复杂处理。

  • 在任务线程中处理 CAN 数据。

方案 2:监控错误计数器(救命稻草)

在调试阶段,把错误计数器读出来。

uint8_t rec = (hcan.Instance->ESR >> 24) & 0xFF; // REC uint8_t tec = (hcan.Instance->ESR >> 16) & 0xFF; // TEC

判读标准:

  • REC/TEC > 96 → 进入 Error Passive。

  • TEC > 255 → Bus Off。

方案 3:Bus Off 自动恢复(量产必加)

默认情况下,Bus Off 后需要手动复位。

自动恢复流程:

  1. 检测到 Bus Off 标志。

  2. 等待 128 次连续 11 个隐性位。

  3. 重新初始化 CAN 外设(HAL_CAN_Init)。


四、选型避坑建议

  1. 不要屏蔽错误中断:ERROR 中断是 CAN 的“黑匣子”,必须开启。

  2. 验收滤波器(Filter)

    • 列表模式(List)适合节点少、ID 固定的场景。

    • 掩码模式(Mask)适合批量 ID 过滤。

  3. 不要过度降噪:有些工程师为了“稳”把所有错误帧都屏蔽,结果总线真正出问题时你完全不知道。


五、总结 Checklist

  • [ ] 是否开启了 CAN ERROR 中断?

  • [ ] FIFO 溢出时是否有计数或日志?

  • [ ] Bus Off 后是否有自动恢复机制?

  • [ ] 验收滤波器是否配置正确(没把 ID 过滤掉)?


六、写在最后(关注我,少走弯路)

我是 gqqsherry,一个拒绝调包、专注底层逻辑的嵌入式工程师。

CAN 的错误处理机制是“最不像单片机外设”的部分,它更像一个微型操作系统。

关注我的专栏《嵌入式底层避坑指南》,我会持续更新 CAN、UART、SPI 等外设的真实调试案例量产级解决方案

👉下一篇预告:《CAN FD 跑不起来?别只怪线缆,看看采样点与位时序》


References

  • ISO 11898-1 – CAN error handling and fault confinement

  • STM32 Reference Manual – CAN error status register


如果你在项目中遇到过 CAN 节点“假死”或 Bus Off 问题,欢迎在评论区分享你的排查经验。

原创文章,转载请注明出处。

http://www.zskr.cn/news/1468381.html

相关文章:

  • 洛雪音乐助手:免费开源的全平台音乐播放器完整指南
  • 2026 成都钻石回收|口碑第一 + 实力强劲,全城实体盘点 TOP 榜单,上门估价无隐形扣费 - 奢侈品回收评测
  • ArcMap投影转换避坑指南:手把手教你算UTM带号,告别坐标错乱
  • MegSpot:3种专业级视觉分析方案解决跨平台对比难题
  • FPGA并行计算:突破冯·诺依曼瓶颈,重塑智能硬件设计范式
  • 5个简单步骤掌握Bebas Neue字体:从免费下载到专业应用的完整指南
  • 2026郑州包包回收探店|华润大厦这家大牌回收店实测(LV / 古驰 / 香奈儿) - 新闻快传
  • Arduino智能光调节器:单按钮三档调光与PWM控制实践
  • 心理学实验台、心理实验台成功入榜品牌解析:天津高盛教学仪器如何成为行业标杆 - 品牌推荐大师1
  • Libre Barcode终极指南:开源条码字体一站式解决方案
  • 2026年6月无人机培训评估决策指南:关键指标解析与热门优选 - 新闻快传
  • 六轴机械臂C++逆解程序:输入位姿输出全部8组关节角
  • Ultralytics YOLO关键点检测:高效数据集标注与实战指南
  • 从模组混乱到游戏畅玩:BG3 Mod Manager 终极指南
  • 【信息科学与工程学】计算机科学与自动化——第十篇 芯片设计30 芯片中的数学5
  • 为什么你的B站学习效率只有别人的一半?这款智能字幕工具让你3倍速获取知识
  • 数字隔离芯片选型与PCB设计实战:电容、变压器、RF技术深度对比
  • 如何利用SciCore-Omics实现组织学图像、转录组学和自然语言的联合推理:终极指南
  • AI方案铺完整条业务链,工业企业搞AI转型不用盲人摸象
  • 终极指南:如何用EmojiOne Color彩色表情字体彻底解决跨平台显示难题
  • 重庆翡翠回收实测指南!本地6家机构实测,靠谱变现不踩坑 - 薛定谔的梨花猫
  • 探秘 Go 动态数组:pprof 排查大数据切片 GC 停顿
  • 深入剖析 MySQL InnoDB 引擎,与 Redis 主从复制及哨兵切换机制
  • 从MCU到模拟芯片:Microchip的战略渗透与嵌入式生态构建
  • 下午茶配什么糕点才不踩雷?杭州人私藏百年的答案,藏在杨先生糕点里 - 玖叁鹿
  • MegSpot图片视频对比工具:3步掌握专业视觉分析技巧
  • 2026 年南宁家装怎么选不亏?行情解析 + 避坑干货 + 靠谱品牌盘点 - 新闻快传
  • GHelper:重新定义华硕笔记本控制体验的10MB轻量级解决方案
  • 像素级损失函数和经典超分文章
  • 北京无区域公司注册代办机构排行及核心服务解析 - 互联网科技品牌测评