什么是CAN的BUS-OFF,如何恢复BUS-OFF?

描述

CAN作为一款强大的工业总线,其高性能和高可靠性让其应用特别广泛。一个小知识:汽车里面各个模块之间的通讯就是使用CAN来实现的哦。

既然是总线,那当然会有多个设备挂载在CAN上,当一个设备在发送数据的时候,其他设备也没有在闲着,它们会对接收到的数据格式进行解析,一旦发现有错误就会发送错误信号到总线上。

CAN

 

那么,如果一个设备确实出现了问题,老是发出错误格式的帧(比如波特率有偏差等等)怎么办呢?嘿嘿,不等大家把它踢出局,它自己就会老老实实的退出总线,不再往总线上发数据了,这个就叫做BUS-OFF,也就是设备离线。

那么MCU如何触发这个BUS-OFF呢?我们以GD32F303为例来说明。GD32F303的CAN在发送一次错误的帧后,会将发送错误计数器的值+1,当这个计数值达到255时,就会触发BUS-OFF机制,退出总线。

CAN

 

这个时候有的小伙伴就会问了,一个设备运行很长时间,总会有发送错误的时候吧,如果就这么退出总线了,岂不是太冤了?其实不是的,当设备在发送错误计数器的值不等于0的情况下,发送一次正确的帧,这个计数值会-1的。

当一个设备BUS-OFF了,但它自恢复了错误状态,想继续回到总线上怎么操作呢?有两种方式:

1、打开GD32F303的离线自动恢复功能,当出现BUS-OFF,MCU在检测到离线恢复序列(在CAN_RX检测到128次连续11个位的隐性位 )后就会自动恢复。

CAN

 

2、如果没打开自动恢复功能,则需要让CAN进入到初始化模式,再进入正常工作模式即可。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分