网卡phy学习
MII接口
网络的数据传输时靠MII,常用的MII mode如下:
MII接口:
表中信号方向针对PHY芯片来说,I表示输入,O表示输出:信号 方向 位宽 含义 RX_CLK O 1 发送时钟,PHY芯片产生,100Mbps时为25MHz,10Mbps时为 2.5MHz。 RX_DV O 1 高电平表示发送的数据有效。 RX_ER O 1 高电平表示发送数据的错误,接收端不接受该数据。 RX_D O 4 发送数据总线。 TX_CLK O 1 接收时钟,PHY芯片产生,频率与RX_CLK一致。 TX_EN I 1 高电平表示接收的数据有效。 TX_ER I 1 高电平表示接收的数据包有误,丢弃该数据包。 TX_D I 4 接收数据总线。 CRS O 1 载波侦测信号,不需要同步于参考时钟,有数据传输,CRS就有效,仅PHY在半双工模式下有效。 COL O 1 冲突检测信号,不需要同步于参考时钟,仅PHY在半双工模式下有效。
RMII接口:
RMII(Reduced Media Independent Interface)接口其实就是MII接口的简化版本,将TX_CLK和RX_CLK合并为双向时钟线REF_CLK,由外部的晶振同时给PHY芯片和MAC主控芯片提供时钟信号。将4位的数据线简化为2位。
信号 方向 位宽 含义 REF_CLK I 1 参考时钟,外部晶振产生,100Mbps时为50MHz,10Mbps时为5MHz。 CRS_DV O 1 高电平表示发送的数据有效。 RX_ER O 1 高电平表示发送数据的错误,接收端不接受该数据。 RX_D O 2 发送数据总线。 TX_EN I 1 高电平表示接收的数据有效。 TX_D I 2 接收数据总线。 RMII将发送时钟、接收时钟合并为参考时钟信号,把4位的数据线简化为2位数据线,可以简化PCB布局布线。RMII同样只能实现100Mbps和10Mbps,当以100Mbps速率传输数据时,每个时钟传输2位数据,此时参考时钟应该设置为50MHz。当以10Mbps速率传输数据时,参考时钟应设置为5MHz。
GMII接口:
- GMII(Gigabit Media Independent Interface)接口是比较常见的千兆网接口
- 接口信号的含义与MII接口一致,此处就不在赘述,注意MII的接收时钟和发送时钟均由PHY芯片输出,而GMII的TX_CLK是由MAC输出给PHY芯片的。此外就是数据位宽由MII的4位变为了8位。
RGMII接口:
- RGMII(Reduced Gigabit Media Independent Interface)接口就是把GMII接口的数据线做简化处理,也能够实现千兆网
- 相比GMII接口,RGMII接口的数据线由8位缩减到4位,RX_DV与RX_ER信号合成为RX_CTL信号。该接口实现1000Mbps传输速率时,时钟依旧是125MHz
mdio
==mac访问phy的一些配置通过mdio bus访问,MDIO的作用仅仅只是用来查看一些状态和功能,还有简单的控制。而网络的数据传输时靠MII不是靠MDIO==
mdio的读写有两种协议 C22和 C45:
C22
Frame | Preamble (32bits) | Start (2bits) | OP Code (2bits) | PHYAD (5bits) | REGAD (5bits) | Turn Around (2bits) | Data (16bits) | Idle |
---|---|---|---|---|---|---|---|---|
Read | 1…….1 | 01 | 10 | A4…A0 | R4…R0 | Z0 | D15…….D0 | Z* |
Write | 1…….1 | 01 | 01 | A4…A0 | R4…R0 | 10 | D15…….D0 | Z* |
上图中*表示高阻态,这时MDIO的状态由一个外部的1.5KΩ电阻决定。
- Preamble+Start: 32bits的前导码以及2bit的开始位。
- OP Code: 2bits的操作码,10表示读,01表示写。
- PHYAD: 5bits的PHY地址,一般PHY地址从0开始顺序编号,例如6口switch中PHY地址为0-5。
- REGAD: 5bits的寄存器地址,即要读或写的寄存器。
- Turn Around: 2bits的TA,在读命令中,MDIO在此时由MAC驱动改为PHY驱动,并等待一个时钟周期准备发送数据。在写命令中,不需要MDIO方向发生变化,则只是等待两个时钟周期准备写入数据。
- Data: 16bits数据,在读命令中,PHY芯片将读到的对应PHYAD的REGAD寄存器的数据写到Data中,在写命令中,MAC将要写入对应PHYAD的REGAD寄存器的值写入Data中。
- Idle: 空闲状态,此时MDIO无源驱动,处高阻状态,但一般用上拉电阻使其处在高电平。
C45
Frame | Preamble (32bits) | Start (2bits) | OP Code (2bits) | PHYAD (5bits) | DEVAD (5bits) | Turn Around (2bits) | Data (16bits) | Idle |
---|---|---|---|---|---|---|---|---|
Address | 1…….1 | 00 | 00 | PPPPP | EEEEE | 10 | A15…….A0 | Z* |
Write | 1…….1 | 00 | 01 | PPPPP | EEEEE | 10 | D15…….D0 | Z* |
Read | 1…….1 | 00 | 11 | PPPPP | EEEEE | z0 | D15…….D0 | Z* |
Read Inc. | 1…….1 | 00 | 10 | PPPPP | EEEEE | Z0 | D15…….D0 | Z* |
Preamble+Start: 32bits的前导码以及2bit的开始位。帧开始标志, 为了区别CL22,Clause45 的开始标志为比特“00”。
OP Code: 操作码,Clause45有4种操作码,比特“00”表示设置当前寄存器地址,比特“01”表示写当前寄存器。比特“10”表示读当前寄存器,比特“11”表示读当前寄存器读完后把当前寄存器的值加1,用于顺序读。
PRTAD: Port Address,端口地址, 也称物理地址。
DEVAD:器件地址,CL45新增概念,各值与器件对应如下。
Value Device 00000 Reserved 00001 PMD/PMA 00010 WIS 00011 PCS 00100 PHY XS 00101 DTE XS REGAD: 用来选MMD的65536个寄存器中的某个寄存器的地址。
Turn Around: 2bits的TA,在读命令中,MDIO在此时由MAC驱动改为PHY驱动,并等待一个时钟周期准备发送数据。在写命令中,不需要MDIO方向发生变化,则只是等待两个时钟周期准备写入数据。
Data: 帧的寄存器的数据域,16bits,若为读操作,则为MMD送到STA的数据,若为写操作,则为STA送到MMD数据。
Idle: 空闲状态,此时MDIO无源驱动,处高阻状态,但一般用上拉电阻使其处在高电平。
第45号条款的主要变化是如何访问寄存器。在第22中,一个单独的帧指定要读或写的地址和数据,同时完成了这些工作。45号中改变这种范式,第一个地址帧发送到指定的MMD和寄存器,然后发送第二帧来执行读或写。
添加这个依次循环访问的好处是45条款是向后兼容22条款的,允许设备的互操作。其次,通过创建一个框架的登记地址,地址空间从5位增加到16位,这使得STA访问65536个不同的寄存器。
管理接口寄存器
以太网传输速率从10兆发展到今天的100G,MAC层和PHY层之间的硬件接口发生了很大的变化,但是其中用来管理PHY的物理引脚始终只有2个,即MDC和MDIO引脚。随着PHY层变得越来越复杂,PHY寄存器的组织方式和寻址方式发生了变化,PHY管理接口的名称也从“MII管理接口”变为“MDIO接口”。千兆以太网之前,PHY管理接口称为“MII管理接口”;从10G以太网开始使用“MDIO接口”。有的千兆和百兆PHY支持一些扩展功能,也需要使用MDIO接口进行管理。
MII 管理接口寄存器
MII管理接口的寄存器列表:
地址 | 寄存器名称 | 说明 |
---|---|---|
0 | Control | 基本寄存器 |
1 | Status | 基本寄存器 |
2,3 | PHYIdentifier | 扩展寄存器,2用于存放phyid的高16位,3用于存放低16位 |
4 | Auto-NegotiationAdvertisement | 扩展寄存器 |
5 | Auto-NegotiationLinkPartnerBasePageAbility | 扩展寄存器,用于自协商功能 |
6 | Auto-NegotiationExpansion | 扩展寄存器,用于自协商功能 |
7 | Auto-NegotiationNextPageTransmit | 扩展寄存器,用于自协商功能 |
8 | Auto-NegotiationLinkPartnerReceivedNextPage | 扩展寄存器,用于自协商功能 |
9 | MASTER-SLAVEControlRegister | 扩展寄存器,用于自协商功能 |
10 | MASTER-SLAVEStatusRegister | 扩展寄存器,用于自协商功能 |
11 | PSEControlregister | 扩展寄存器 |
12 | PSEStatusregister | 扩展寄存器 |
13 | MMDAccessControlRegister | 扩展寄存器 |
14 | MMDAccessAddressDataRegister | 扩展寄存器 |
15 | ExtendedStatus | 千兆以太网中,register15用作扩展的状态寄存器;百兆以太网中,保留未使用。 |
16~31 | VendorSpecific | 由PHY厂商自定义。这也意味着,这些寄存器需要参考芯片手册才能了解具体的含义。 |
mdio管理寄存器列表
在MDIO接口的定义中,PHY层被划分为多个MMD设备(MDIOManagableDevice),每个MMD内部的寄存器的地址分配和MII管理接口中的地址类似,不过寄存器的数量多出很多。
IEEE802.3标准规定的MMD设备地址:
设备地址 | 设备名称 |
---|---|
0 | 保留 |
1 | PMA/PMD设备10G以太网中,PMA和PMD通常集成在一起。 |
2 | WIS |
3 | PCS |
4 | PHYXS |
5 | DTEXS |
6 | TC |
7 | Auto-Negotiation |
8 | SeparatedPMA(1)40G/100G以太网中,PMA和PMD是分开的。 |
9 | SeparatedPMA(2) |
10 | SeparatedPMA(3) |
11 | SeparatedPMA(4) |
12~28 | 保留 |
29 | Clause22扩展 |
30 | VendorSpecific1。这意味着,device30的寄存器需要参考厂商的芯片手册才能了解具体的含义。 |
31 | VendorSpecific2 |