1000BASE-X自协商总结
自协商状态机
自协商状态机是理解1000BASE-X自协商机制的关键。这部分内容笔者以点带面基于几个常见的应用场景做一个简单的解析。如果读者想对细节理解得更为透彻,请自行阅读IEEE 802.3相关章节。
自协商状态机状态图
异常场景1
A端自协商使能,单端悬空,然后执行上电动作。
A端的状态机流程
进入状态“AN_ENABLE”;
进入状态“AN_RESTART”(设置link_timer为10ms,并启用它;xmit = CONFIGURATION);
/注释:在“AN_RESTART”里以cg_timer (默认值为8ns)(PCS transmit code-group状态机)为周期持续对外发送有序集“C1A,C1B,C1C,C1D, C2A,C2B,C2C,C2D” “C1A,C1B,C1C,C1D, C2A,C2B,C2C,C2D” “C1A,C1B,C1C,C1D, C2A,C2B,C2C,C2D”……/
事件link_timer_done;
进入状态“ABILITY DETECT”;[此状态为最终稳定态]
异常场景2
A端自协商关闭,单端悬空,然后执行上电动作。
A端的状态机流程
进入状态“AN_ENABLE”;
进入状态“AN_DISABLE_LINK_OK” (xmit = DATA);[此状态为最终稳定态]
异常场景3
A端自协商使能(并行检测关闭),B端自协商关闭(并行检测关闭),光纤连好,然后执行上电动作。
A端的状态机流程
进入状态“AN_ENABLE”;
进入状态“AN_RESTART”(设置link_timer为10ms,并启用它;xmit = CONFIGURATION);
/注释:在“AN_RESTART”里以cg_timer (默认值为8ns)(PCS transmit code-group状态机)为周期持续对外发送有序集“C1A, C1B, C1C, C1D, C2A ,C2B C2C, C2D” “C1A, C1B, C1C, C1D, C2A, C2B, C2C, C2D” “C1A, C1B, C1C, C1D, C2A, C2B, C2C, C2D”……/
事件link_timer_done;
进入状态“ABILITY DETECT”;[此状态为最终稳定态]
B端的状态机流程
进入状态“AN_ENABLE”;
进入状态“AN_DISABLE_LINK_OK” (xmit = DATA);[此状态为最终稳定态]
最终结果为A端Link Down,B端为Link Up。此种情况即为光链路单通现象,会引起上层协议的异常。
正常场景1
A端自协商使能,B端自协商使能,光纤连好,然后执行上电动作。
A端的状态机流程
进入状态“AN_ENABLE”;
进入状态“AN_RESTART”(设置link_timer为10ms,并启用它;xmit = CONFIGURATION);
/注释:在“AN_RESTART”里以cg_timer (默认值为8ns)(PCS transmit code-group状态机)为周期持续对外发送有序集“C1A(K28.5), C1B(D21.5), C1C(Reg[7:0]), C1D(Reg[15:8]), C2A(K28.5), C2B(D2.2), C2C(Reg[7:0]), C2D(Reg[15:8])”(总共为64ns);“C1A,C1B,C1C, C1D, C2A, C2B, C2C, C2D”; “C1A, C1B, C1C, C1D, C2A, C2B, C2C, C2D”;……/
事件link_timer_done;
进入状态“ABILITY DETECT”;
事件ability_match = TRUE 且 rx_Config_Reg<D15:D0> != 0 ;
进入状态“ACKNOWLEDGE_DETECT”;
事件acknowledge_match = TRUE 且 consistency_match = TRUE;
进入状态“COMPLETE_ACKNOWLEDGE” (设置link_timer为10ms,并启用它);
事件link_timer_done且(ability_match=FALSE + rx_Config_Reg<D15:D0>!=0) ;
进入状态“IDLE_DETECT”(设置link_timer为10ms,并启用它;xmit = IDLE);
事件link_timer_done且idle_match = TRUE ;
进入状态“LINK_OK” (xmit = DATA);[此状态为最终稳定态]
B端的状态机流程与A端基本相同,这里就不赘述了。
这里笔者抛砖引玉一下,1000BASE-X自协商正常完成需要多少时间呢?
正常场景2
A端自协商关闭,B端自协商关闭,光纤连好,然后执行上电动作。
A端的状态机流程
进入状态“AN_ENABLE”;
进入状态“AN_DISABLE_LINK_OK” (xmit = DATA);[此状态为最终稳定态]
B端的状态机流程与A端基本相同,这里就不赘述了。
这里笔者抛砖引玉一下,1000BASE-X两端强制模式相对于1000BASE-X两端自协商模式优点和缺点分别是什么呢?
优点是link up的时间大幅度缩小;缺点:流控配置可能失配,光纤可能出现单向link up的故障(会导致上层协议运行异常)。
重新自协商功能
在1000BASE-X链路双方已经建立正确链接的情况下,1000BASE-X链路的任何一端改变自协商的广告能力并不会自动重新执行自协商的过程。需要执行下面的任一动作,新设置的自协商广告能力方可通过重新自协商而生效(以博通的BCM53286M举例):
Software reset (0.15),软件设置为1,然后软复位完成(寄存器会自动恢复为0),接着PHY硬件会按照最新的自协商广告能力重新进行协商。
Restart Auto-Negotiation (0.9),软件设置为1,然后PHY硬件会按照最新的自协商广告能力重新进行协商,协商完成后寄存器会自动恢复为0。
Auto-Negotiation Enable bit toggles (0.12) ,软件设置为0,然后设置为1,接着PHY硬件会按照最新的自协商广告能力重新进行协商。
管理员手动地将光纤重新插拔一次,接着PHY硬件会按照最新的自协商广告能力重新进行协商。
并行检测功能
并行检测功能用于光纤链路的一端1000BASE-X自协商使能(前提:并行检测功能使能;BCM53286M平台“ENABLE_ PARALLEL_ DETECTION位设置为1”;88E1111平台“Serial Interface Auto-Negotiation bypass enable位设置为1”;)(后续描述问题方便,我们称为A端),光纤链路另一端1000BASE-X自协商关闭(并行检测功能使能/关闭均可)(后续描述问题方便,我们称为B端)的应用场景。
A端周期对外发送C码,B端周期对外发送I码。当A端收到来自远端的I码,判断出远端不支持1000BASE-X自协商,会跳过1000BASE-X自协商状态机,对外发送I码。后续因为A,B两端互相发送I码,故双方可以建立正常链接。
这里笔者需要提醒一下读者朋友并非所有1000BASE-X PHY都支持并行检测功能,系统设计师在芯片方案选型的时候需注意鉴别。若1000BASE-X PHY不支持并行检测功能,系统管理员需要保证光纤链路两端的自协商模式一致(要么两端都使能,要么两端都关闭)。
1000BASE-X 自协商总结介绍完毕,下节课开始介绍1000BASE-X的孪生兄弟SGMII。