CAN总线的错误检测机制

错误类型

  • 位错误-Bit Check Error
  • 填充错误-Stuff Error
  • 格式错误-Form Error
  • ACK错误-ACK Error
  • CRC错误-CRC Error

1、位错误-Bit Check Error

位错误-即 节点回读检测到的位与自身送出的位数值不同
位错误的检测范围为 SOF -> EOF
在这里插入图片描述

以下情况不判断为 位错误

  1. 对于仲裁区,如果节点发送为“隐性”位,而检测到“显性”位不导致位错误,表示该节点仲裁失败
  2. 对于ACK槽,如果节点发送为“隐性”位,而检测到“显性”位不导致位错误,表示该节点发送的报文未被其他节点正确接收
  3. 节点在发送被动错误标志时检测到显性位不认为是位错误,如果某个节点发送了被动错误标志,然后回读的不是6位连续的隐性位,这种情况是由于CAN总线的 线与 机制,被动错误标志别其他节点发送的显性位给覆盖掉了。

2、填充错误-Stuff Error

填充错误即 在使用位填充编码的帧场(SOF -> CRC)中,不允许出现六个或更多连续相同的电平位
在这里插入图片描述

3、格式错误-Form Error

格式错误即 在固定格式位场(CRC界定符、ACK界定符、帧结束)检测到一个或更多显性位
在这里插入图片描述

以下情况不判断为 格式错误

  1. 接收节点在EOF最后一位检测到显性位,不认为是格式错误,而认为是超载帧的开始,而发送节点会认为是格式错误

4、ACK错误-ACK Error 和 CRC错误-CRC Error

CRC错误即 接收节点计算的CRC序列与接收到的CRC序列不同
ACK错误即 发送节点在ACK槽时间内未检测到“显性”位
在这里插入图片描述

5、错误示例

1、位错误和填充错误
在这里插入图片描述

错误处理

为了由于自身某些原因导致无法正常接收的节点一直发送错误帧干扰其他节点通信,CAN BUS规定了节点的三种状态:

  • 主动错误 - error active
  • 被动错误 - error passive
  • 总线关闭 - bus off

在这里插入图片描述

MCU编程实现总线关闭“快恢复”和“慢恢复”的一般过程可用以下流程图描述:
在这里插入图片描述

1、主动错误 - error active

  • 节点能正常参与总线通信的收发

  • 错误帧结束之后,总线回到正常状态,被中断的节点会尝试重新发送刚才的消息

在这里插入图片描述

在主动错误状态下,当节点检测到一个错误,就会发送带有主动错误标志的错误帧,主动错误标志是连续6个显性位,所以此时将会覆盖总线上其他节点的发送 ,而之前在CAN总线上传输的报文就会被这6个连续显性位破坏掉

2、被动错误 - error passive

  • 节点可以参与总线通信的收发
  • SuspendTransmission之后,总线回到空闲状态,如果这个节点能够竞争成功,那么它就能接着发送,如果竞争不能成功,那么就接着等待下一次竞争。 目的是为了让其他正常节点优先使用总线

在这里插入图片描述

在被动错误状态下,当节点检测到一个错误,就会发送带有被动错误标志的错误帧,被动错误标志是连续6个隐性位,所以此时总线上其他节点的发送不会受到影响

3、总线关闭 - bus off

  • 节点的所有总线活动停止
  • 节点暂时不能参与到总线通信中。处于这种状态中的节点既不可接收也不可发送消息
    在这里插入图片描述

4、错误计数值的变动条件

在这里插入图片描述

参考

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值