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.

[参考译文] MSPM0G3507:MCAN 控制器中的状态("总线关闭"状态)

Guru**** 2463330 points
Other Parts Discussed in Thread: MSPM0G3507, AM62P, LP-MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1471285/mspm0g3507-bus-off-state-in-mcan-controller

器件型号:MSPM0G3507
主题中讨论的其他器件: AM62P

工具与软件:

尊敬的专家:

我们  在其中一个硬件设计中使用具有 CAN 接口的 MSPM0G3507。 我们正在应用 CANopen、固件每2秒尝试发送检测信号消息。

当 CAN 总线处于未端接状态(例如未连接电缆时)时、我经常看到的结果是错误计数 MCAN_ECR.TEC值升高到128、导致 CAN 控制器进入"错误被动"状态(MCAN_PSR.EP=1)。 在大多数情况下、即使 固件 继续尝试发送 检测信号消息、错误计数器也会停止。

问题1:为什么 错误计数器 MCAN_ECR.TEC (通常)会停止以128的速率递增?

我遇到了一种情况 一次  (!)  错误计数器 MCAN_ECR.TEC 确实更高的值。 我看到的值是248、但是 CAN 控制器 已经进入"总线关闭"状态 (MCAN_PSR.BO=1)、表示 在我读取它之前错误计数器已经达到255的值。 不过、我不确定   CAN 控制器处于"总线关闭"状态时错误计数器如何递减。   当我重新连接 CAN 电缆并终止总线后、错误计数器没有减少。 我找到的唯一使 MCU 脱离此状态的方法是将其复位。

问题2: 在什么情况下 、 错误计数器会 MCAN_ECR.TEC 增加到128以上?
问题3: 如何 在不复位 MCU 的情况下从"总线关闭"状态恢复?

基本上、同样的问题也适用于 AM62P (运行 Linux)、我们在"另一端"使用它。 CAN 控制器看上去非常相似(如果不完全相同)。  MSPM0G3507和 AM62P 的 TRM 似乎都没有提供有关 此行为的任何详细信息。

希望获得任何帮助或提供更多文件。

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

    您好、Christian:

    1.第一季度和第二季度:

    我尝试 在 LP-MSPM0G3507中测试了 mcan_multi_message_tx_lp_MSPM0G3507_nortos_ticlang 示例、同时未连接任何 CAN 收发器来产生总线关闭条件。 但在我的测试中、在首次进行 MCAN 传输时、MCAN_ECR.TEC 将达到248。 从 TRM 来看、TEC 支持0到255之间的值。

    那么、您能否说明一下、在 TEC 达到128后、TEC 不会增加的结论是从哪里得出的?  

    2.问题3:

    API DL_MCAN_RESET()可以重置 TEC 和 BO 状态。

    此致、

    Pengfei

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、您能否说明从何处得出 TEC 达到128倍后不会增加的结论?  [报价]

    这是我在硬件上看到的(重现性的)内容。

    但是在我的测试中、首次进行 MCAN 传输时、MCAN_ECR.TEC 将达到248。

    为什么只有248? 它应该达到255、对吧?

    API DL_MCAN_RESET ()可以重置 TEC 和 BO 状态。

    好的。 我将在可以使 硬件上的 MCU 再次进入 BO 状态时尝试该操作。 正如我 在最初的帖子中提到的那样、到目前为止、这只发生了一次。

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

    您好、Christian:

    为什么只有248? 它应该高达255、对吗?

    我认为这可能与传输数据的大小和结构有关。 需要多做一个测试来证明这一点。  

    此致、

    Pengfei

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

    尊敬的 Pengfei:

    附加信息:

    认为 、有一次 我在原型板上(错误地)运行固件时看到 MCU 进入 BO 状态 没有 CAN 收发器 安装。 这与错误计数器最终达到248的情况相同、但是 CAN 控制器进入 BO 状态。

     在原型板上  类似的操作 、我无法让 CAN 控制器 将其传输错误计数器增加 到128之后  切勿进入 BO 状态 .

    基本上、如果我知道这是 CAN 控制器的 功能、则不存在这个问题。 我只是 想了解原因、并找到一些 描述这种行为的文档。

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

    您好、Christian:

    认为 有一次 、当我在原型板上(错误地)运行固件时、看到 MCU 进入 BO 状态 没有 CAN 收发器 安装。 这与错误计数器最终达到248的情况相同、但 CAN 控制器进入 BO 状态。

    是的、我要做的就是改变总线关闭状态、看看这个数字是否会不同。 目前没有太多关于 TRM 中 CAN 总线关闭的描述。

    此致、

    Pengfei

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

    你好 Pengfei ...只是想知道你是否在这段时间取得了任何进展?

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

    您好、Christian:

    我尝试将 MSPM0连接到 CAN 收发器、以便与其他注意事项进行 CAN 通信。 当我使 CAN 总线 CANH 和 CANL 短接连接并持续传输数据时、TEC 会增加到248、并发出总线关闭标志。 因此我认为值"248"是 MSPM0 MCAN 中 BusOff 的阈值。

    此致、

    Pengfei

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

    尊敬的 Pengfei:

    当我使 CAN 总线 CANH 和 CANL 短接并持续传输数据时、TEC 将增至248、并发出 BusOff 标志

    那么、基本上与 没有 CAN 收发器时相同、对吧?

    因此、我认为值"248"是 MSPM0 MCAN 中 BusOff 的阈值。

    也是我认为的。 但是、我希望看到这种行为 有案可查  某些文档中的某个位置。

    更大的问题仍然是:
    为什么 CAN 控制器(看似)将 TEC 限制为128、在 存在 CAN 收发器时绝不会进入 BO 状态?

    您现在应该能够重现该场景。

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

    Chris、您好!

    [报价 userid="631335" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1471285/mspm0g3507-bus-off-state-in-mcan-controller/5667080 #5667080"]我想看看这种行为 有案可查  或 TI 文档中的某个位置。[/QUOT]

    抱歉、我们没有这样的文档来准确描述 BUSOFF 行为、但我认为它是由 CAN 协议定义的标准过程。 您可以尝试在官方 CAN 标准手册中找到它。  

    [报价 userid="631335" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1471285/mspm0g3507-bus-off-state-in-mcan-controller/5667080 #5667080"]为什么 CAN 控制器(看似)将 TEC 限制在128并且在 存在 CAN 收发器时永远不会进入 BO 状态?

    否、我是说我通过连接 CAN 收发器进行测试、如果我短接连接 CAN 总线、它也会进入 BO 状态、TEC 达到248。

    此致、

    Pengfei

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

    尊敬的 Pengfei:

    我认为这是一个由 CAN 协议定义的标准过程

    不、不是。 否则、我不会问。  即使 TI 在这种背景下提供的(小尺寸)文档也会说出一些不同的信息:

    否、我是说我是通过连接 CAN 收发器测试了

    如果您不使总线短路并使其保持开路而不使用终端、那么您应该能够看到 与我看到的相同的行为。

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

    您好、Christian:

    即使是 TI 在这方面提供的(小的)文档也表明了一些不同之处

    以下是 ISO 11898-1 2025文件中有关错误计数的一些说明。 您可以看到是否传输了错误标志、TEC 将递增8。 (从 c 点开始)。 当 TEC 增加到248时、它不应再次增加以使 TEC 溢出为零。 因此、当 TEC 增加到255以上并触发总线关闭错误时、将 TEC 保持在最后一个计数器值(248)是合理的。  

    如果您不短接总线并使其保持开路而不终止、您应该能够看到 与我所看到的相同的行为。

    请参阅 c)异常1、当存在收发器时、在这种情况下、可以观察到 CAN 总线;如果未连接其他端接说明、则应出现 ACK 错误。 当 TEC 增加到128 (MCAN 从 ERROR ACTIVE 更改为 ERROR PASSIVE)时、满足异常1条件、因此不会再增加。  

    此致、

    Pengfei

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

    Thx  Pengfei!

    我懂了。 这解释了该行为、毕竟它在 CAN 规格中。