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.

[参考译文] TMS570LS3137:具有 DP83848YB PHY 的 EtherNet/LWIP

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/629811/tms570ls3137-ethernet-lwip-with-dp83848yb-phy

器件型号:TMS570LS3137
主题中讨论的其他器件:TMS570LC4357HALCOGEN

我的设计使用简单的代码来连接两个电路板并在彼此之间以 MAC 级别发送数据包。

我已获得基于 lwIP 的代码、lwIP 适用于 TMS570LC4357开发板、可将传入的数据报告给 SCI 端口。 我已更改 HALCoGen 设置以获取3137器件驱动程序。

连接到运行 Wireshark 和数据包发送器的笔记本电脑时、TMS 帧正常和广播帧计数器按预期递增(0xfc78200、204)、计数值相等、除非我启用混杂模式、此时"良好"显示的值远远超过广播。 好的。

我无法获得中断系统的任何操作来处理该数据。 RXINTSTATRAW 寄存器始终为零、虽然 TXnHDP 和 RXnHDP 看起来是合理的、但它们永远不会改变、并且指向的地址(加上许多后续位置) 似乎 包含垃圾。 尽管  我只能在 C0RXSTAT 中获得0 (但这并不重要)、但其他每个寄存器似乎都有合理的设置。 我添加了一个 SCI 输出来显示中断是否已被触发(未被触发)。

可以帮帮我吗? 谢谢

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

    您好、King、

    EMAC 控制模块将来自 EMAC 和 MDIO 模块的不同中断信号组合 成四个中断信号(C0RXTHRESHPULSE、C0RXPULSE、C0TXPULSE、C0MIPSCPULSE)、这些中断信号被路由至矢量中断管理器(VIM)。 VIM 能够将所有四个中断信号中继到
    CPU。

    当一个中断被生成时、中断的原因可从位于 EMAC 存储器映射中的 MAC 输入向量寄存器(MACINVECTOR)中读取。 MACINVECTOR 将下列28个中断信号的状态组合在一起。

    LWIP 示例代码中的 RX ISR 是 位于 lwip_main.c 中的 EMACCore0RxIsr()

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢。 但是、我的问题是如何从广播消息中获得任何响应。 RX0HDP 指向什么看起来是可接受的结构、尽管小端字节序与大端字节序的问题在很大程度上使用了我。 我有一位同事编写的一些代码、可让我快速浏览和查询寄存器:99%的使用时间内、输入和输出显示符合小端序。 但是、RX0HDP 寄存器都是大端字节序:我无法确定这是否正确。
    我的任何响应标准是正确的中断调用、它将显示一条文本消息、或者 RXINTSTATRAW 寄存器中至少有一个值、该值始终为零。
    RX0指向的数据区域也为零。
    看起来不起作用的是 EMAC 控制模块软件复位。 即使我发送0xFFFFF_FFFF 以消除端字节序问题、RX0HDP 寄存器仍保留其原始值。

    RXGOODFRAMES 和 RXBUCCASTFRAMES 计数按预期递增、让我相信 PHY 工作正常-我可以在 RX_Clock 上看到25MHz

    可以吗?
    此致、Nick
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是否可以重新表述我的问题:
    当接收到广播消息时、EMAC 引擎有哪些要求导致 RXINTSTATRAW 置位、如 RXBUCSTFRAMES 计数递增所示。

    我是否必须设置任何接收缓冲器描述符标志、例如 SOP? 《手册》、SPNU499B 第29.2.6.5段- 2012年11月- 2013年8月修订版-令我感到困惑。

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

    您好、King、

    我只需使用 lwip 演示代码对我的 EVM 运行测试。 我的 PC 上使用了 Ostinato 来发送数据包。 我在以下位置添加了断点:

      hdkif_rx_inthandler (&hdkNetif[instNum]);

    注意到位0和位7已置位、这意味着我获得  了通道0 (Rx)的原始中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题已被证明是字节序问题。 TMS570LC4357显然需要在大端字节序中使用其头指针。 我说"很明显"、因为我没有证据表明工具本身是将主代码的字节序转换为看起来很小的尾序、还是我将其称为代数格式。

    虽然两本用户手册都说4357 / 3137是大端字节序、但3137实际上使用代数格式作为指针。 更令人困惑的是、它有一个寄存器 ENDIAN_REG、它说大端字节序! 我看不到任何切换这种方法。

    尽管我在早些时候尝试了这个交换、但我没有意识到中断矢量被指向 EMAC.C 中提供的某些用户代码、而不是 HALCoGen。成功。