最近遇到CAN总线通讯的问题
上位机为arm板,核心板为Cortex A9处理器, Linux内核
下位机为5块 STM32板
现象为:
如果上位机只接收数据,一切通讯正常。当上位机下发命令,那么上位机显示通讯断开。
(我的编写的逻辑是,上位机5秒内收不到数据,就判断通讯断开)
问题分析:
1、查看上位机程序打印,显示非阻塞select函数返回值为0,意味着socket连接完好,但没有收到数据
2、使用周立功CAN分析仪,截取CAN总线数据,发现下位机在不停发送数据。
3、首先排除arm板固件问题,因为换了在别处正常的arm板,结果问题相同。
4、继续使用CAN分析仪,发现总线上有非常多的错误码,只接收不下发数据的时候,也还是有许多错误码。
问题定位:
总线上大量的错误码,随着上位机数据下发,造成了CAN总线阻塞。
一般定位在STM32单片机或者接线。
检查接线,发现4号、5号板没有使用总线接法(跨接串联的方式),这导致几个节点被拓扑在了一个节点。
问题解决:
修改了接线方式,数据错误码不再刷屏。 下发数据也不会造成通讯阻塞。
总结:
当发现CAN总线通讯中断,上位机CAN驱动select函数返回值为0,而总线上数据正常,但有大量错误码。
那么可以先检查接线,以及STM32等单片机的质量问题