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.

[参考译文] MSP432E401Y:如何通过 NS 和 NDK 将 EMAC DMA 描述符链接到 UDP 数据包、从而实现 IEEE 1588时间戳

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/974782/msp432e401y-how-to-link-emac-dma-descriptor-to-udp-packet-via-ns-and-ndk-for-ieee-1588-timestamping

器件型号:MSP432E401Y

好的、我已经了解到 TI 不会通过 NS 堆栈支持 IEEE 1588。 糟糕、但正是这样。我仍然需要这个时间戳、因为这就是我选择这个芯片作为我的 MCU 的原因。

到目前为止、我有一个工作代码、它通过一个套接字获取 UDP 数据包、该套接字从主站发送到端口319和端口320。 我还使用了 emac.h 驱动程序来独立绕过堆栈、并认为我启用的 IEEE 引擎正在对数据包进行时间戳。 遗憾的是、该时间戳信息仅在与该数据包关联的 EMAC DMA 描述符中可用、 看起来、这个时间戳数据的利用率没有在 DMA 描述符本身中得到任何进一步的利用、一旦时间戳信息进入堆栈、就会导致时间戳信息与数据包分离。

我尝试的权变措施是使用 EMACRxDMACurrentDescriptionorGet  (EMAC0_BASE)函数进行调用、该函数为我提供了指向最新 DMA 描述符的指针、我可以清楚地看到那里的 IEEE 时间戳信息以及随它到达的数据包。 但是、当我在 SlNetSock_select 指示数据到达后调用它时、当前描述符似乎与触发 socket_select 调用的 UDP 数据包没有任何关联、这是有道理的、因为 EMAC 只需在数据包到达时处理数据包。

因此、由于缺少我认为 TI 将提供的 IEEE 支持、是否有办法通过网络堆栈了解数据包使用了哪个 EMAC DMA 描述符、以便我可以使用收到的 UDP 数据包重新加入 IEEE 时间戳? 这是我能够获得执行 PTP 所需的 IEEE 时间戳功能的唯一方法。