器件型号: TMDS64EVM
我正在 ICSSG1 PRU0 上运行代码、以通过 MII_G_RT 接口消耗以太网数据包。 我在 RxTx 模式中使用任务管理器、根据“表 6-97 中定义的每个任务 1 子任务触发例程。 任务到事件映射“(RX_SOF、BK1=32、BK2=32、BKN=32、RX_EOF)。
我正在从主机 PC 发送一个虚拟数据的 UDP 数据包。 这就是发送到评估板时的样子(通过 Wireshark 捕获):
我可以在代码中看到发生的正确事件触发。 我的子任务处理程序会将数据从 RX L2 FIFO 中弹出、并通过 DMA 将数据输出到共享存储器。 对于上述数据包、我从 MII_G_RT 接口收到三个子任务触发条件、可以使用这些触发条件来从 FIFO 传输数据:bk1、bk2 和 RX_EOF。 数据通过共享存储器中的这三个触发事件填充、如下所示:

蓝色和绿色的突出显示部分显示了最初传输的 UDP 数据包:

我有以下问题:
1) 使用 BK2 触发器、从 FIFO 复制的两个字节不属于数据包的一部分。 这些数据来自哪里? 我是否可以从可用的 PRU 组件中知道(除了在我的 oridinal UDP 数据包中编码帧长度和/或校验和以验证消息内容之外)、“所需“数据包结束、另一个开始的位置?
2) 使用 RX_EOF 事件触发器、从 L2 RX FIFO 组 0 读取的 XIN 命令复制与 BK1 事件触发器复制的相同数据、我假设没有新数据被推入 FIFO。 RX_EOF 事件是否总是在所有数据都被推入 FIFO 并从 FIFO 中删除后发生? 或者、FIFO 中是否会在 RX_EOF 事件触发的同时有新的/新的数据? 我的代码假设与 TI git repo 上的 SORTE_G 示例相同(SORTE_G:支持 200 字节输入数据和错误修复 — pru-software-support-package/pru-software-support-package - PRU 软件支持包) 、即 RX_EOF 事件也可能是数据。
3) 如果只有 30 个字节可从 FIFO 弹出,为什么会发生 BK2 事件触发(因为我假设共享存储器图像中未突出显示的绿色部分的额外字节保留在先前传输的数据上)。

