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.

[参考译文] LP-MSPM0G3507:MCAN 总线上的 LP-MSPM0G3507 NACK 错误

Guru**** 2845750 points

Other Parts Discussed in Thread: SYSCONFIG, LP-MSPM0G3507, TCAN-SOIC8-EVM, MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1620644/lp-mspm0g3507-lp-mspm0g3507-nack-errors-on-the-mcan-bus

器件型号: LP-MSPM0G3507
Thread 中讨论的其他器件: SysConfigTCAN-SOIC8-EVMMSPM0G3507

您好、

我目前正在开发一个需要在 500kbps 传统 CAN 总线上进行通信的原型。 我只需要过滤总线上的信息以获取特定 ID 并将其用作照明触发器。

我将软件基于 LP-MSPM0G3507 的 single_message_rx 示例。 Main() 函数与中断完全相同。 SysConfig 时钟与所有其他选项完全相同、只是取消选择了 CAN FD、选择了 500kbps 比特率并禁用 ID 过滤器以进行故障排除。

我使用的 CAN 收发器是焊接到 TCAN-SOIC8-EVM 上的 TCAN1057AVDRQ1。 收发器 VCC 来自 LP-MSPM0G3507 的 5V 电源轨、VIO 来自 3.3V 电源轨。 我使用总线主控器通过 USB 将 CAN 消息发送到 CAN IXXAT 器件。 终端正确、因为我在总线上使用 DMM 测量 60 欧姆。

我知道收发器工作正常、如示波器捕获图中所示。

在 CAN_TX 线上只有噪声。

我已经在 IC 引脚上测得(对于 CAN_RX、为 PA13)、可以看到 CAN 消息正确且已通过示波器正确解码。 但 MSPM0G3507 从不确认该消息、从不触发中断、基本上微控制器会保持低功耗状态、永远不会从_WFE () 唤醒。

我是一个硬件的家伙,很少有软件经验,非常感谢支持这个问题,因为我们的一个项目挂起平衡.

非常感谢。

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

    请参阅此演示代码:

    e2e.ti.com/.../mcan_5F00_application_5F00_LP_5F00_MSPM0G3507_5F00_nortos_5F00_ticlang_5F00_20250801.zip

    您可以在此处修改滤波器、我在 syscfg 中设置 4 滤波器。

    您可以在此处获取 Rx 数据:

    并在此处发送 TX:

    对于硬件设置、请仔细检查 syscfg 引脚分配。

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

    我刚刚尝试过此代码、但在每一帧上都仍然收到 NACK 错误。 我再次检查了 SysConfig 中的引脚分配 (Rx = PA13 和 TX = PA12)、根据 LaunchPad 用户指南、这是正确的。

    我已在第二个 LaunchPad 上尝试过该测试、但收到相同的错误。

    我是否可以理解、 mspm0_sdk_2_09_00_01 中 mcan_message_rx 的示例代码不起作用?

    另外、请回复我的原始申请、我目前不需要过滤器、也不需要 TX。 我只需要让微控制器确认我在总线上生成的 CAN 帧。  mcan_message_rx 应该是在这种情况下应该遵循的示例否?


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我刚刚尝试过此代码、但在每个帧上仍然收到 NACK 错误。

    NACK 表示 CAN 总线上没有其他 CAN 节点、只有发送器本身 emmmmm 需要确认您的 CAN 总线信号通过 CAN 转换器连接到 M0 CAN 控制器。

    我想了解、mspm0_sdk_2_09_00_01 中 mcan_message_rx 的示例代码 不起作用吗?

    SDK 中的所有 CAN 演示都应该正常工作。 我没有看到任何问题。

    我现在不需要过滤器、也不需要 TX。 [/报价]

    滤波器和 Tx 都不会影响 ACK 信号、所有 CAN 控制器都需要确认任何 CAN 帧。

    mcan_message_rx 应该是本例中要遵循的示例否?

    是的、就足够了。

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

    这是使用 SOIC8 TCAN Devkit 和 LP-MSPM0G3507 设置的方法。



    此设置直接取自 MSPM0G 硬件开发指南。  

    RXD 连接到 PA13、TXD 连接到 PA12。

    从我原始请求的图像中可以看到、CAN 收发器按预期工作、并根据 CAN_H 和 CAN_L 总线上发送的消息生成 3.3V CAN 消息。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如您在我的原始请求的图像中所示、CAN 收发器按预期工作、并根据 CAN_H 和 CAN_L 总线上发送的消息生成 3.3V CAN 消息。

    对我来说似乎还可以。

    基于之前的 NACK 错误、这意味着 MSPM0 尚未在 CAN 总线上、或 MSPM0 CAN 控制器未成功被写入。

    这是我的建议:

    M0 侧的 CAN 发送测试可确保您的硬件设置良好、因为 M0 侧的 CAN 发送不会很困难。

    您可以使用 CAN 分析仪直接监控 CAN 总线。

    这是确认 CAN 总线正常的最简单方法。

    然后、您可以进一步调试 Rx 函数。

    由于此演示  mcan_message_rx  将仅支持一次 CAN Rx、请注意 yout 发送时序。

    我知道您只需要一个 CAN Rx 函数 、但相信我、这很容易使用:

    mcan_application_LP_MSPM0G3507_nortos_ticlang_20250801.zip

    ---------------

    此外、需要确保在将 STB 连接到 5V 时不存在逻辑电平问题、但其他逻辑电平 RXD/TXD 为 3.3V。

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

    您好、

    我刚刚尝试使用演示 mcan_single_message_tx 进行 CAN TX 测试。 它根本无法工作、我看不到 CAN 分析仪中没有任何东西。

    我在演示中修改了以下内容:

    - CAN FD 已禁用

    -仲裁比特率和数据比特率设置为 500kbps

    - TxBufElement 被修改为 CAN 经典消息,如下所示

    “此外、需要确保在将 STB 连接到 5V 时不会出现逻辑电平问题、但其他逻辑电平 RXD/TXD 为 3.3V。“


    我尝试将 STB 连接到 VIO (3.3V) 和 VCC (5V) 并获得相同的结果、没有。

    我使用 PA12 作为 TX 引脚、连接到 TCAN 器件的 TX 引脚、并使用 PA13 作为 RX 引脚、连接到 TCAN 器件的 RX 引脚。

    我在一个完全的损失,作为如何使这个工作,因为我正在使用两个 devkit 和示例软件,我甚至不知道它可能失败的地方...


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

    我还使用两个不同的 LP-MSPM0G3507 器件尝试了相同的测试设置、并获得相同的结果、因此我不认为这是硬件故障。 TCAN 似乎工作正常、因为它可以解码从 IXAAT USB 发送到 CAN 转换器的消息、而不会出现任何问题。

    以下是初始化期间使用的 Init 和 Config 参数、您在该端看到任何错误吗?

    static const DL_MCAN_InitParams gMCAN0InitParams= {
    
    /* Initialize MCAN Init parameters.    */
        .fdMode            = false,
        .brsEnable         = false,
        .txpEnable         = false,
        .efbi              = false,
        .pxhddisable       = false,
        .darEnable         = false,
        .wkupReqEnable     = true,
        .autoWkupEnable    = true,
        .emulationEnable   = true,
        .tdcEnable         = true,
        .wdcPreload        = 255,
    
    /* Transmitter Delay Compensation parameters. */
        .tdcConfig.tdcf    = 10,
        .tdcConfig.tdco    = 6,
    };
    
    static const DL_MCAN_ConfigParams gMCAN0ConfigParams={
        /* Initialize MCAN Config parameters. */
        .monEnable         = false,
        .asmEnable         = false,
        .tsPrescalar       = 15,
        .tsSelect          = 0,
        .timeoutSelect     = DL_MCAN_TIMEOUT_SELECT_CONT,
        .timeoutPreload    = 65535,
        .timeoutCntEnable  = false,
        .filterConfig.rrfs = true,
        .filterConfig.rrfe = true,
        .filterConfig.anfe = 1,
        .filterConfig.anfs = 1,
    };
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我这边看不到任何问题。

    - TxBufElement 被修改为 CAN 经典消息、如下所示

    没问题。

    我使用 PA12 作为 TX 引脚、连接到 TCAN 器件的 TX 引脚、PA13 作为 RX 引脚、连接到 TCAN 器件的 RX 引脚。[/报价]

    没错。

    确保在 mcan 的 syscfg 引脚多路复用中分配这两个引脚。

    以下是初始化期间使用的 Init 和 Config 参数、您是否看到此端的任何错误?

    此处未发现问题。

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

    是否正在运行 single_message_tx 示例代码? 我看到您的屏幕截图中的 ID 发生了变化、代码不正确?

    在调试过程中、我可以看到使用断点时 PB 的中断有三角、并且发送代码已执行。 检查 txMsg 结构得到以下结果(对于 CAN ID 0x04):

    {“id":“:1048576、

    “Rtr":“:0、“XTD":“:0、

    “ESI":“:0、“DLC":“:1、

    brs:0、

    “FDF":“:0、

    “EFC":“:1、

    “mm":“:170、

    “数据“:[0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0,255,255,255、255,255,255,255、255,255,255,255、255,255,255,255、255,255,255,255、255,255,255,255、255,255,255,255

    MSPM0 仍然完全没有输出。

    这些引脚在 SysConfig 中正确分配。


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

    确保在 M0 和 Rx 之间连接正确的 Tx-Tx、Rx 和 TCAN。

    如果一项设置不起作用、请尝试切换它们。

    如果 Tx 和 Rx 连接方式错误、Tx 引脚上不会有任何信号。

    在调试过程中、我可以看到使用断点时 PB 的中断是三角的、并且传输代码已执行。 检查 txMsg 结构会得到以下结果(对于 CAN ID 0x04):

    这只是 RAM 缓冲区、这些数据将写入 CAN RAM 以供 CAN 内核使用。

    写入 CAN RAM 且设置了 Tx 要求后、MCAN 会将这些数据发送到 Tx 引脚。

    您是否正在运行 single_message_tx 示例代码? 我看到您的屏幕截图中的 ID 正在更改、代码不正确?

    [single_message_tx  ]和[mcan_application]都在 我这边进行测试。

    对于[SINGLE_MESSAGE_TX]、您需要按下按钮来触发 CAN 发送、是否按下按钮?

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

    经过大量测试后、我发现问题是由于 TCAN 模块的引脚 8 设置为静音模式所致。 我将 TCAN-SOIC8-EVM 上的跳线 J2 设置为 VCC、当时它应该设置为 GND。

    这是一个愚蠢的错误,但在最后所有的工作现在都很好!

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

    很高兴您的问题得到解决~感谢您的反馈~