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:TMS570LC4357 canREG1无法读取从外部 CAN 助手发送的数据

Guru**** 2393725 points
Other Parts Discussed in Thread: TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1224796/tms570lc4357-tms570lc4357-canreg1-cannot-read-data-sent-from-external-can-assistant

器件型号:TMS570LC4357

大家好、我使用了 TI 提供的 example_canCommunication_loopback 作为测试发送和接收功能的参考。 我可以使用 CAN1端口 messageBox2的接收功能来接收 CAN1端口 messageBox1的发送功能所发送的数据、硬件电路没有问题。 在禁用回顾模式后、 我已经 启用了中断接收。 当外部 CAN 助手发送消息时、CAN 中断被触发、但 canGetData 不读取数据。 该函数的第一步确定 NWDATx[regIndex]& bitIndex 始终为0、表示外部数据尚未存储在高速缓存区域中。 如果我希望 CAN1端口的 messageBox2正确接收来自外部的数据。  如何修改代码以确保正确读取数据?

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

     这是我的主要功能

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

    尊敬的 Ayanami:

    我创建并测试了一个使用中断模式的环回测试示例、您能否将其作为参考、并在最终验证配置设置、禁用环回并进行测试。

    e2e.ti.com/.../CAN_5F00_TEST_5F00_LC4357.zip

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    我测试了您提供的工程文件、但我的 CAN 助手显示了扩展帧消息。 当我尝试使用 CAN 助手将扩展帧发送到4357时、程序卡在这一行、标志为0、表明没有新数据进入缓冲区。 这是否表明存在硬件问题?

    谢谢、此致

    Ayanami

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

    尊敬的 Ayanami:

    当我尝试使用 CAN 助手将扩展帧发送到4357时、程序卡在这一行、标志为0、表明没有新数据进入缓冲区。 这是否表明存在硬件问题?

    [/报价]

    您是否检查了 CAN 模块的"启用标识符扩展"

    如果未选中此项、则可用于标准标识符、则应选中此项以用于扩展标识符。

    --

    谢谢。此致、
    Jagadish。

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

    您好,Jagadish

        我确认已选择此模块、并且可以在 CAN 助手上看到传入的扩展帧。 但是、当我向芯片发送相同格式的扩展帧时、CAN 模块无法正确接收这些帧。 在后续实验中、我使用了您提供的测试文件。 用于接收数据的代码模块如下:我成功发送了第一个数据。接收数据时、程序会卡在此行中、因为 flag = node->NWDATx[regIndex] & bitIndex  值保持为0、我无法读取我从外部源发送的数据。 我已附上外部 CAN 助手的屏幕截图、以便接收和发送。您能帮助我解决此问题吗?  

    谢谢。此致、

    Ayanami

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

    尊敬的 Ayanami Ray:

    我想您必须更改消息 ID。

    消息 ID 0x7B、即123用于将 ID 从 TMS570LC4357传输到 CAN 助手、因此请验证您配置的消息 ID 用于接收、并在 CAN 助手中配置相同的 ID 并发送帧。

    --

    谢谢。此致、
    Jagadish。

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

    您好,Jagadish

    我之前修改了 CAN1的 IF2的 ABR 寄存器、现在我恢复了您的代码、并再次对其进行了测试。 根据 IF2 ABR 寄存器的要求、我发送的扩展帧 ID 应该为0x1C8。 我在 CAN 助手中设置了此帧 ID、但我的程序在这一步仍会卡住。 我逐步遵循了您提供的代码。 您能帮助我确定问题吗?

    谢谢。此致、
    Ayanami

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

    尊敬的 Ayanami:

    您能否对整个项目进行一次压缩并附上? 我可以在结束时验证它一次。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    很抱歉、我不熟悉在此论坛上上传本地文件的过程。 我正在测试的项目就是您提供的 CAN_TEST_LC4357。 我在第一个"while (TX_DONE == 0)"循环内为基于中断的传输添加代码并等待接收、仅进行了一次修改。 我使用 CAN 助手发送了 ID 为0x1C8的扩展帧、但代码未检测到任何数据到达。 node->NWDATx[regIndex]& bitIndex"的值保持不变。 这是我面临的问题。 您能否确保所提供的代码能够正确接收来自外部 CAN 助手的消息?

    谢谢。此致、
    Ayanami。

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

    尊敬的 Ayanami:

    请查看我对以下主题的第一条评论

    (+) TMS570LC4357:TMS570LC43X -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

      感谢您的耐心等待、您能否向我发送一份代码副本、该代码可以使用 CAN 电子邮件接收外部 CAN 数据。我使用的是4357开发板

    e2e.ti.com/.../5483.CAN_5F00_TEST_5F00_LC4357_2800_1_2900_.zip

    谢谢。此致、
    Ayanami。

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

    尊敬的 Ayanami:

    您的代码看起来令我困惑、因为为什么要在 while 循环中调用通知函数?

    它应该在发送一个数据包或接收一个数据包后由 CAN 模块自动调用。

    所以、我刚使用我的旧代码、我进行了小幅修改、并测试了您提到的问题。

    在这里、我只想测试 CAN1的接收功能、所以只需在通过 CAN1发送数据包后输入 while (1)

    我只是不想测试 CAN2、因为在这里我没有将 CAN1和 CAN2循环到右侧。

    请记住、我没有您提到的 CAN 辅助工具、而不是我们提到的名为 PCAN View 的工具、也是您提到的 USB 转 CAN 适配器。

    在我照常启动调试后、我在 PCAN 视图中收到512个 CAN 帧、如下所示

    之后、调试在 while (1)处停止。 现在、我从 PCAN 视图发送了一个 CAN 帧、如下所示  

    从 PCAN 视图发送数据包后、现在您可以看到我命中断 CAN1 Rx 的 CAN 通知功能中的断点

    从该断点执行运行后、现在您可以看到我在 Rx 缓冲区中接收到了数据

    我附上代码供您参考、请进行类似的测试并更新结果。

    e2e.ti.com/.../5280.CAN_5F00_TEST_5F00_LC4357.zip

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

      我已下载您附加的工程。我根据您提供的流程使用断点对其进行了测试。 我唯一改变的是波特率更改为1000kbps (根据我的硬件条件)。  

     我的外部 CAN 工具已成功接收到数据、但当我发送帧 ID 为0x01C8的扩展帧时、程序始终卡在 while (1)中而不跳转到 canMessageNotification 函数。

     我有一个问题、由于 canMessageNotification 函数没有写入主函数、它如何跳转。 希望您能帮我解决我所面临的问题。


    很抱歉这么多次打扰到你

    谢谢。此致、
    Ayanami

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

    尊敬的 Ayanami:

    您是直接使用了我的整个项目、还是刚刚复制了 main.c 并进行了测试?

    我的意思是、如果您使用我的整个项目、那么它应该能够正常工作、而不会出现任何问题、因为它在我的最后工作。

    我有一个问题,因为 canMessageNotification 函数没有写入主函数,它是如何跳转的。 希望您可以帮助我解决我所面临的问题。

    只要 CAN 中断产生  

    首先、它将检查它是否由任何 CAN 错误引起、如果它不是由 CAN 错误引起、那么它一定是由成功发送 CAN 消息或接收 CAN 消息权利引起的。 在这种情况下、函数将为"canMessageNotification"。 此过程在"can2HighLevelInterrupt"函数中给定。 因此、我们不应 从 main 调用这个 canMessageNotification 函数。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

     我确实下载了您的项目进行测试。 在当前情况下、我怀疑我的外部 CAN 助手未发送所需的帧 ID、从而导致了问题。 如果我想接收消息2的扩展帧而不进行滤波、我想知道如何在初始化中设置 IF2寄存器。 此外、如果需要在不进行滤波的情况下接收所有数据帧、应如何修改 IF2寄存器?

       /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */
        while ((canREG2->IF2STAT & 0x80U) ==0x80U)
        { 
        } /* Wait */
    
        canREG2->IF2MSK  = 0xC0000000U | (uint32)((uint32)((uint32)0x000007FFU & (uint32)0x1FFFFFFFU) << (uint32)0U);
        canREG2->IF2ARB  = (uint32)(0x80000000U | (uint32)0x40000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)456U & (uint32)0x1FFFFFFFU) << (uint32)0U));
        canREG2->IF2MCTL = 0x00001000U | (uint32)0x00000400U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)8U;
        canREG2->IF2CMD  = (uint8) 0xF8U;
        canREG2->IF2NO   = 2U;  

    谢谢。此致、

    Ayanami

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

    尊敬的 Ayanami:

    如果我需要在不过滤的情况下接收所有数据帧,我该如何修改 IF2寄存器?

    您可以保持掩码位为零、

    如果 MASK 位变为零、则相应的位不会用于接收滤波。

    只需尝试在屏蔽字段中写入所有零、而不是默认的0x7FF。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

     我用另外一个4357 HDK 和其他 CAN 助手测试了你发布的项目、但是这个现象和以前一样、程序无法读取 CAN 助手发送的数据、我也弄不出问题出在哪里。

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

    尊敬的 Ayanami:

    这令人困惑、实际上、我采用的代码是一样的。 因为我可以展示你的图片,我也能够接收数据包。  

    我的建议是不要尝试在中断中设置任何断点、而是尝试接收没有任何断点的整个数据包。

    如果问题仍未解决、则我们将计划一个实时调试会话、以便更好地了解问题。

    --

    谢谢。此致、
    Jagadish。