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.

[参考译文] RM57L843:无法启动 EMAC 传输

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1380009/rm57l843-cannot-start-emac-transmission

器件型号:RM57L843
主题中讨论的其他器件:HALCOGEN

工具与软件:

您好!

我使用 HalCoGen 提供的 EMACHWInit API 初始化了 EMAC 但是、在我写入 调用 EMACTransmit 函数后、我没有看到传输被触发。 我在写入 DMA 描述符的基址后检查了 Tx0HDR、它会保持不变、在写入后从未返回零以指示初始化可能存在一些问题?  我们将感谢您提供任何有用的指示。

Thansk,

Ravi

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

    尊敬的 Ravi:

    首先、我想建议您参考 Loopback_Tx HALCoGen 中提供的"EMAC_3612"示例。 请按照以下主题了解如何访问此示例:

    (4) TMS570LC4357:TMS570LC4357微控制器 HARCULIS 开发套件-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    感谢您的响应。

    我终于找到了这个问题。 事实上、我错过了一些 pinmux 寄存器配置。 现在、当我写入 Tx0HDR 寄存器时、EMAC 似乎会启动传输并生成 Tx 中断。 但是、我没有看到数据包显示在 Wireshark 上。 我正在发送由 FreeRTOS TCP/IP 堆栈生成的 DHCP 请求数据包。 有什么想法、问题可能出在哪里?

    Ravi

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

    尊敬的 Ravi:

    您能否确保您按照下面的主题中提到的步骤操作:

    (2)[常见问题解答] TMS570LC4357:使用动态 IP (DHCP)在 TMS570LC4357 HDK 板上执行 LwIP 演示的分步过程-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    如果您使用的是 HDK 电路板、请参考我在上方主题中的第一条评论、否则、如果您使用的是 launchpad、请参考第二条评论。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    我将 ETHERNET_ON 的 DIP 开关移至"ON"状态。

    然后、我在我的 HDK 板上创建了一个新项目后、尝试了您的第一个注释中提到的示例。 我按照该示例中提到的启用环回模式等所有步骤进行了操作。 可以看到 Tx 中断被触发、但不是 Rx 中断。 您能建议后续步骤吗?

    谢谢!

    Ravi

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

    尊敬的 Ravi:

    您能否在结束时附上要调试的完整项目?

    ——
    谢谢、此致、
    Jagadish。

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

    e2e.ti.com/.../rm57_5F00_bare.rar

    尊敬的 Jagadish:

    我已附加该项目。

    Ravi

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

    尊敬的 Jagadish:

    我想我已经弄清楚了问题所在。 它与缓存有关。 当我恰好在通过写入 Tx0HDR 寄存器进行传输之前刷新缓存中的 Tx 缓冲区地址时、该方法似乎有效。 不过这很奇怪、因为我将 TX 缓冲区区域标记为 NORMAL_OINC_SHARED、这意味着在 MPU 设置下的区域15 (这是用户可在 HalCoGen 中配置的最高优先级区域)中不可缓存和可共享、但似乎没有什么帮助。 我也尝试过 device_sharable、但即使这似乎没有帮助。 有什么指针吗?

    Ravi

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

    尊敬的 Ravi:

    我认为  NORMAL_OINC_SHARED 不会阻止缓存。 我们应该需要将相应的存储器配置为 WRITE Through (WT)。

    请参阅我的以下主题:

    (+) TMS570LC4357:通过 DMA 传输的 SCI-TRANSMITE-PACKET 是一个常量(无法更新)-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    我在这里以一个示例进行了说明。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    您能否详细说明 NORMAL_OINC_SHARED 不会阻止缓存的含义? 在 HalCoGen 中、当我将光标悬停在 NORMAL_OINC_SHARED 上时 、它会将存储器区域标记为不可缓存、并在总线主器件(在本例中为 CPU 和 EMAC DMA)之间共享。 我附上了这张截图。

    我曾尝试过您的建议、将内存区域标记为 NORMAL_OIWNOW_SHARED、但这似乎没有帮助。 它的唯一工作方式是完全禁用高速缓存。

    Ravi

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

    尊敬的 Ravi Teja:

    您能提供您的测试代码吗

    配置直写应防止缓存一致性问题。 请参阅以下常见问题解答、详细了解缓存一致性问题。

    (+)[常见问题解答] TMS570LC4357:当通过 CPU 和 DMA 访问共享存储器时、如何解决缓存一致性问题? -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    ——
    谢谢、此致、
    Jagadish。

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

    给你。

    e2e.ti.com/.../5282.rm57_5F00_bare.rar

    Ravi

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

    尊敬的 Ravi:

    感谢代码、我现在正在开始代码调试、我将尝试在星期一之前提供更新。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    是否有任何更新?

    Ravi

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

    尊敬的 Ravi:

    很抱歉,在这段时间里,我还对其他一些问题感到困惑。

    我发现了写入功能不起作用的根本原因、原因是我认为您只配置了对 RAM 区域的写入功能。

    但我们还应该需要配置到描述符存储器的完全写入。

    因此、请尝试使用以下配置并验证:

    这个配置在我的末尾有效、即使启用了高速缓存、我也能够获得 RX ISR。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    感谢您的更新。 您能详细说明一下描述符内存部分吗? 您谈论的是哪个特定的寄存器?

    Ravi

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

    尊敬的 Ravi:

    我现在讨论的是下面的 EMAC RAM 区域

    这是发送和接收缓冲描述符将被正确存储的区域。我的意思是 DMA 将会读取这个描述符并且会在调用 EMACTransmit 函数后对数据进行必要的传输。

    因此、我认为您没有将此区域配置到 WT 中(直写)、而是将 WT 配置到将存储数据的 RAM 区域。

    今天、我再次使用以下配置进行了测试

    我在这里将 WT 配置为将数据被存储的唯一 RAM 区域、并且仍然获得接收中断。

    我曾尝试将内存区域标记为 NORMAL_OIWNOW_SHARED 的建议、但这似乎没有什么帮助。 它的唯一工作方式是完全禁用高速缓存。

    刚才、我还尝试了启用缓存的配置、并且运行正常(我获得了接收中断)

    现在,我不明白为什么这在你的终端失败了? 您的配置是否与我所做的一样?

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    我尝试了您建议的设置。 我在第一次发送调用后放置了一个断点、它在 pbuff_array 中未看到任何数据。 但是、我可以在调用第二个传输函数后看到接收到的数据。 为什么会出现这种情况?

    Ravi

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

    尊敬的 Ravi:

    可能会发生这种情况! 由于如果您验证了 EMACTransmit 函数的定义、我们就不会对数据传输进行任何轮询、而是只为 EMAC 缓冲区描述符分配需要发送的输入数据、我们将使用此函数。

    因此、这意味着完整的数据传输不会在该函数中或在此函数之后发生。 传输将在后台进行。 您甚至可以 在之前的传输完成前调用另外一个 EMACTransmit 函数、如果我们这样做的话、数据就不会丢失、而是在上一个缓冲区描述符后立即将输入数据分配给某些其他缓冲区描述符、在后台进行数据传输。

    这就是 在设置 EMACTransmit 函数之后未命中 Rx 处理程序中断点的原因。

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    我在第一个传输调用之后放置了一个无限的 while 循环、但仍然看到这个问题。

    Ravi

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

    尊敬的 Ravi:

    我在第一个传输调用之后放置了无限 while 循环、我仍然看到这个问题。

    我没有看到任何这样的问题在我的最后

    正如您在下图中看到的、我在第一次传输后一直保持无限循环、

    您可以看到仍收到 EMAC Rx 中断。

    这里是我的代码供您参考:

    e2e.ti.com/.../EMAC_5F00_Loopback_5F00_test_5F00_RM57x.zip

    ——
    谢谢、此致、
    Jagadish。