目前使用28335的CAN接口,发现在外部干扰强烈的时候,CAN接口会无法通讯。
测试了一下,CAN正常发送数据时,将CANH或者CANL短接或者分别接到GND人为制造干扰,干扰消除以后,CAN通讯无法自动恢复。
检查CAN初始化代码以后发现CANMC寄存器的ABO位没有打开,打开ABO位以后,将CANH或者CANL短接或者分别接到GND人为制造干扰,干扰消除以后,CAN通讯可以自动恢复。但是CANES寄存器的EP和EW位始终置位。
以下是sprueu1文档中CANMC寄存器的ABO位描述。该文档对CAN通讯错误处理描述较少,有没有更多CAN错误处理相关的资料和参考代码?
Auto bus on. This bit is EALLOW protected.
1 After the bus-off state, the module goes back automatically into bus-on state after 128 * 11 recessive bits have been monitored.
0 The bus-off state may only be exited after 128 * 11 consecutive recessive bits on the bus and after
10#:
CANES寄存器的EP和EW位始终置位,是需要用户在检查到错误后进行软件干预和处理的,它表明进入了被动错误模式。
你可以结合它的BO位和CANTEC/CANREC了解它的状态。
F28335的CAN是完全符合BOSCH v2.0协议的,所以它的错误处理请参考标准协议。