Blackrose's Blog Blackrose's Blog

CAN通信调试记录

in technologyread (278) 文章转载请注明来源!

1.双方无法收发数据
手头有两块板子需要调试,RSB4210和mcf52259。之前,在loopback模式下都做了测试,是正常的。但两块连接后,就无法正常通信了。两块4210连接后调试是正常的,说明CAN收发器和驱动方面都是正常的。但与52259通信却不正常,从示波器上可以看到两块子的CAN发送数据都有相应的波形。与研华技术支持联系后,通加增加终端电阻也无法解决。后来,想到让两块板子发送相同数据来对比波形,看是否问题在CAN硬件部分。在公司硬件工程师的帮助下,发现两个波形的速度好像不一致,经过一番对比,发现是RSB4210的bitrate不准确,但又不知道换算关系。最终,多次测试后找到了50khz,与52259通信正常。

2.通信时出现一发多收的问题
mcf52259发一条,RSB4210却接受到上百条信息。最初遇到这个问题,冒然认为是RSB4210的驱动有问题。后来在BOSS的提醒下,对想到这个情况有可能是两双都有问题:
A.RSB4210的接收有问题,导致状态未清除,同一报文打印多次
B.mcf52259发送后,认为没有发送成功,然后就一直重新发送
刚开始,由于对CAN通信的原理不了解,导致问题的错误定位。看完CAN的通信原理后,当节点成功接受到一帧数据时,会发送一个ACK,是显性的。而发送节点检测到是显性位时,也就知道数据发送成功了。相反的情况时,发送节点就知道出现部问题,然后就会再次重发。这个问题的核心是,什么情况下RSB4210正确接受到多条信息,并且返回了正确的ACK,而MCF52259却认为的失败的数据?
通过对CAN通信的深入学习,终于找到了原因,mcf52259的flexcan位定时设置有问题。

总结:
1.明白所用工具的原理。刚开始在MQX系统上测试,后来总觉得有问题,就用裸机来测,这样是换个角度来确定问题。
2.深入原理。如今编程充斥着大量API,大家都在用接口,却对其原理知之甚少。想要合理使用,应该深入原理,才能扬长避短。
3.熟练使用常用工具。由于对示波器使用不熟,结果花了很长时间才找问题的本质。


参考文献
关于CAN报文中ACK应答错误的检测原理
CAN 总线中主动错误和被动错误的通俗解释
CAN总线的局限

文章二维码

扫描二维码,在手机上阅读!

发表新评论
博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
前篇 后篇
雷姆
拉姆