在近期有一个项目,是一台设备中发现mac与phy之间的信号质量有一些差,报文会出现很多的crc错误码。希望可以将mac与phy之间的工作模式改为10GBASE-KR/40GBASE-KR4,从而提高信号质量,减少crc错误码。要实现10GBASE-KR/40GBASE-KR4,需要打开auto-negotiation,所以,文章主要内容是如何开启自协商,以及相关参数的解释。
需要的文档:
1、802.3协议手册
2、所调试phy的芯片手册(我自己使用的是bcm的万兆phy)
万兆phy情况摘要
PHY寄存器分为两大部分:
1、system端,是phy与交换芯片连接的一侧;
2、line端,是phy与光模块连接的一侧
寄存器的读取地址有device address与register address。system-side 与 line-side寄存器的device address,register address 是一致的,他们是通过将寄存器【device address = 0x01, register address = 0xffff】赋值来进行区分,寄存器赋值为0,读写line-side方向的寄存器;寄存器赋值为1,读写为system-side方向的寄存器。
我们在阅读芯片手册的过程中,会发现cl72、cl73之类的字。如果是第一次读相关手册的童鞋们,肯定也是一脸迷惑,并且也很难百度到相关信息。此处的cl72, cl73指代的是802.3协议中的clause 72, clause 73。phy手册中的很多寄存器内容以及名词都没有相关解释,这些寄存器以及名词均可以从802.3手册中找到对应的解释。
cl73-auto-negotiation
IEEE802.3标准中,自协商功能被分为三类,分别在clause 28, clause 37 和 clause 73中进行说明:
1)clause 28规范了使用双绞线作为传输介质的以太网自协商类型
2)clause 37规范了1000BASE-X的以太网类型
3)clause 73规范了backplane ethernet 以及40GBASE-CR4, 100GBASE-CR10以太网的自协商。
上述图表是位于802.3 table 73-6。举例,表中的7.0.9 auto-negotiation restart, 7.0.9代表的是device address = 0x07, register address = 0x00, 第9比特位。自协商的过程是Link partner 发送一张page,其中携带了自协商的信息,该page的信息存储在mr_lp_adv_ability[48:1]。有的phy也会携带next page。我们接下来将查看一下这个48bit的page的具体信息(附:以下信息均可以在802.3 clause 73中找到)
该page 的信息是通过differential manchester encoding(DME)来进行传送的。
D[4:0]: selector field, 一般为00001 代表IEEE STD 802.3
D[5:9]: echoed nonced field,
D[12:10]: advertise capability not related to the phy
D[13:15]: RF, ACK, NP , those bit shall function as specified in 28.2.1.2
D[16:20]: transmitterd nonced field
D[21:45]: technology ability field
D[46:47]: FEC ability
a) F0 is FEC ablity
b) F1 is FEC request