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.

[参考译文] TMS570LS1227:以太网驱动程序开发- MAC 层测试,ARP 请求不从 ECU 发送到 PC

Guru**** 1785650 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/1397929/tms570ls1227-ethernet-driver-development---mac-layer-testing-arp-request-not-sending-from-ecu-to-pc

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

工具与软件:

您好!

我正在为我们的一个项目开发一个以太网驱动程序、并正在尝试确保 MAC 层正常工作。

  1. 当我使用 HALCoGen 中提供的示例代码并在 RX 和 TX IRQ 中设置断点时、效果是很好的。

  2. 为了用我的 PC 验证这一点、我从 ECU 向 PC 发送了 ARP 请求、但在 Wireshark 中看不到任何 ECU MAC 地址数据。

2.1.我尝试在 EMAC 下启用环回。

2.2.我也尝试了没有启用回送,但它仍然不起作用。

  1. 如果我的第二个点无效、如何使用 HALCoGen 生成的 MAC 函数进行测试?

此致、
Sandeep

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

    我在此处附上了代码、请验证一次

    e2e.ti.com/.../ENET_5F00_4.zip

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

    Sandeep、您好!

    我正在处理您的问题、并将尽快提供我的更新。

    ——
    谢谢、此致、
    Jagadish。

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

    正在工作。

    我发现解决方案现在工作正常,我测试了虚拟 ARP 请求到 PC ,然后我可视化在 Wireshark 中,我可以看到数据。

    面临的问题或需要帮助

    我目前正致力于将 Mongoose 与我们不使用 LWIP 的项目集成。 我正在移植 TX 和 RX 中断处理程序、以便与 Mongoose 兼容。 但我遇到了一些困惑、尤其是在关于 RX 描述符数据访问方面。

    我注意到在 RX 处理程序中while 使用了一个循环。 您能否更深入地了解采用这种方法的原因? 此外、如果您有任何文档或资源可以帮助我更好地理解 RX 描述符处理及其与 Mongoose 的集成、我将不胜感激。

    while (hdkif_switze_data (CURR_BD->flags_pktlen)和 EMAC_BUF_DESC_SOP)

    ex_len = 0;
    len_to_alloc = 0;

    /*数据包加载后开始处理*/
    if ((hdkif_switze_data (CURR_BD->flags_pktlen)& EMAC_BUF_DESC_OWNER)!= EMAC_BUF_DESC_OWNER){

    if (rxch->free_head == NULL){
    /*此 BD 链将在处理后释放*/
    rxch->free_head = CURR_BD;
    }

    /*获取数据包的总长度。 CURR_BD 指向开始
    *的数据包。
    */
    tot_len = hdkif_switzle_data (CURR_BD->FLAGS_pktlen)和0xFFFF;

    /*获取 pbuf 队列的开始*/
    q = CURR_BD->Pbuf;

    执行{
    /*获取与当前 BD 关联的 pbuf 指针*/
    pbuf = CURR_BD->pbuf;

    /*如果较早的 pbuf 已结束、请更新链*/
    if (pbuf->next == NULL)

    pbuf->next =(struct pbuf*) hdkif_switzle_rxp (CURR_BD->next)->pbuf;
    }

    len_to_alloc += pbuf->len;
    /*更新链中 pbuf 的 len 和 tot_len 字段*/
    pbuf->len = hdkif_switzle_data (CURR_BD->bufoff_len)& 0xFFFF;
    pbuf->tot_len = tot_len - ex_len;
    Processed_BD = CURR_BD;
    ex_len += pbuf->len;
    CURR_BD = hdkif_switzle_rxp (CURR_BD->NEXT);
    } while ((hdkif_switze_data (Processed_bd->flags_pktlen)& EMAC_BUF_DESC_EOP)!= EMAC_BUF_DESC_EOP);

    此致、

    Sandeep C

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

    举个例子、创建 本地缓冲区1518字节、然后在 UART 终端上打印

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

    Sandeep、您好!

    很高兴听到您自己解决了此问题。

    ——
    谢谢、此致、
    Jagadish。