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.

[参考译文] RTOS/PROCESSOR-SDK-DRA7X:EMAC 驱动程序-混合 ValidLen 和缓冲区

Guru**** 2562120 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/609038/rtos-processor-sdk-dra7x-emac-driver---mixed-validlen-and-buffer

器件型号:PROCESSOR-SDK-DRA7X

工具/软件:TI-RTOS

您好!

我在 IPU1_1上使用 pdk_dra7xx_1_0_5和二进制发布的 EMAC 驱动程序 pdk_dra7xx_1_0_5/packages/ti/drv/emac/lib/dra75x/m4/release。

我的设置是在 AMP 和运行 OpenAvnu AVB 堆栈的 PC 之间进行 gPTP 和 AVTP (音频)。 PC 是 AVTP 流的 gPTP 主站和 talker。 在 Wireshark 中、PC 发送的所有数据包看起来都正常。
但是、有时会发生这样的情况:gPTP 数据包(验证其内容是否正确)由 EMAC 驱动程序(通过 RX_pkt_CB 回调)传送、且 ValidLen (EMAC_PKT_DESC_T 结构的字段)设置为910、这是我的 AVTP 数据包的长度。 这是已知问题吗? EMAC 驱动程序是否会出现问题?

此致、

Jakub

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

    我已将您的问题转发给 PDK 专家。

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

    Yordan、您好!

    谢谢你。

    我将问题缩小到仅 Gptp。 当驱动程序在 rx_pkt_CB 中提供的数据包描述符被复制到应用程序缓冲区后在 Rx 回调中被释放(被推回我的应用程序的自由 RX 队列)时、我看不到数据包接收的任何问题。 当我存储描述符并且不将其释放到 Rx 回调中、但稍后从另一个任务中释放时、会发生接收问题。 看起来数据包长度是正确的、但是描述符指向的缓冲区来自下一帧(按顺序传输的帧)。

    此致、

    Jakub

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

    EMAC/src="/v4/EMAC_drv_v4.c 中的 EMAC_rxPacket()函数中似乎存在错误,这是此问题的根本原因。

    此函数尝试从应用程序分配新的数据包描述符。 如果应用程序没有空闲描述符(EMAC_ALLOC_PKT 返回 NULL)、那么最近通知的(通过 Rx 回调)应用程序的数据包描述符将被重复使用。

    IMHO、驱动程序应准备好这样一种情况、即应用程序中不再提供可用的描述符(可能会发生这种情况、此时数据包描述符不会在 Rx 回调中立即释放、而是在稍后处理(例如另一个任务)后释放。

    驱动程序应处理重新填充内部描述符队列的问题。

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

    您好、Jakub、

    在对其他相关线程执行后续操作时、建议使用以下权变措施:

    "重新调整其在系统中保持的缓冲器数量(这些是软件级的、而不是硬件 RX 缓冲器描述符)。 这是为了确保当接收到一个数据包、并且 LLD 尝试补充返回的 Rx 缓冲区描述符的缓冲区指针字段时、不会发生故障。 缓冲区必须来自应用程序、即应用程序拥有由 DMA 复制数据包的存储器。 这不能由 LLD 处理。"

    这是一个驱动程序设计限制、由 PRSDK-2810跟踪、计划为 Processor SDK RTOS 4.1版本修复此限制。

    谢谢、

    斯蒂芬