This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28377D: 请问CAN中总线离线自动恢复功能的问题

Part Number: TMS320F28377D

请问TI技术人员:

1、F2837x的22.4.2.2 Auto-Bus-On 中,CAN从总线离线状态恢复,是不是既需要将Init进行复位,又需要使能ABO位?还是两者均可以触发总线离线自动恢复?如果使能ABO,并且将ABO_Time寄存器设为某一非0值,是否是ABO_Time对应的计数器减为0后,再经过128 * 11个隐性位,总线才能自动恢复?

2、另外,根据CAN协议2.0B,从总线离线状态跳出来,是经过128 * 11个隐性位,为什么文档中是129 * 11个呢?

  • 是不是既需要将Init进行复位,又需要使能ABO位?还是两者均可以触发总线离线自动恢复?

    如果DCAN 基于错误计数器达到错误阈值,它将进入总线关闭状态,以防止F280049在CAN总线中发送错误。一旦进入总线关闭模式,CAN将通过复位Init位自动启动总线关闭恢复序列,并将停止所有总线活动。如果设置了自动总线开启功能(CAN_CTL中的ABO位),则设备将清除Init位,并等待129次总线空闲发生,然后才能恢复正常的CAN操作。恢复序列结束时,错误计数器以及CAN_ES寄存器将被清除。

  • 也就是说,如果使能ABO位,其实也达到将Init位复位的效果吧。但是如果也设置了ABO_Time计数器,是不是意味着要等待该计数器减为0后,Init才复位,然后才开始等待129次总线空闲?

  • 如果使能ABO位,其实也达到将Init位复位的效果吧。

    是的,您的理解是正确的

    但是如果也设置了ABO_Time计数器,是不是意味着要等待该计数器减为0后,Init才复位,然后才开始等待129次总线空闲?

    Number of clock cycles before a Bus-Off recovery sequence is started by clearing the Init bit.

    该寄存器是设置总线恢复序列开始的时钟数,而总线恢复序列开始是由清除Init来实现的。

    "Clock" refers to the input clock to the CAN module. This function has to be enabled by setting bit ABO in CAN Control Register. The Auto-Bus-On timer is realized by a 32-bit counter which starts to count down to zero when the module goes Bus-Off. The counter will be reloaded with the preload value of the ABO Time register after this phase.

  • 你好,我能这样理解吗?如果使用ABO,就不需要再手动复位Init位了。而什么时候将Init复位,是先设置了ABO,然后将ABO_Time计数器递减为0后,Init位会复位,最后再检测128*11个隐性电平后,就真正总线恢复了。是这样吗?

  • 是的,您的理解是正确的