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:EmacTransmit 函数

Guru**** 2349360 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/616548/rm57l843-emactransmit-function

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

我不想使用 lwip 以太网堆栈、因此我要编写自己的小型以太网堆栈。

我正在使用 HL_EMAC.c 文件中从 halcogen 生成的 EMAC 函数、但当我尝试使用 EMAC 传输函数传输以太网数据包时、它第一次仅发送零、之后的所有数据包都 是一个数据包。 因此、我无法使用正确的序列号进行应答、例如、因为我始终是一个数据包。

是否有人有同样的问题? 是否有调试发送通道寄存器的方法?

谢谢你

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

    我已将您的帖子转发给我们的以太网专家之一。 他们很快就会回来。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Daniel、您好!

    您是否曾调试过"第一次零点"的起源? 这是否来自您的应用?
    您从 EMACTransmit()返回的值为 true,表示发送的数据有效?
    网络的另一端侦听传入流量的情况是什么?

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

    我认为第一个零来自 pbuf 的初始化。
    我的应用中的缓冲器显然是正确的。 我将它们打印出来、并在调试模式下观察它们。

    retvalue 为 true。 我还调试了 TX0HDP 寄存器中描述符指针的地址:

    void EMACTxHdrDescPtrWrite (uint32 emacBase、uint32 desHdr、
    uint32通道)
    HWREG (emacBase + EMAC_TXHDP (CHANNEL))= desHdr;


    deseHdr 的值为0xfc520000、通道为0。
    在函数调用之前:EMAC_TXHDP(0)为0x0
    在函数调用之后:EMAC_TXCP[0]为0xFC520000

    因此、它似乎可以正常工作、但控制器不会立即发送数据或发送错误的数据。

    我使用逻辑分析仪测量 MII 数据、并使用 Wireshark 捕获以太网帧。

    例如:

    - RM57启动
    -我发送了192.168.100.1的 arp 请求
    -逻辑分析仪显示60个零和4字节校验和,Wireshark 不捕获数据包
    然后我发送192.168.100.2的 arp 请求
    -逻辑分析仪显示正确的以太网帧和 ARP 数据包,但请求192.168.100.1,Wireshark 也显示请求192.168.100.1

    如果我连续执行 EmacTransmit()两次,控制器也会在第一次发送两次零请求,在第二次发送两次请求192.168.100.1。

    在我看来、DMA 不发送数据。

    调试过程非常奇怪、也很复杂。 我希望有人能够帮助我。

    谢谢、此致、

    Daniel
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我仍然有同样的问题,没有人知道吗?

    我想 EMAC DMA 单元有问题。 数据似乎是在传输到 TX-FIFO 之前发送的。
    这将解释当 FIFO 被零初始化时、第一次发送零的原因。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Daniel:
    我们将对此进行研究、并将返回给您。

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

    您好!

    在等待回答时、我自己解决了问题。

    正如我所说的、EMAC 的 DMA 控制器会造成问题。 数据不是从 RAM 复制的、而是从缓存复制的。

    在首次传输时、不会缓存任何数据、因此数据不符合预期。

    第一种解决方法是禁用高速缓存、它可以正常工作。 但这不可能是解决方案。

    第二种方法是将 EMAC 存储器区域的 MPU 区域更改为直写(MPU_NORMAL _OIWTNOWA_NONSHARED)、并再次启用缓存、这也起了作用。

    我认为这是正确的方法,不是吗?

    此致

    Daniel

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

    这是正确的解决方案。 第一个禁用高速缓存的选项是可以的、但这样做会降低一些系统效率。 第二种解决方案是将 DMA 与 EMAC 结合使用、因此这是正确的方法。 我很高兴你能够解决这个问题。