CAN总线技术 | 数据链路层04 - CAN节点状态与错误处理机制

一、前言


CAN的错误类型有如下图所说的5种,其中:

  • 应答错误与位发送错误会出现在CAN发送的节点(CAN发送端)
  • CRC错误与位填充错误会出现在CAN接收的节点(CAN接收端)
    在这里插入图片描述

二、错误检测区域


如下是每一个错误发生在CAN报文中的区域,5种错误类型可以同时发生。位检测的区域最长,可以看到采样点的匹配是多么的重要(一般不建议相差超过6% - 7%)。
在这里插入图片描述

三、错误帧


错误帧长什么样子?一共有两种错误帧,那到底发哪一种错误帧呢?取决于CAN节点的状态,是主动错误状态还是被动错误状态。
在这里插入图片描述

四、CAN节点状态


正常情况下,CAN节点处于主动错误的状态,在主动错误状态下发生错误时,发送错误帧(6个连续显性电平位+8个连续隐性电平位)。
在这里插入图片描述
CAN节点在发送错误计数器或接收错误计数器大于127时,CAN节点将进入“被动错误”状态,并发送错误帧(6个连续隐性电平位+8个连续隐性电平位)。在发送错误或者接收错误减少之后,又会切换回“主动错误”状态。当发送错误计数器大于255时,CAN节点将进入“总线关闭(Bus_Off)”状态,脱离CAN总线,不影响其他CAN节点的通讯。值得注意的是,应用程序负责将CAN控制器切换到“总线关闭(Bus_Off)”的状态,CAN控制器不会自动切换到“总线关闭”状态。
在这里插入图片描述

4.1、FDCAN错误计数器寄存器(FDCAN_ECR)

最近正在使用STM32H743开发CANopen节点,看看FDCAN控制器到底有没有REC与TEC寄存器。通过查看STM32H743的编程参考手册,找到错误计数器寄存器。在这个计数器里面能找到TREC(接收错误计数器)与TEC(发送错误计数器),如下图所示。
在这里插入图片描述

4.2、FDCAN协议状态寄存器(FDCAN_PSR)

CAN节点的状态,从这个寄存器可以了解CAN节点在哪个错误状态(主动错误或被动错误)。
在这里插入图片描述
在这里插入图片描述
接着,也找到了总线关闭(Bus_Off)寄存器。经过测试看到,当接收错误或发送错误一直累加到最后不能累加时,Bus_Off寄存器并没有发生变化,所以Bus_Off是需要应用程序去修改的。
在这里插入图片描述
在这里插入图片描述
最后,也能看到从LEC位找到上一个CAN错误的类型。当然啦,LEC位等于000最好!
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值