双绞线自协商总结篇(一)
自协商仲裁功能
自协商仲裁状态机是理解双绞线自协商机制的关键。这部分内容笔者以点带面基于几个常见的应用场景做一个简单的解析。如果读者想对细节理解得更为透彻,请自行阅读IEEE 802.3相关章节。
自协商仲裁状态机状态图
异常场景1
A端自协商使能,单端悬空,然后执行上电动作。
A端的状态机流程
进入状态“AUTO-NEGOTIATION ENABLE”;
进入状态“TRANSMIT DISABLE”(设置break_link_timer为1.2s到1.5s,并启用它);
事件break_link_timer_done;
进入状态“ABILITY DETECT”;[此状态为最终稳定态]
在“ABILITY DETECT”里以transmit_link_burst_timer(默认值为5.7ms到22.3ms,一般为14ms)为周期持续对外发送(PairA管脚)FLP Base Page Bursts。
异常场景2
A端自协商使能,B端自协商关闭,先把双绞线提前链接好,然后执行上电动作。
A端的状态机流程
进入状态“AUTO-NEGOTIATION ENABLE”;
进入状态“TRANSMIT DISABLE”(设置break_link_timer为1.2s到1.5s,并启用它);
事件break_link_timer_done;
进入状态“ABILITY DETECT”;
【因为B端自协商关闭:ability_match永远为flase】;
事件link_status_[TX]=READY(B端为100M)或
事件link_status_[NLP]=READY(B端为10M);
进入状态“LINK STATUS CHECK” (设置autoneg_wait_timer为0.5s到1s,并启用它);
事件autoneg_wait_timer_done 且
single_link_ready=true;
进入状态“FLP LINK GOOD CHECK”;
事件link_status_[HCD]=OK
(B端为100M时,HCD为100BASE-TX半双工;B端为10M时,HCD为10BASE-T半双工);
进入状态“FLP LINK GOOD”;[此状态为最终稳定态]
B端的状态机流程
B端因为自协商关闭,故与“自协商仲裁状态机无关”,这里不再赘述。
异常场景3
A端自协商使能(千兆PHY),B端自协商使能(千兆PHY),先把4芯双绞线(pin4,5,7,8无双绞线)提前链接好,然后执行上电动作。
A端的状态机流程
进入状态“AUTO-NEGOTIATION ENABLE”;
进入状态“TRANSMIT DISABLE”(设置break_link_timer为1.2s到1.5s,并启用它);
事件break_link_timer_done ;
/进入Base Page协商阶段/
进入状态“ABILITY DETECT”;
事件ability_match =true
(A,B互相FLP Bage Page交互后);
进入状态“ACKNOWLEDGE DETECT”;
事件ability_match =true
(A,B互相FLP Bage Page(ACK=1)交互后);
进入状态“COMPLETE ACKNOWLEDGE”;
/进入Next Page协商阶段/
/Next Page-Message/
事件ack_finished=true 且
mr_np_able=true 且
desire_np=true 且
mr_lp_np_able=true 且
mr_next_page_loaded=true 且
((tx_link_code_word[NP]=1) 或
(np_rx=1));
进入状态“NEXT PAGE WAIT”;
事件ability_match =true 且
((toggle_rx XOR ability_match_word[12])=1);
进入状态“ACKNOWLEDGE DETECT”;
事件ability_match =true
(A,B互相FLP Next Page(ACK=1)交互后);
进入状态“COMPLETE ACKNOWLEDGE”;
/Next Page-Unformatted-1/
事件ack_finished=true 且
mr_np_able=true 且
desire_np=true 且
mr_lp_np_able=true 且
mr_next_page_loaded=true 且
((tx_link_code_word[NP]=1) 或
(np_rx=1));
进入状态“NEXT PAGE WAIT”;
事件ability_match =true 且
((toggle_rx XOR ability_match_word[12])=1);
进入状态“ACKNOWLEDGE DETECT”;
事件ability_match =true
(A,B互相FLP Next Page(ACK=1)交互后);
进入状态“COMPLETE ACKNOWLEDGE”;
/Next Page-Unformatted-2/
事件ack_finished=true 且
mr_np_able=true 且
desire_np=true 且
mr_lp_np_able=true 且
mr_next_page_loaded=true 且
((tx_link_code_word[NP]=1) 或
(np_rx=1));
进入状态“NEXT PAGE WAIT”;
事件ability_match =true 且
((toggle_rx XOR ability_match_word[12])=1);
进入状态“ACKNOWLEDGE DETECT”;
事件ability_match =true
(A,B互相FLP Next Page(ACK=1)交互后);
进入状态“COMPLETE ACKNOWLEDGE”;
/FLP交互结束/
事件(ack_finished=true 且
(mr_np_able=false 或
desire_np=fase 或
mr_lp_np_able=false)) 或
(ack_finished=true 且
mr_np_able=true 且
mr_lp_np_able=true 且
tx_link_code_word[NP]=0 且
np_rx=1);
进入状态“FLP LINK GOOD CHECK” (设置link_fail_inhibit_timer为0.75s到1s,并启用它);
【HCD为1000BASE-T全双工。因为MDI侧RJ45接口的PairC,PairD没有链接,故1000BASE-T link完整性测试无法通过,“link_status_[HCD]=OK”永远无法满足】;
事件((link_status_[HCD]=FAIL 或
link_status_[HCD]=READY) 且
link_fail_inhibit_timer_done)或
incompatible_link = true;
进入状态“TRANSMIT DISABLE”(设置break_link_timer为1.2s到1.5s,并启用它);
事件break_link_timer_done ;
/进入Base Page协商阶段/
/进入Next Page协商阶段/
/FLP交互结束/
/进入Base Page协商阶段/
/进入Next Page协商阶段/
/FLP交互结束/
……
一直在上述状态中循环,始终无法建立正确链接。
B端的状态机流程与A端基本相同,这里就不赘述了。
写到这里可能有小伙伴会提出质疑,我们分明使用了4芯网线实现了两个千兆PHY的100BASE-TX模式的正确链接。笔者这里给个说明,笔者异常场景3的分析过程是基于完全硬件无软件参与的PCS的自协商仲裁状态机。小伙伴们遇到的场景,往往是计算机网卡驱动或者交换机的端口管理软件主动参与了“自协商广告能力设置和Base Page的NP比特设置”,从而在该场景下的百兆正确链接。
正常场景1
A端自协商使能(千兆PHY),B端自协商使能(千兆PHY),先把8芯双绞线提前链接好,然后执行上电动作。
A端的状态机流程
进入状态“AUTO-NEGOTIATION ENABLE”;
进入状态“TRANSMIT DISABLE”(设置break_link_timer为1.2s到1.5s,并启用它);
事件break_link_timer_done ;
/进入Base Page协商阶段/
进入状态“ABILITY DETECT”;
事件ability_match =true
(A,B互相FLP Bage Page交互后);
进入状态“ACKNOWLEDGE DETECT”;
事件ability_match =true
(A,B互相FLP Bage Page(ACK=1)交互后);
进入状态“COMPLETE ACKNOWLEDGE”;
/进入Next Page协商阶段/
/Next Page-Message/
事件ack_finished=true 且
mr_np_able=true 且
desire_np=true 且
mr_lp_np_able=true 且
mr_next_page_loaded=true 且
((tx_link_code_word[NP]=1) 或
(np_rx=1));
进入状态“NEXT PAGE WAIT”;
事件ability_match =true 且
((toggle_rx XOR ability_match_word[12])=1);
进入状态“ACKNOWLEDGE DETECT”;
事件ability_match =true
(A,B互相FLP Next Page(ACK=1)交互后);
进入状态“COMPLETE ACKNOWLEDGE”;
/Next Page-Unformatted-1/
事件ack_finished=true 且
mr_np_able=true 且
desire_np=true 且
mr_lp_np_able=true 且
mr_next_page_loaded=true 且
((tx_link_code_word[NP]=1) 或
(np_rx=1));
进入状态“NEXT PAGE WAIT”;
事件ability_match =true 且
((toggle_rx XOR ability_match_word[12])=1);
进入状态“ACKNOWLEDGE DETECT”;
事件ability_match =true
(A,B互相FLP Next Page(ACK=1)交互后);
进入状态“COMPLETE ACKNOWLEDGE”;
/Next Page-Unformatted-2/
事件ack_finished=true 且
mr_np_able=true 且
desire_np=true 且
mr_lp_np_able=true 且
mr_next_page_loaded=true 且
((tx_link_code_word[NP]=1) 或
(np_rx=1));
进入状态“NEXT PAGE WAIT”;
事件ability_match =true 且
((toggle_rx XOR ability_match_word[12])=1);
进入状态“ACKNOWLEDGE DETECT”;
事件ability_match =true
(A,B互相FLP Bage Page(ACK=1)交互后);
进入状态“COMPLETE ACKNOWLEDGE”;
/FLP交互结束/
事件(ack_finished=true 且
(mr_np_able=false 或
desire_np=fase 或
mr_lp_np_able=false)) 或
(ack_finished=true 且
mr_np_able=true 且
mr_lp_np_able=true 且
tx_link_code_word[NP]=0 且
np_rx=1);
进入状态“FLP LINK GOOD CHECK” (设置link_fail_inhibit_timer为0.75s到1s,并启用它);
事件link_status_[HCD]=OK
(HCD为1000BASE-T 全双工);
进入状态“FLP LINK GOOD”;[此状态为最终稳定态]
B端的状态机流程与A端基本相同,这里就不赘述了。
这里笔者抛砖引玉一下,千兆双绞线自协商正常完成需要多少时间呢?MultiGBASE-T自协商正常完成又需要多少时间呢?
FLP示波器测量
当双绞线PHY单端悬空时,自协商双方持续性周期性发送FLP-BasePage。双方完成BasePage的“ACKNOWLEDGE DETECT”和“COMPLETE ACKNOWLEDGE”状态机之后,方才会进入Next Pages(千兆PHY)/Extended Next Pages(MultiGBASE-T PHY)交互阶段。所以当双绞线的端口单端悬空时,用示波器测量PairA(RJ45的pin1,2)的FLP波形,用户永远只能抓到BasePage的内容(即使是千兆PHY/ MultiGBASE-T PHY,也无法抓到Next Pages/Extended Next Pages的波形,因为单端悬空时“自协商仲裁状态机”永远在“ABILITY DETECT”态)。
笔者这里提个问题,只给你一台示波器和一台交换机,能否判断出这台交换机的PHY的类型吗?(FE PHY ? GE PHY ? MultiGBASE-T PHY?)
重新自协商功能
在双绞线双方已经建立正确链接的情况下,双绞线的任何一端改变自协商的广告能力并不会自动重新执行自协商的过程。需要执行下面的任一动作,新设置的自协商广告能力方可通过重新自协商而生效(以博通的MultiGBASE-T PHY BCM84891L举例):
Software reset (7.0.15,7.65504.15),软件设置为1,然后软复位完成(寄存器会自动恢复为0),接着PHY硬件会按照最新的自协商广告能力重新进行协商。
Restart Auto-Negotiation (7.0.9,7.65504.9),软件设置为1,然后PHY硬件会按照最新的自协商广告能力重新进行协商,协商完成后寄存器会自动恢复为0。
Auto-Negotiation Enable bit toggles (7.0.12,7.65504.12) ,软件设置为0,然后设置为1,接着PHY硬件会按照最新的自协商广告能力重新进行协商。
管理员手动地将双绞线重新插拔一次,接着PHY硬件会按照最新的自协商广告能力重新进行协商。
双绞线自协商总结篇未完待续……