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.

[参考译文] TMS570LC4357:未能将 DCAN #39;s 初始位设置为被动错误状态。

Guru**** 2481465 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/942512/tms570lc4357-failed-to-set-dcan-s-init-bit-at-passive-error-state

器件型号:TMS570LC4357

当 DCAN 处于被动错误状态时、尝试将 DCAN 的初始位设置为1、并通过软件复位 DCAN。 有时、设置 DCAN 的 INIT 位需要很长时间、在 INIT 位被攻击之前超过10ms。

是否有人以前遇到过此问题? 修复它的方法是什么?

此外、什么是使 DCAN 脱离无源错误状态的更好方法? 如何清除 RX 误差?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mike:

    不应花费这么长的时间。 我在 LS04x 器件上的测试显示、它只需93个 CPU 时钟周期(CPU 为80MHz)。  

    以下是我的测试代码。 由于没有 ACK 信号、CAN1继续向 CAN 总线发送报文、因此错误增量为0x80 (无源)。 当 EPASS 位置位时、PMU 计数器开始计数、并向 Init 位写入1。 在 Init 位被置位后、PMU 停止计数:

    while (1)

       canTransmit (canREG1、canMESSAGE_BOX1、&TX_DATA[0]);

       if ((canREG1->ES & 0x20)=0x20){

      _pmuResetCounters_();
      _pmuStartCounter_(pmuCYCLE _计数器);
      canREG1->CTL |= 0x01;

      while ((canREG1->CTL & 0x01)!= 0x01);

      _pmuStopCounter_(pmuCYCLE _计数器);

      /*获取 CPU 周期计数*/

      pmuCount =_pmuGetCycleCount_();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    设置 INIT 位并不总是花费超过10ms。 通常只在运行 CanClose ()和 CanOpen ()几个小时后发生一次。 我们使用 CanClose ()和 CanOpen ()使 CAN 脱离被动错误模式。

    BTW、是否有任何推荐方法可以让 CAN 退出无源错误模式?

    谢谢  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mike:

    当正确发送和/或接收到一条消息时、错误计数减少1。 您需要确定错误的来源:ACK 错误、位错误、填充错误。