汽车工程师之家


中国汽车工程师之家--聚集了汽车行业80%专业人士 

论坛口号:知无不言,言无不尽!QQ:542334618 

本站手机访问:直接在浏览器中输入本站域名即可 

您当前所在位置: 汽车电子 > 查看内容

CAN总线错误分析与解决

文章作者头像
发布:baoshijie 来源:
PostTime:9-12-2023 08:21
本文从实际工作中碰到的具体问题来分析一些常见的CAN总线错误和解决办法。CAN节点数据收发过程我们知道,CAN总线上的每个节点往总线上发送数据的同时,会读取总线上的数据,并与自己发送的数据作对比。CAN信息发送成 ...

以下为文章全文:(本站微信公共账号:cartech8)


汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师

本文从实际工作中碰到的具体问题来分析一些常见的CAN总线错误和解决办法。

CAN节点数据收发过程



我们知道,CAN总线上的每个节点往总线上发送数据的同时,会读取总线上的数据,并与自己发送的数据作对比。
CAN信息发送成功后,在这个间隙内,接收节点可以准备要回复的信息,也就是把应答场填充为显性0,在发送时其为隐性1。应答过程可能如下:当信息传输到ACK前的Del时,可以认为信息已经传输完毕,接收节点也接收到了足够的信息来检测接收的信息是否正确。
这时接收节点就会检测信号是否正确,如果正确,就将ACK置位为显性0,注意这时,发送节点因为还在发送而接收节点又将ACK信息置位为1,所以它就会在回读时检测到ACK为0,判断接收成功。

注意:这其中有个接收节点用显性覆盖隐性---覆盖ACK位的过程,覆盖+回读。

ACK前后各加一个Del,就是为了考虑到时间误差,让接收节点有足够的时间对ACK确认。这个过程说明,CAN发送是个双向互动的过程,发送节点一边发送,一边对节点进行回收确认数据正确,而接收节点也时刻接收,并在正确的时间将ACK设置为1。


CAN总线错误
CAN总线错误分别有发送和接收错误计数,计数达到一定的累计以后就会产生CAN BUS OFF, 这说明CAN总线上出现了严重的错误。
如下图CAN总线产生错误后的状态转换机制:



如果出现了BUS OFF,总线上的节点需要做一些动作,例如重启CAN控制器或是重新上电,但是这些都只是一些补救措施,最根本的还是需要找到引起BUS OFF的根源。

CAN总线分析的一些工具和文档:

CAN分析仪或者逻辑分析仪

数字示波器

相关的软件debug工具

CAN控制器芯片数据手册

硬件电路图

CAN协议文档

CAN节点发送错误不成功
挂载在CAN总线上的一个节点向总线上发送数据不成功,用逻辑分析仪也看不到任何波形。
下面具体来看看怎么不成功。于是调试中断查看 CAN_STATUS 即 CAN状态寄存器显示 0xE5, 查看CPU数据手册:



CAN总线状态直接进入了BUS OFF状态,这意味着错误计数已经超限,查看CPU收发寄存器的收发错误计数显示发送错误计数TEC达到248, 接收错误计数为0。这很明显,数据压根没有发送到总线上。

再进一步查看寄存器值LEC即LAST ERROR CODE 最后一个错误代码, 显示是BIT0 ERROR。



查看上面的错误代码表可知,BIT0 错误也就是在发送数据期间,虽然CAN节点设备想要发送一个显性位,也就是逻辑0,但是CAN总线同时监听到总线上的数据位为隐性位,即逻辑1。
这意味着CAN core往总线上发送的数据第一位就已经出错了,压根没有将数据经过CAN收发器传送到CAN总线上。

由于是新的CPU的开发所以在怀疑硬件的问题的同时也在排查软件问题,但是经过一阵排查,没有发现软件上的问题。回头再分析硬件,又经过一阵排查溯源,发现 CPU 的 CAN 收发线与 CAN 收发器的收发线接反了。



总结

CAN节点发送数据不成功,首先分析是不是CAN控制器本身的问题,查看CPU中的CAN core的状态寄存器,分析是否有BUS OFF, 如果存在BUS OFF, 则进一步查看具体的错误信息。
是主动的错误还是被动的错,发送错误计数有没有超限,最后一次发生的错误状态是什么,查看是位填充错误还是格式错误等其他错误,然后具体问题具体分析。
本文内容来自于汽车电子嵌入式,版权属于原作者。


[文章纠错]

文章网友提供,仅供学习参考,版权为原作者所有,如侵犯到

你的权益请联系qchjl_admin@126.com,我们会及时处理。

会员评价:

0 发表评论

渝公网安备 50010802001066号

QQ|小黑屋|手机版|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 26-2-2024 21:21 , Processed in 0.122785 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.