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.

[参考译文] AM2432:在闪存中进行 EtherCAT 升级时、UART DMA 导致数据丢失

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1494198/am2432-uart-dma-cause-data-missing-when-ethercat-upgrade-in-flash

器件型号:AM2432

工具/软件:

尊敬的 TI 专家:

客户正在使用 SDK9.2。

他们最近在闪存中升级 EtherCAT 时遇到了一个奇怪的问题。

也可以使用 UART DMA (不可缓存) EtherCAT 升级时、写入值 1. 对于闪存地址0x7e000、同一闪存地址处的读出值为 0不符合预期1 。 在闪存中写入许多其他地址也会发生相同的情况。

如果在 EtherCAT 升级时禁用 UART DMA、则写入值 1. 对于闪存地址0x7f000、同一闪存地址处的读出值为 1如预期。 并且采用所有其他地址写入方式。

这真的让客户感到困惑、因为 UART DMA 可能会以某种方式影响 EtherCAT 刷写值。

UART 传输编码如下所示。

UART 接收器编码如下。

您能提供一些建议吗?

谢谢、

Kevin

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

    它们是如何闪烁的? 使用 MCU+ SDK McSPI 还是 OSPI 驱动程序? 可能与 CBASS QoS 设置有关。 它们能否在没有 EtherCAT 的情况下重现? 在没有 DMA 的情况下使用 UART 时、它是有效的?

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

    您好 Pratheesh、

    感谢您的答复。

    客户正在使用 OSPI 驱动器。 如果不使用 EtherCAT、则很难重现此问题。

    如果在没有 DMA 的情况下使用 UART、该器件将正常工作。

     请问您能否分享一些有关 CBASS QoS 设置的指南?

    谢谢、

    Kevin

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

    尊敬的 Kevin:

    我们将对此进行检查、并在今天通过 EOD 与您联系。 感谢您的耐心。

    此致、
    Aaron  

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

    您好 Aaron、

    这似乎是系统级问题。 客户去年仅使用了 R5f0_0 SOP。 在该工程中、客户还在闪存中使用了 EtherCAT 升级、他们还可以同时使用 UART DMA。 新工程涉及额外的 R5F1_0内核、并引入了与 R5F1_0关联的额外 UART 端口和 IPC 通信。 此时、如果客户在 UART 中禁用 DMA、它仍能正常工作、但如果启用了 DMA、会出现上述问题。

    您能否先分享一些有关  CBASS QoS 设置的指导、以供客户试用?

    谢谢、

    Kevin

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

    尊敬的 Kevin:

    客户能否共享中断和任务优先级? 我们怀疑较高优先级的任务/中断是否会抢占闪存读取任务。

    此致、
    Aaron  

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

    您好 Aaron、

    除了 EtherCAT 刷写之外、运行的任务是 IPC 通信和 UART DMA。 我们不确定如何查看优先级、但客户提供了下面的 syscfg 文件、因此您可以更方便地查看它。

                  FIOB -> R50-0

                  FIOB_CHA_Safety -> R51-0

    e2e.ti.com/.../FIOB.syscfg

    e2e.ti.com/.../FIOB_5F00_CHA_5F00_Safety.syscfg

    谢谢、

    Kevin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid="546457" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1494198/am2432-uart-dma-cause-data-missing-when-ethercat-upgrade-in-flash 也可以使用 UART DMA (不可缓存)

    您好 Kevin、

    我们是否获得客户应用程序来查看整个应用程序?

     UART DMA 不可缓存的含义是什么,这意味着用于 UART 通信的缓冲区被保留为不可缓存?

    如果 UART 自助餐不可缓存、那么为什么用户在上面所附的图像中使用 Cache_WB 和 Cache_Inv API?

    您是否还请确认源缓冲区和目标缓冲区是属于闪存存储器还是使用了哪个存储器?

    IPC、EtherCAT、 UART 和闪存之间是否有任何连接、例如共享 EtherCAT 自助餐用于闪存写入或读取、或类似地用于 UART DMA?

    您能否分享 UART DMA 的任务详细信息?  

    所有任务的优先级是什么?

    此致、

    Anil.

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

    您好 Kevin、

    您能否确认 EtherCAT 和其他任务正在运行?

    我怀疑带 DMA 任务的 UART 会产生问题、您已经确认没有启用 DMA 的相同代码可以正常工作。

    因此、这可能是 UART DMA 任务的问题、当该任务正在运行并且 EtherCAT 任务无法在闪存上写入数据时、

    因此、我们能够看到闪存上的内容始终为零。

    您能否确认是否所有任务都在运行?

    请尝试其他测试。 有 UART_DMA 传输 API 注释输出并验证相同的测试用例。

    此致、

    Anil.

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

    尊敬的 Anil:

    如果客户注释掉 UART_DMA 传输和接收 API、则闪存中的 EtherCAT 升级读取/写入变为正常状态。

    这意味着根本原因来自  UART_DMA 传输和接收 API、我能否知道下一步调试是什么?

    谢谢、

    Kevin

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

    您好 Kevin、

    是的、上述两个 API 似乎 是罪魁祸首。

    我不确定调用 UART DMA TX 和 UART DMA RX API 时客户应用程序发生了什么情况。  

    我需要在 EVM 上运行可重现的代码才能进一步调试。 否则、很难进一步调试。

    调用 UART DMA TX 和 UART DMA RX 后、检查 RTOS 计时器中断是否到来。

    您能否确认所有任务中的断点、并查看 调用 UART DMA TX/RX API 后是否命中任务?

    这将提供有关是否暂停所有任务的信息。

    此致、

    Anil.

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

    尊敬的 Anil:

    如前所述、当启用 UART DMA 时、客户可以连续看到 EtherCAT 日志、这意味着 EtherCAT 任务实际上正在运行。

    在 EVM 上短时间创建任务复制并不容易。  客户去年仅使用了 R5f0_0 SOP。 在该工程中、客户还在闪存中使用了 EtherCAT 升级、他们还可以同时使用 UART DMA。 新工程涉及额外的 R5F1_0内核、并引入了与 R5F1_0关联的额外 UART 端口和 IPC 通信。 此时、如果客户在 UART 中禁用 DMA、它仍能正常工作、但如果启用了 DMA、会出现上述问题。

    根据上述 UART 编码和 QoS 设置、我们是否可以尝试其他任何事情?

    谢谢、

    Kevin

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

    您好 Kevin、

    我与 Kevin 离线讨论、Kevin 将进一步分享所有客户项目详细信息以调试问题。  

    此致、

    Anil.

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

    尊敬的 Anil:

    我在 下面列出了 R5F0_0和 R5F1_0的详细信息。

    R5F0_0

    1:EtherCAT 升级闪存、使用 SDK 默认 OSPI 驱动程序(dma  禁用 )。 EtherCAT 首先将数据写入片上 RAM、然后 R5F0_0从片上 RAM 读取并写入闪存、而不使用 IPC 共享数据。

    2:UART (DMA  被启用 )。 此 UART 还会打印 R5F1_0的日志、R5F1_0会将日志放入共享存储器、然后 R5F0_0将读取日志并使用此 UART 打印出来。

    3:带有 R5F1_0的 IPC

    4:计时器

    R5F1_0

    1:UART (DMA  禁用 )

    2:具有 R5F0_0的 IPC

    对于去年的项目、客户仅使用了 R5F0_0、没有问题。 今年的新项目引入了 R5F1_0、整个系统将出现此问题。

    客户提到、他们尝试通过设置如下所示的不同缓冲区来避免不同任务的片上 RAM 重叠(您可以参阅前面包含此信息的回复)。

    谢谢、

    Kevin

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

    您好 Kevin、

    请尝试以下测试用例:

    测试案例1:交换任务优先级

    当前在客户应用中配置了以下任务优先级:
    •UART 任务优先级:4.
    •EtherCAT (OSPI 写入)任务优先级:2.

    按如下方式修改配置:
    •将 UART 任务优先级设置为2
    •将 EtherCAT 任务优先级设置为4

    测试案例2:缓冲存储器放置

    在客户应用中、UART 和 EtherCAT 任务都使用 MSRAM 将数据写入 OSPI、并由 DMA 处理数据传输。

    要评估内存访问延迟和总线争用的影响、请尝试以下操作:
    •将其中一个缓冲区从 MSRAM 移至 TCM:
    •选项 A:将 UART TX/RX DMA 缓冲器置于 TCM 中
    •选项 B:将 OSPI 写入/读取缓冲器放置在 TCM 中

    测试用例3:UART DMA 频率

    检查应用程序中触发 UART DMA 的频率。

    示例:
    •目前、UART DMA 每1ms 触发一次
    •将其修改为100ms 并观察该行为

    此致、

    Anil.

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

    尊敬的 Anil:

    请参阅上述3个测试用例的结果、谢谢。

    测试案例1:交换任务优先级

    修改

    结果

    该 UART 作为从器件运行、连接到外部 UART 主器件。 主器件每10ms 持续发送一次数据。 但是、UART 任务的优先级设置得太低、导致接收缓冲区溢出。 这会生成错误报告并由于未处理的数据而触发看门狗超时复位。

    测试案例2:缓冲存储器放置

    修改

    结果

    在 TCMA 下修改 UART 缓冲区后、由于某种未知原因、从其读取的数据都不正确。

    测试用例3:UART DMA 频率

    修改

    结果

    该 UART 配置为从器件并连接到外部 UART 主器件。 主器件每10ms 持续传输一次数据而不会中断。 由于 UART 任务的处理速度较慢、接收缓冲区已满、从而触发错误并导致看门狗超时重新启动。

    您可以在测试结果中找到任何线索?

    谢谢、

    Kevin

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

    您好 Kevin、

    上述结果不符合预期。

    我需要对这些测试用例进行分析。

    同时、请分享客户执行的确切步骤、我还需要查看代码更改。

    此致、

    Anil.

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

    尊敬的 Anil:

    我已向客户确认、我们提供的上述测试用例图片包含了他们所做的所有修改、请问您为什么不清楚这一步?

    谢谢、

    Kevin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid="546457" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1494198/am2432-uart-dma-cause-data-missing-when-ethercat-upgrade-in-flash/5764395 #5764395"]

    测试案例2:缓冲存储器放置

    修改

    [/报价]

    您好 Kevin、

    TCMA 地址必须是全局地址。 DMA 不知道本地 CPU 视图存储器。

    请在此处确认 TCMA 地址是0x00还是0x078000000?

    此致、

    Anil.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid="546457" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1494198/am2432-uart-dma-cause-data-missing-when-ethercat-upgrade-in-flash/5764395 #5764395"]

    测试案例2:缓冲存储器放置

    修改

    [/报价]

    您好 Kevin、

    我认为根据上述测试结果、修改 UART 任务和 EtherCAT 任务的优先级可能会导致 UART 任务的任务耗尽。

    这意味着较高优先级的任务会阻止 UART 任务执行、从而导致 UART 任务无法及时处理传入的数据。

    我的意见和建议:
    •目前、SOC UART 配置为目标(从器件)器件、外部器件 控制器(主器件)每10ms 传输一次数据。
    •我建议将传输间隔从10ms 更改为100ms、以降低数据速率。 这将帮助我们评估问题是否与时间安排和任务安排有关。
    •使用 UART + DMA 测试单任务设置以检查问题是否仍然发生。 这将有助于找出问题是出在任务调度还是 UART/DMA 处理本身。

    为什么 UART DMA 处理任务有许多关键部分?

    此外、 我还需要一个示例代码来重现问题。 由于这似乎是系统级问题、重现问题对于准确确定根本原因至关重要。

    此致、

    Anil.