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/AM3715:LAN9221丢弃数据包的前4个字节

Guru**** 2587365 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/633874/rtos-am3715-lan9221-drops-first-4-bytes-of-packet

器件型号:AM3715

工具/软件:TI-RTOS

您好!

我将 AM37x 与 LAN9221搭配使用。
在接收数据包时、我们会遇到一个问题、
在某些情况下 、检测到的数据包会忽略前4个字节、
例如、不是获取良好的数据包

0A 1b 3c 4D 5e 6F 50 7b 9d A6 4c 39 08 06 00 01
08 00 06 04 00 01 50 7b 9d A6 4c 39 c0 A8 01 6e
0A 1b 3c 4D 5e 6F c0 A8 01 64 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 23 51 d6 1c

我们得到的是以下错误数据包、其中省略了前4个字节:
5e 6F 50 7b 9d A6 4c 39 08 06 00 01 08 00 06 04  
00 01 50 7b 9d A6 4c 39 c0 A8 01 6e 0A 1b 3c 4D
5e 6F c0 A8 01 64 00 00 00 00 00 00 00 00 00 00  
00 00 00 00 00 00 00 00 00 23 51 d6 1c 00 00 00 00 00

如您所见、目标 MAC 地址中的前4个八位位组(来自6个八位位组 MAC 地址)、
都丢失了。
我们使用与 u-boot 相同的驱动程序、如下所示。
如果有什么想法会产生这种影响,您能告诉我们吗?
这是高度安全的产品、我们不确定如何处理此问题。  

测试是 PC 和目标之间的 UDP 交替:PC 向目标发送 UDP 缓冲区、然后等待接收到的数据包、验证其与发送的数据包相同、然后继续发送下一个缓冲区、目标等待来自 PC 的缓冲区、 在接收缓冲区中,将准确的内容发送回 PC,即它是完全同步的测试,在该测试中,发送仅在接收完成后完成(在两侧)。
 
该目标基于 TI 的以太网控制器 LAN9221芯片。  接收缓冲区的例程(来自 u-boot 代码)为:  

int ETH_Rx (空)

u32 *数据;//(u32 *)&g_NetRxPackets[0];
u32 pktlen、tmplen;
U32状态;
int ret =确定;

if ((ETH_REG_READ (RX_FIFO_INF)& RX_FIFO_INF_RXSUSED)>> 16){
STATUS = ETH_REG_READ (RX_STATUS_FIFO);
pktlen =(status & RX_STS_PKT_LEN)>> 16;

ETH_REG_WRITE (RX_CFG、0U);

tmplen =(pktlen + 2U+ 3U)/ 4U;
if (tmplen >= EMAC_packet_MAX_SIZE)

RET =错误;

其他

数据= g_NetRxPackings[g_NetRxPoolHdr];
while (tmplen--)
*DATA++= ETH_REG_READ (RX_DATA_FIFO);

IF (STATUS & RX_STS_ES)

APP_TRACE_ERR ("错误、丢弃数据包);
RET =错误;

其他

G_NetRxPacketsLength [g_NetRxPoolHdr]= pktlen;
RET =(int) g_NetRxPacketsLength [g_NetRxPoolHdr];

G_NetRxPoolHdr++;
if (g_NetRxPoolHdr >= MAX_packets){g_NetRxPoolHdr = 0;}




回程;

 

似乎、如果从 PC 发送的消息恰好在从 PC 发送下一条 UDP 消息之前发送、那么它会使目标像此处所述的那样产生这种混乱、

、如果从 PC 发送另一个数据包(不是此 UDP 乒乓测试的一部分)、则会导致接收到此不良数据包。


 
 我曾尝试思考为什么这种情况会导致此类行为(数据包中丢失4个字节)、但还没有任何线索。

此问题是否与 GPMC 配置有关?

此致、
已运行  

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

    我们无法仅根据您提供的信息来评论所发生的情况。 我建议您使用逻辑分析仪检查 GPMC 接口上发生的情况。 这可以帮助您确定丢包发生的位置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Biser、

    我不确定我是否理解。

    什么是 GPMC 逻辑分析仪?

    您为什么怀疑 GPMC 存在问题? GPMC 逻辑分析仪如何帮助您了解它是 GPMC 问题还是其他问题?

    逻辑分析仪将在总线上显示数据,但不会在 GPMC 控制器读取时显示数据,因此它如何帮助了解控制器是否已正确初始化?

    此致、

    已运行

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

    在继续我上面的最后一条评论时、我认为我可以通过试错方法来检查它是否真的是 GPMC 问题。

    您能不能指向 GPMC 寄存器/位、我可以尝试更改它们的值、看看我是否能获得更好的性能?

    此致、
    已运行
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的是一个非常具体的用例、其中包含我们没有的硬件和您自己的软件。 我看不到我们如何调试它。 GPMC 是一个存储器映射接口、只需从存储器地址读取即可。 寄存器说明可在 AM35x TRM 修订版 C 的第9.1节中找到