大家好!
目前正在做电源中的CAN通信,每个模块使用的单片机是MT006,程序逻辑如下:
1、CAN总线上有6个子模块,使用CAN分析仪连接到CAN总线;
2、CAN分析仪发送指令给模块,指令可以发给其中某个指定模块,子模块根据协议中的ID确认是不是发给自己的,如果是就回应,否则不回应,CAN分析仪也可以发送类似广播的方式要求所有模块都要回应,比如协议中的ID设置为0xFF就表示每个模块都要回复;
现在问题是这样的:
1、单独发给指定ID的模块,发送和接收都正常;
2、如果使用广播包的形式要求每个模块都要回应时,CAN分析仪偶尔出现接收丢包的现象,发送正常,例如:有两个模块挂接在CAN总线,ID分别为1和2,CAN分析仪在发送广播包,大部分时间都能收到两个模块的回应,有时出现模块1无回复或者模块2无回复,但没有出现两个模块都没有回复的现象。
按理说,ID不同,子模块在同时发送数据有CAN仲裁机制,各位能帮忙分析下可能的原因吗?谢谢!
引用: flyaqiao 发表于 2024-9-26 17:21 1.ID是不是有重复 2.如果ID不重复,检查看看自动重发机制有没有打开
你好!ID确认没有重复,这个自动重发我要看下那个单片机的技术手册,谢谢!
引用: flyaqiao 发表于 2024-9-26 17:21 1.ID是不是有重复 2.如果ID不重复,检查看看自动重发机制有没有打开
我看了芯片手册,当出现仲裁丢失时会自动重试发送消息,应该就有重发机制,有没有可能是CAN分析仪的问题,到时我确认下模块有没有发出消息。
引用: led2015 发表于 2024-9-26 19:16 单独发送指定ID的模块正常:也仅仅是表明各个模块的基本通信功能是正常的,能够正确识别和处理针对自 ...
你好!请问下在多个节点同时回复消息,CAN分析仪偶尔出现接收错误有可能的原因有哪些?但分析仪界面并没有显示任何总线错误,只是右下方接收错误计数会更新。
引用: flyaqiao 发表于 2024-9-26 18:17 很多芯片的重发机制是可以开关的
有没有可能是终端电阻匹配造成的?现在每个模块都并了120欧电阻,而并不是首尾两个节点才有终端电阻。