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 静音模式

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/782473/tms570lc4357-seamless-leaving-of-dcan-silent-mode

器件型号:TMS570LC4357

您好!

在我们的应用中、我们首先配置 DCAN 静音模式(DCAN 测试寄存器位3 -静音模式)、然后在确定 CAN 总线正常后离开静音模式。

有时、在离开静音模式几毫秒后、我们意外地在 CAN 端口上找到错误状态(以拼写错误的方式、 设置了 DCAN ES.boff、.WEarn 和.epass)。

在 TRM 中、我没有找到任何有关进入/离开静默模式时同步的文档(尽管我确实找到了一条有关确保在进入回送模式时完成消息传输的说明)。 为了无缝退出或进入静默模式、我们是否需要满足任何先决条件?

感谢你的帮助。

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

    您好!

    回环模式和静音模式不同:

    在静默模式下、DCAN 将在不发送任何显性位(无 ACK、无错误帧等)的情况下监听总线、在这种特殊模式下、TEC/REC (发送错误计数器/接收错误计数器)为冻结。

    在回送模式下、您将 Tx 引脚路由到 Rx 引脚、在其他字中、您仅接收正在传输的消息。

    您注意到在离开静默模式总线关闭后、错误状态寄存器中设置了错误保修、错误认可、

     在进入静默模式之前,您是否检查了错误状态的值?

    对于我的一方、我不希望在静默模式下对 TEC/REC 进行任何修改(这可能导致 ES 更改)。

    告诉我结果、

    BR、

    Yacine

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

    您好、 Yacine、

    感谢您的回复。 我知道环回模式与静音模式不同。 我只提到了环回模式,因为 TRM 的测试模式部分中有一条注释(spnu563,27.14:“当使用任何环回模式时,必须由软件确保在将 Init 位设置为‘1’之前完成所有消息传输。”)。 此注释恰好出现在27.14.1 静音模式之前、因此您也可以(错误?)解释该注释以应用于静音模式。

    在离开静默模式之前、不会显示错误状态。

    离开静默模式后、错误状态有时会在尝试在端口上进行第一次传输后出现。

    无论错误状态是否出现、我都注意到、如果我们在离开静默模式后尝试立即传输 CAN、CAN Tx ISR 在离开静默模式后的立即延迟时间为5-10ms。

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

    当 CPU 写入 IFx 命令寄存器的消息编号时、CAN 传输开始。 在传输过程中、BUSY 位自动设置为1。 如何测量从写入消息编号到 ISR 被触发的时间?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 QJ、

    我将测量从写入 IF2命令寄存器到 ISR 开始的时间。 通常、时序小于1ms、但在有问题的情况下(离开静默模式后立即启动传输)为5ms-10ms。

    关于 IF2命令寄存器忙位、我从未看到该位变为高电平、即使在写入 IF2命令寄存器后立即变为高电平也是如此、这会导致随后成功的 Tx。 如果该位在4到14个 VBUS 时钟周期内保持高电平、我应该能够在很多 CPU 周期内看到它为高电平、但情况并非如此。 这是否表示有问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    也许我的问题变得没有重点。 以下是我要回答的主要问题:

    1) 1)我看不到 IF2命令寄存器 BUSY 位曾经被置位、即使我在写入命令寄存器的最后8位后立即检查它(即使我重复发送 CAN、也没有发现任何问题)。 这是意外的吗?

    2) 2)与写入命令寄存器的最后8位相比、哪些原因会导致 Tx 中断延迟?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >与写入命令寄存器的最后8个位相比、哪些因素会导致 Tx 中断延迟?

    概括地说、在我看来、在离开静默模式后的一段时间内(可能< 100ms)、可以传输的时间并不可靠。 发送错误计数器可能会以伪增量递增、并且我们可能会错误地进入 BUS OFF。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    忍者、您好!

    您是否出于某种原因修改初始化位(DCAN_CTL)? 离开/进入静音模式时?

    BR、

    Yacine

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

    您好、 Yacine、

    我尝试了两种方法、结果相似:

    1) 1)设置 INIT/CCE。

    2) 2)等待 INIT 位变为高电平。

    3) 3)更新静默模式。

    4) 4)清除 CCE/Cinit。

    5_等待 INIT 位变为低电平。

    。 此外、还可以简单地:

    1) 更新静默模式(不要触按 INIT/CCE)。

    根据我对数据表的读数、在修改静默之前无需设置 INIT/CCE。 但在这两种情况下、我仍然会看到问题。

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

    通常、在 IF 寄存器和消息 RAM 之间传输数据需要4~6 μ s 周期。 很难观察 BUSY 位的设置、因为读取和检查该寄存器可能需要更多的周期。