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.

[参考译文] TMS320F28388D:以太网驱动程序回调

Guru**** 2589280 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1126077/tms320f28388d-ethernet-driver-callbacks

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARE

大家好、

我将在 driverlib_cm 中研究以太网驱动程序、尝试将 lwIP 堆栈移植到具有 SYS/BIOS 的应用。 作为了解以太网驱动程序和 lwIP 的起点、我还将介绍 enet_lwip 示例。 代码不容易理解、但我开始了解情况。 我有几个问题:

1.以太网驱动程序是否有详细的 API 参考? 我只找到了此文档、它没有提供太多详细信息:
dev.ti.com/.../ethernet.html

pfcbGetPacket()回调函数必须返回一个指向填充Ethernet_Pkt_Desc结构的指针、该结构dataBuffer位于应用程序存储器(Ethernet_rxBuffer示例代码中的数组)中。 但是Ethernet_pktDescriptorRX、只有一个定义的结构、它是否不会被后续调用回调所覆盖? 我会更早地期待一个描述符池(数组)。

3.如果我看看pfcbGetPacket()如何在以太网.c 代码中使用回调,在应用程序中没有可用内存的情况下,还会检查 NULL 结果Ethernet_rxBuffer。 但是、默认Ethernet_getPacketBuffer()实现(在 enet_lwip 示例中也使用)始终返回缓冲区的指针、不会检查它是否实际可用(rxBuffIndex仅在0和1之间切换)。 这不能导致 Rx 数据被覆盖? 或者我是否缺少了什么?

4. pfcbRxPacket()在数据包 Rx 完成后调用回调函数。 我假设“Ethernet_Pkt_Desc *pPacket”参数是Ethernet_Pkt_Desc指向在调用pfcbGetPacket()?时获取的结构的指针。 所以我认为这也是“释放”描述符所使用的内存的地方dataBuffer,对吧?

5.查看默认Ethernet_receivePacketCallback()实现,pfcbRxPacket()回调将返回一个指向新的“空闲”描述符的指针,就像pfcbGetPacket()这样,正确吗?

谢谢、此致、
Arjan

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

    Arjan、  

    将在接下来的几天内回复您的问题。

    此致

    Siddharth

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

    您好 Siddharth、

    此主题的任何更新?

    谢谢、
    Arjan

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

    Arjan、

    很抱歉耽误你的回答。

    关于 driverlib API 指南、将对其进行更新、以在以太网驱动程序中包含 API 的说明。  这 将在下一个 C2000Ware 版本中提供。  

    关于其他问题、我们将与您联系。   

    此致

    Siddharth

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

    您好 Siddharth、

    其他问题上有什么问题吗?

    此致、
    Arjan

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

    Arjan、  

    很抱歉、我没有时间查看它、因为我正忙于处理一个版本。  

    下周再见。

    此致

    Siddharth

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

    您好 Siddharth、

    希望您能有一些时间来了解这一点。 同时,我还有一项与上述 NRS 3和5有关的补充意见:

    6.在 enet_lwip 中Ethernet_receivePacketCallbackCustom()、我注意到它返回Ethernet_Pkt_Desc了它接收到的同一指针。 因此,它基本上使用的是相同的一半Ethernet_rxBuffer[]。 这是有意的、如果是、原因是什么?
    Ethernet_receivePacketCallback()以太网.c 中的默认函数Ethernet_getPacketBuffer()在末尾调用,以切换到的另一半Ethernet_rxBuffer[]。 尽管我仍然希望有2个单独的描述符、每个描述符都有自己dataBuffer的描述符(请参阅上面的问题 nr 2)。

    此致、
    Arjan

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

    您好 Siddharth、

    希望您没有忘记我的问题。

    此致、
    Arjan

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

    Arjan、

    只需检查您是否有机会查看 C2000Ware 4.02.00.00的最新版本。  

    此致、Santosh

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

    您好 Santosh、

    我快速看了一下。 据我所见、lwIP 库和示例以及 driverlib_cm 以太网驱动程序文件没有任何变化。

    我看到 CM API 指南中以太网模块的文档 已更新。 但这主要是通过源代码注释自动生成的。

    因此、除非我错过了一些内容、否则我的问题仍然没有答案。

    此致、
    Arjan

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

    Arjan、

    对拖延 答复表示歉意。  

     lwip 端口层的当前实现需要一些调整和更新,以支持 SYS/BIOS 或多线程系统,并同意您的观点,即代码很难理解。   

    当然、目前还没有计划将 SYS/BIOS 或 RTOS 支持添加到 LWIP 示例中。

    此致

    Siddharth

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

    您好 Siddharth、

    尽管我使用 enet_lwip 示例作为起点、但我的问题与 lwIP 或 SYS/BIOS 并不实际相关、而只是与 C2000WARE driverlib_cm 以太网驱动程序和回调函数的预期行为有关。

    当然,必须能够在那里作出一些澄清?

    此致、
    Arjan

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

    Arjan、

    以太网示例'ethernet_ex1_basic_tx_rx_loopback'本来 是了解以太网驱动程序的良好起点。  

    以下是对您的问题的说明。

    2.是的,将有一个描述符队列

    3. Ethernet_getPacketBuffer 函数返回 数据包描述符。 在 enet_lwip 示例中, EtherNet_rxBuffer[]根据 Ethernet_NO_O_of _RX_packets 值被分离为多个数据包,因此它会将每个数据包的数据包存储在不同的位置。 可以添加检查以确保缓冲区可用。

    pfcbRxPacket 回调函数是 Rx 数据包完成回调函数、用于将指针传递给 应用程序的数据包、应用程序可以 对其进行处理并将数据缓冲区设置为空闲

    默认 的 EtherNet_receivePacketCallback 实现是占位符、  需要返回指向新描述符的指针。

    此致

    Siddharth

     

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

    您好 Siddharth、

    感谢您的回复、我仍有一个问题#6未解决、尽管我在上面的一个回复中...

    我在开头部分看了'Ethernet_ex1_basic_TX_Rx_loopback'示例。 但它的名称确切地说明了它是什么、这是一个非常基本的示例。

    我缺少的是一个更真实的示例、即完全使用 DMA 通道并处理线路中断和其他故障。 尤其是 DMA 部分、以及为什么以及如何配置相关缓冲区、缺少一些说明。
    我注意到、在以太网驱动程序初始化期间、它调用以太网_getPacketBuffer 回调8次(以太网描述符_NUM_TX_PER_CHANNEL、默认 numBD 设置)。 在 enet_lwip 示例和其他示例中、这意味着当 EtherNet_NO_OV_RX_packets 小于8 (就像在示例中一样)时、多个 DMA 描述符将指向同一存储器件(EtherNet_rxBuffer)。
    这是正确的行为、还是潜在的错误? 我不知道、因为评论中没有解释。

    我花了很多时间来分析以太网驱动程序代码、试图弄清楚它应该如何工作。 这些简单的示例非常清楚、但当尝试创建一个更复杂的应用(尤其是在 RTOS 中)以充分利用可用的硬件外设时、这将成为一个真正的挑战。

    目前、我的应用程序(SYS/BIOS、带 lwIP、使用 TCP、UDP 和 MQTT)似乎可以正常工作、尽管 Nut 已经过完全应力测试。 但是、我仍然对我的实现的某些部分有疑问、比如我提到的 DMA 描述符。 我觉得硬件中的可用性能比我目前能够使用的性能要高。

    此致、
    Arjan

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

    Arjan、

    同意、目前我们没有任何基于 RTOS 的以太网示例。  

    将检查并添加有关缓冲器配置和描述符的更多信息。

    此致

    Siddharth