以太网MAC和PHY总结
一、简介
网卡(Network Interface Card,简称NIC),也称网络适配器,是网络相互连接需要的设备。
数据是以帧的方式进行传输的。数据包包含有数据、数据的发送地、接收地和数据的校验信息。
网卡主要包括OSI的最下面的两层,物理层和数据链路层。
二、MAC和PHY接口
参考链接:https://blog.csdn.net/u012489236/article/details/108669679
可以看到,MAC是在CPU总线上的(APB、AHB、AXI);
而MAC与PHY之间通过两个接口连接,分别为SMI(MDC/MDIO)接口和MII接口:
MII叫做介质独立接口,MAC通过PHY收发其他设备的网络数据就靠该接口;
SMI叫做是串行管理接口,MAC通过该接口可以读写PHY的寄存器。
所以CPU可以直接读写MAC寄存器,无法直接读写PHY寄存器,需要控制MAC部分寄存器才能实现间接读写PHY寄存器。
1、MII接口
MII(Media Independent Interface)即媒体独立接口。
MII接口有MII、RMII、SMII、SSMII、SSSMII、GMII、SGMII、RGMII等。这里简要介绍其中的MII和RGMII。
主要包括以下两个部分:
从MAC层到PHY层的发送数据接口
从PHY层到MAC层的接收数据接口
1.1 MII
MII 数据接口总共需要 16 个信号,时钟为25MHz,传输速率为10/100Mbps。所以MII的特性如下:
支持10Mb/s和100Mb/s的数据速率
100M工作模式下,参考时钟是25MHz;10M工作模式下,信号参考时钟是2.5MHz
支持全双工、半双工两种工作模式
发送和接收数据时采用,4bit方式
1.2 RMII
RMII是简化的MII接口,在数据的收发上它比MII接口少了一倍的信号线(2数据位),所以它一般要求是50MHz的总线时钟。RMII的一个端口要求7个数据线,比MII少了一倍,所以交换机能够接入多一倍数据的端口.
和MII一样,RMII支持10Mbps和100Mbps的总线接口速度.
1.3 GMII 、RGMII
为了支持千兆网口,开始有了GMII接口。现在比较常用的是RGMII,减小了MAC和PHY之间的引脚数量。数据信号和控制信号混合在一起,并且在工作时钟的上升沿和下降沿同时采样。
2、SMI接口
SMI由两根线组成,双工,MDC为时钟线,MDIO为数据线,也可以通过总线访问多个不同的phy。
MDIO 总线只支持 MAC 作为主设备,PHY 作为从设备。
MDC/MDIO基本特性:
两线制:MDC(时钟线)和MDIO(数据线)。
时钟频率:2.5MHz
通信方式:总线制,可同时接入的PHY数量为32个
通过SMI接口,MAC芯片主动的轮询PHY层芯片,获得状态信息,并发出命令信息。
注:因为原文将 MDC/MDIO 一会儿放在MII接口,一会儿放在SMI接口进行表述,存在冲突,所以有些微修改。
总结如下:
如上图,MAC和PHY有18个数据线连接,将其分为两个接口:
SMI接口包含MDC(时钟线)和MDIO(数据线);MAC读写PHY寄存器就靠SMI接口 !
MII接口包含其余16个数据线;MAC通过PHY和其他设备收发数据就靠MII接口 !
三、CPU读写phy方法
一般MAC包含有下面的寄存器:
phy控制寄存器
phy地址寄存器
phy数据寄存器
1、CPU通过mac来读phy的寄存器
(不同MAC可能不一样)
- 先写入要读的phy寄存器的地址到 mac的[phy地址寄存器]。
- 把mac的[phy控制寄存器]的(读命令位)和(PHY选择位)置位。
- 等待mac的[phy控制寄存器]的(读完成位)变为0,为1表示正在进行。
- 清除mac的[phy控制寄存器]的(读命令位)。
- 读mac的[phy数据寄存器]。即得到了我们想读的phy寄存器的值。
dp83865的phy控制寄存器和phy地址寄存器合二为一:
//PHY ID PHY寄存器 range 11读/01写 BUSY BIT
value = ((phy_id) << 21) | ((addr) << 16) | ((CSR_CLK_Range) << 8) | ((0x3) << 2) | ((0x1) << 0);
regWrite(MDIO_ADDRESS_REG, value);
2、CPU通过mac来写phy的寄存器
(不同MAC可能不一样)
- 将要写的phy寄存器的地址写到mac的[phy地址寄存器]。
- 写数据到mac的[phy数据寄存器]。
- 把mac的[phy控制寄存器]的(写命令位)和(PHY选择位)置位。
- 延时1ms,等待完成。
- 清除mac的[phy控制寄存器]的(写命令位)。