Other Parts Discussed in Thread:C2000WARE
在使用280049进行CAN bus off测试时遇到该类问题:
1、在CAN正常通讯过程中,外部短接CANH和CANL。仿真可看到寄存器CanaRegs.CAN_CTL.bit.Init 变为1。
2、断开外部CANH和CANL,软件手动清除CanaRegs.CAN_CTL.bit.Init = 0,回复CAN通讯。在清除CanaRegs.CAN_CTL.bit.Init = 0 时刻,通过示波器检测CANH或CANL,可看到总线有报文数据(此时我的CAN发送任务还未启动)。我认为是之前发送的数据,因为bus off的原因没有发送成功,存在CAN 发送buffer中。当软件清除CanaRegs.CAN_CTL.bit.Init时,自动发送buffer中的数据。我希望在清除CanaRegs.CAN_CTL.bit.Init时,不要有任何数据发出。等到我的回复工作准备好后,发送全新的数据。
问题,在清除CanaRegs.CAN_CTL.bit.Init之前,怎样清除先CAN发送buffer中的数据。
Green Deng:
感谢对TI产品的关注!为更加有效地解决你的问题,我需要询问更了解这个模块的TI资深工程师,再为你解答,一旦得到回复会立即回复给你。
,
Green Deng:
要禁用未成功发送消息的自动重传,可以将CAN_CTL寄存器的DAR位置1。可以从C2000Ware的driverlib中使用API CAN_disableRetry()。
禁用自动重传也会在仲裁失败后禁用自动重传,请确保程序运行正常。
,
Aiden zhang:
谢谢您的答复。我不是想禁用自动重传,正常通讯过程,轻微的CAN总线故障传送失败通过自动重传是能恢复正常的。我只是想在CAN总线产生bus off 时,在恢复bus off时不要重传之前发送buffer内的数据。
,
Green Deng:
我可以想到的一种可能性是在检测到bus-off时禁用消息对象。假设消息尚未复制到发送缓冲区,将阻止自动发送。