以太网传输速率从10兆发展到今天的100G,MAC层和PHY层之间的硬件接口发生了很大的变化,但是其中用来管理PHY的物理引脚始终只有2个,即MDC和MDIO引脚。随着PHY层变得越来越复杂,PHY寄存器的组织方式和寻址方式发生了变化,PHY管理接口的名称也从“MII管理接口”变为“MDIO接口”。千兆以太网之前,PHY管理接口称为“MII管理接口”;从10G以太网开始使用“MDIO接口”。有的千兆和百兆PHY支持一些扩展功能,也需要使用MDIO接口进行管理。
IEEE802.3标准的Clause22中描述了MII管理接口,而MDIO接口则在Clause45中进行说明。
PHY管理接口只有2个引脚,即MDC和MDIO。MDC用于传送时钟信号。在MII管理接口中,MDIO引脚只用作数据I/O通道;在MDIO接口中,则作为地址和数据通道使用。在电气特性方面,MDIO接口使用了更低的电压。
在产品硬件设计中,一台设备可能需要插多种型号的子卡,不同子卡上可能使用不同的PHY芯片,这意味着MAC芯片既要支持MII管理接口也要支持MDIO接口,并且可以在两种接口之间自由切换。
千兆以下的PHY比较简单,只有32个寄存器,MAC通过MII管理接口访问这些PHY寄存器。
10G以上的PHY比较复杂,PHY层被划分为多个子层,PCS子层、PMA子层、PMD等子层都有各自对应的MMD设备。MMD设备是MDIOManageableDevice的缩写,通过IEEE802.3标准Clause45规定的MDIO接口进行管理。10G以上的PHY的寄存器数量大大增加,寄存器的组织方式和千兆PHY也有明显的差异。
MII管理接口的寄存器列表:
地址 |
寄存器名称 |
说明 |
0 |
Control |
基本寄存器 |
1 |
Status |
基本寄存器 |
2,3 |
PHYIdentifier |
扩展寄存器 |
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接口的定义中,PHY层被划分为多个MMD设备(MDIOManagableDevice),每个MMD内部的寄存器的地址分配和MII管理接口中的地址类似,不过寄存器的数量多出很多。
IEEE802.3标准规定的MMD设备地址:
设备地址 |
设备名称 |
0 |
保留 |
1 |
PMA/PMD设备 10G以太网中,PMA和PMA通常集成在一起。 |
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 |
MAC访问PHY时,需要向PHY发送特定格式的信号,这些信号称为“管理帧”。
通过MII管理接口访问PHY寄存器时,知道PHY地址和寄存器地址即可。MII接口管理帧的结构如下:
操作类型 |
PRE |
ST |
OP |
PHYAD |
REGAD |
TA |
DATA |
读操作 |
1......1 |
01 |
10 |
AAAAA |
RRRRR |
Z0 |
DDDDDDDDDDDDDDDD |
写操作 |
1......1 |
01 |
01 |
AAAAA |
RRRRR |
10 |
DDDDDDDDDDDDDDDD |
1)PRE
PRE即preamble。MAC访问PHY寄存器之前,连续发送32个“1”,用于和PHY进行同步。
2)ST
ST即Startofframe,是2个固定的比特0和1。
3)OP
OP即OperationCode。读操作的操作码是10,写操作的操作码是01。
4)PHYAD
PHYAD即PHYaddress,表示5个bit位的PHY地址。PHY地址是由硬件连接决定的。硬件设计时,把PHY芯片的引脚电平上拉或者下拉,就可以设定PHY的地址。
5)REGAD
REGAD即RegisterAddress,表示PHY内部的寄存器地址。MII管理接口中,寄存器地址是5位的。
6)TA
TA即TurnAround。读操作的TA域从高阻态变为0,写操作的TA域则是从1变为0。
7)DATA
数据域为16bit,和PHY寄存器的宽度一致。读操作中,DATA域是从PHY层读到的数据;写操作中,DATA域是要写入PHY寄存器的值。
MDIO接口硬件上和MII管理接口一致,但是管理帧结构发生了变化。通过MDIO接口访问PHY寄存器时,需要知道端口地址、MMD设备地址和寄存器地址。
MDIO接口的管理帧如下:
操作类型 |
PRE |
ST |
OP |
PRTAD |
DEVAD |
TA |
ADDRESS/DATA |
地址操作 |
1......1 |
00 |
00 |
PPPPP |
EEEEE |
10 |
AAAAAAAAAAAAAAAA |
读操作 |
1......1 |
00 |
11 |
PPPPP |
EEEEE |
Z0 |
DDDDDDDDDDDDDDDD |
Post-read-increment-address操作 |
1......1 |
00 |
10 |
PPPPP |
EEEEE |
Z0 |
DDDDDDDDDDDDDDDD |
写操作 |
1......1 |
00 |
01 |
PPPPP |
EEEEE |
10 |
DDDDDDDDDDDDDDDD |
和MII管理接口相比,MDIO接口的读和写操作变复杂了,操作一个寄存器需要两步完成,首先要传送寄存器地址信息,然后才能读或者写对应的寄存器。
和MII管理接口的管理帧相比,MDIO接口的管理帧的主要差异如下:
1)ST
ST即Startofframe。MII接口的管理帧的ST域是01,MDIO管理帧中ST域的值是00。
2)PRTAD
PRTAD即PortAddress。PRTAD和MII管理接口的管理帧的PHYaddress一致。
3)DEVAD
DEVAD是DeviceAddress,该域是MMD设备的5位ID。这个域对应MII管理接口的管理帧的寄存器地址域。
4)ADDRESS/DATA
MDIO接口的地址操作中,这个域用来传送需要访问的寄存器的16位地址。MII管理接口中,寄存器地址只有5位;MDIO接口中,寄存器地址变为16位。
MDIO接口的读写操作中,这个域是读出或者待写入的数据。
----2013.11.03
本文出自 “网络工房” 博客,转载请与作者联系!