转自公众号欢迎关注
https://mp.weixin.qq.com/s/klrHhaLMM_0W3FGVwHXFkA
基于DWC_ether_qos的以太网驱动开发-数据流验证过程 (qq.com)
一. 前言
以太网驱动的编写与调试是以数据流为导向的,数据流的确认我们可以采取层层推进的方式进行验证。即先验证MAC层,再验证PHY层,再验证接具体的设备比如PC收发数据。
如下所示
二. MAC层回环
MAC层回环可以确认MAC的DMA和PHY接口等是否工作正常.
MAC层回环即MAC的MII接口内部回环,不到外部PHY上,但是也验证到了MAC的PHY接口。
见手册16 Using the Loopback Mode
使能MAC回环需要配置寄存器MAC_Configuration的LM位为1
有以下需要注意的地方:
1.只能使用全双工模式
2.MAC回环也需要RXC时钟,正常RXC时钟来源于PHY,所以要不就使用PHY正常工作,要不就使用其他方式提供RXC时钟。很多时候MAC回环不通就是RXC或者TXC没有,所以先使用示波器确认这两个信号。
对于RTL8211F可以通过如下寄存器查看RXC是否输出
同时确认如下寄存器是否是LPI停止了RXC
最好如下寄存器按照默认配置为0,即LPI时不停止RXC
还有需要注意的是我这里实测是要接上网线到电脑,Link OK状态BMSR的bit2为1,才能MAC回环。否则MAC回环不通。
3.不要回环大包
三. PHY层回环
配置PHY寄存器0的bit14为1
四. ARP测试数据收发
发送ARP请求,电脑会自动返回ARP响应以测试回路。
ARP请求包格式如下
DA | 6字节目的MAC地址,设置为全FF广播 | |
SA | 6字节源MAC地址 | |
Type | 2字节Type 0x0806 | |
HWType | 2字节 0x0001 | |
ProtocolType | 2字节0x0800 | |
HWSize | 1字节0x06 | |
ProtocolSize | 1字节0x04 | |
Opcode | 2字节0x0001 | |
6字节发送端MAC地址 | ||
4字节发送端IP地址 | ||
6字节目的端MAC地址,未知所以全0 | ||
4字节目的端IP地址 | ||
18字节填充0,使得包长(DA到FCS)64字节 |
ARP响应包,和请求对比Opcode不一样,MAC和IP的源和目的反向。
DA | 6字节目的MAC地址 | |
SA | 6字节源MAC地址 | |
Type | 2字节Type 0x0806 | |
HWType | 2字节 0x0001 | |
ProtocolType | 2字节0x0800 | |
HWSize | 1字节0x06 | |
ProtocolSize | 1字节0x04 | |
Opcode | 2字节0x0002 | |
6字节发送端MAC地址 | ||
4字节发送端IP地址 | ||
6字节目的端MAC地址,未知所以全0 | ||
4字节目的端IP地址 | ||
18字节填充0,使得包长(DA到FCS)64字节 |
1.注意最低64字节的帧长要求
TDES3的CPC设置为00可以自动填充。
2.使用wireshark抓包确认
五. 总结
1.MAC层回环不通,则确认RXC和TXC是否有时钟,确认DMA_Debug_Status0的收发状态和描述符的相关寄存器(后面会单独详讲收发的调试)。
2.PHY层回环不通则确认PHY是否处于LINK Ok状态,逻辑分析仪监控MII接口等。
3.ARP测试不通,则确认发送包是否填充到了64字节;确认网线,硬件分析仪抓包等。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !