最近基于28032平台做CAN通信测试,偶尔出现其中一种协议的广播命令不响应。
大概情况为:
不同协议收发邮箱说明:
|
接收邮箱 |
发送邮箱 |
协议选择标志 (CanProtocolFlag) |
MSGID 初始化 |
LAM接收 滤波 |
模块之间协议 |
BOX1 |
BOX4 |
一直运行 |
0xc6900003 |
0x81DFFFFF |
协议1(监控与模块) |
BOX1 |
BOX5 |
0x00 |
||
协议2(监控与模块) |
BOX1 |
BOX5 |
|||
协议3(监控与模块) |
BOX2 |
BOX8 |
0x03 |
0xC29A00F0 |
0x807FFFFF |
协议4(监控与模块) |
BOX0 |
BOX10 |
0x02 |
0xD307C080 |
0x8006C87F |
通信故障描述
说明:
旧程序包含模块间协议、协议1和协议2,并且默认一直使能。统称为内部协议。
新程序包含上表的所有协议,协议3和协议4 通过标志位选择,内部协议一直使能。
6个模块并机运行(单模块是否复现没验证),刷新新程序。
(1)选择CanProtocolFlag=0x03(协议3),下发一条协议1屏蔽通讯中断的广播命令:
ID:0697FF83 DATA:03 F0 00 37 00 01 00 00 (命令1)
其中拨码地址为5(6个模块中最大地址)的模块偶尔出现不响应情况,这里称为“通信故障”。在此基础上切换通信协议为协议4(CanProtocolFlag=0x02),下发命令1,故障仍然复现。把通信协议切换为内部协议(CanProtocolFlag=0x00),下发命令1,故障消失,也就是说模块响应下发命令。
(2)当模块出现通信故障时,下发协议1点对点命令:
ID:06982F83 DATA:03 F0 00 37 00 01 00 00 (命令2)
模块响应,下发协议1中任何一条广播命令(ID: 0697FF83,目的地址为0xff)模块均不响应。
(3)拨码地址为5的模块出现通信故障的次数最多,2号模块仅出现过一次。通过更换模块的插槽,5号模块还是会出现故障。可以排除5号模块的通信硬件连接问题,排除模块插槽通信线问题。
(4)旧程序没有出现上述通信故障情况。
(5)模块如果上电后第一次能响应命令1,不断电的情况下,模块能正常响应各种协议的命令。如果模块上电后第一次不能响应命令1,不断电的情况下,模块一直不能响应命令1,其他命令均能响应;存在通信故障的情况下在线升级旧程序,然后下发命令1,模块能响应。重新在线升级程序为新程序,模块通信故障仍存在。
(6)出现上述通信故障的情况很难复现。