NXP MCU 技术william hill官网
直播中

李继明

7年用户 1074经验值
私信 关注
[问答]

i.MX6 FEC停止生成接收中断的原因?

我们在 i.MX6 上看到奇怪的以太网行为。

在我们的网络设置中,我们使用交换机连接 Linux PC 和 SabreSD i.MX6 板(见下图)

+----------+
| 以太网  |
|开关    |
+----------+
  | |
  | |
  | |
+------------+ +------------+
| 个人电脑 | | i.MX6 板 |
+------------+ +------------+

两个网络链路都是 1Gbit 全双工。

SabreSD 板运行主线 Linux 3.10.9,带有 PREEMPT_RT 补丁 + 来自 3.14 的 FEC 驱动程序)。
在 Linux 上,我们以 UDP 模式启动了 iperf 服务器(网络压力测试工具)(使用的命令:“iperf –s –u”)。
Linux PC 运行 Ubuntu 12。在这台 PC 上我们:
  - 每秒 ping i.MX6 板
  - 在 UDP 模式下运行 iperf 客户端(使用的命令:“while [ 1 ]; do iperf –c 'SabreSD board 的 IP 地址' -u -b 100m -t 30 -l 256;sleep 1;done”)

一段时间后(大多数时间是几分钟),我们看到 i.MX6 板停止响应来自 Linux PC 的 ping。仔细检查表明 i.MX6 中的 FEC 不再生成接收帧中断。随附的屏幕截图显示 RXF 中断已启用。我们知道 FEC 仍在接收以太网帧(因为我们看到与帧接收相关的事件计数器在增加),但是没有生成接收帧中断(只有 MII 中断)。

如果您查看屏幕截图中的 RDAR 寄存器,您会发现它的值为 0,这意味着 FEC 无法将接收到的帧写入主内存,因为缺少可用的空闲接收描述符。

当我们从 SabreSD 板上 ping Linux PC 时,我们看到 i.MX6 上的接收中断再次开始发生。在研究 FEC 驱动程序后,我们发现驱动程序在处理传输中断时也会清空接收缓冲区。因此,当空闲接收描述符再次可用时,FEC 似乎再次开始生成接收中断。我们现在的问题是:FEC 如何进入停止生成接收中断的状态,我们如何防止这种情况发生?



                                       
            

更多回帖

发帖
×
20
完善资料,
赚取积分