0.CAN总线错误分析与解决–讲的最精辟的放在最前面
我们知道CAN总线上的每个节点往总线上发送数据的同时会同时读取总线上的数据,并与自己发送的数据作对比。—CAN仲裁???

CAN总线错误分别有发送和接收错误计数,计数达到一定的累计以后就会产生CAN BUS OFF, 这说明CAN总线上出现了严重的错误。如下图CAN总线产生错误后的状态转换机制
如果出现了BUS OFF,总线上的节点需要做一些动作,例如重启CAN控制器或是重新上电,但是这些都只是一些补救措施,最根本的还是需要找到引起BUS OFF的根源。
CAN总线状态直接进入了BUS OFF状态,这意味着错误计数已经超限,查看CPU收发寄存器的收发错误计数显示发送错误计数TEC达到248, 接收错误计数为0;这很明显,数据压根没有发送到总线上。
再进一步查看寄存器值LEC即LAST ERROR CODE 最后一个错误代码, 显示是BIT0 ERROR:
查看上面的错误代码表可知,BIT0错误也就是在发送数据期间,虽然CAN节点设备想要发送一个显性位,也就是逻辑0,但是CAN总线同时监听到总线上的数据位为隐性位,即逻辑1。这意味着CAN core往总线上发送的数据第一位就已经出错了,压根没有将数据经过CAN收发器传送到CAN总线上。
一直在使用CAN总线的我厂和我从来没遇到这等奇事,但是由于是新的CPU的开发所以在怀疑硬件的问题的同时也在排查软件问题,但是经过一阵排查,没有发现软件上的问题。回头再分析硬件,又经过一阵排查溯源,发现CPU的CAN收发线与CAN收发气的收发线接反,直接崩溃(PS: 硬件的大哥你能不能不要坑小弟):
CAN节点发送数据不成功,首先分析是不是CAN控制器本身的问题,查看CPU中的CAN core的状态寄存器,分析是否有BUS OFF, 如果存在BUS OFF, 则进一步查看具体的错误信息,是主动的错误还是被动的错,发送错误计数有没有超限,最后一次发生的错误状态是什么,查看是位填充错误还是格式错误等其他错误,然后具体问题具体分析。这种错误一般是有硬件发送线路出现问题引起,例如光隔次边不导通,发送接口接触不良等,再则是一些奇葩的错误,例如本例,收发线直接接反了,坑爹啊!

本文详细探讨了CAN总线的错误类型、错误计数机制、BUSOFF状态处理以及硬件与软件排查过程。重点介绍了发送错误、接收错误、位错误和硬件连接问题对通信的影响,以及如何通过设置CAN_InitStruct优化错误处理。
最低0.47元/天 解锁文章





