千兆網口、光口除錯總結
1000BASE-X模式下PCS所在的OSI七層模型
PCS是物理編碼子層,通過將8bit的資料編碼成10bit傳送給PMA(physical media attach)層,千兆編碼方式是8B/10B,每個傳送碼元表示5符號-2、-1、0、1、2中的一個符號,故每個碼元代表2位元資訊(4電平中每個電平代表2位,還有一個前向糾錯碼FEC),這比二電平編碼提高了頻寬利用率,並能把波特率和所需訊號頻寬減為原來的一半,但多電平編碼需要用多位A/D,D/A轉換,採用更高的傳輸信噪比和更好的接受均衡效能。
下圖是MAC和PHY連線的圖,通常MAC整合在ARM核內,PHY是整合在switch中的。下面這張圖是SGMII的連線方式和這裡的RGMII方式還有區別。不過這張圖展現了MAC,PHY以及PCS的關係。上面的6096的PPU用來發現其對等的PHY,通常是網線的另一頭,但是也有PHY級聯的情況,6096就可以級聯88e1111使用。
SGMII下MAC和PHY連線方式--摘自思科文件
RGMII收發資料線各四根,其在時鐘的上升沿和下降沿都會鎖存資料,RGMII傳送側在時鐘的上升沿鎖存[0:3]低四位,在時鐘的下降沿,鎖存[4:7]高四位,速率計算125Mbps*(4+4)=1000Mbps,有效載荷會小於該值。接收類似,MAC和PHY側都有接收和傳送這樣的概念存在。時序調節,就是調節這裡的上下沿和資料的關係,只有正確的資料配合適當時序,傳輸時校驗和才會正確。
除錯過程:
1、確認環境,光端機需要使用千兆的,而不是百兆的,百兆光纖可以比百兆網路傳輸的距離要遠很多,單模下可以達到20KM~120KM。光纖線線頭保持潔淨,不要讓灰塵阻塞。
光模組分為,多模;對於多模注意收發的波長要對應,一般光模組上有藍色和黃色,收發使用兩種不同的顏色,即藍色配黃色才行。多模光纖使用一根光纖線,光纖線上的光波長為1.31um和1.55um居多。
2、單板加電看6096的LED燈是否亮,如果有對等的PCS層(PHY晶片、switch晶片會包括PCS),燈會亮,port8/9工作在1000BASE-X等也會亮。
3、uboot下通過mii命令讀取和適當調節6096上電初始PCS暫存器的引數。如果設定引數包括速率、雙工模式、link狀態以及時序調節,需要根據不同的模式進行不同的設定。
4、uboot下使用ping命令測試網路是否通。注意觀察ping時光端機和6096上的LED指示燈,如果ping不通,但是6096的燈有閃爍,則不同轉入5,調節6096的時序,如果等無反應也請轉入無調節時序試試。如果ping時通時不通,請轉入5.
5、uboot下使用mii命令,調節6096時序調節暫存器,包括收、發及其組合的四種可能,再次轉入4,當各種可能均試過後,依然不行,轉入6.
6、示波器測試在ubootping時6096收發埠有無訊號,測量時鐘訊號和資料線訊號。百兆時,時鐘是25MHz,千兆時是125MHz。資料線上的訊號對於千兆時五電平通道編碼、對於百兆是三電平通道編碼。三電平和五電平通道編碼看它們的電平表現還是挺有意思的,一些示波器能夠誘導外屆裝置傳送測試訊號。這裡指的測試只需要看看總線上是否有電平跳變就可以了。如果有訊號,重複步驟3讀取6096的狀態暫存器,以確認6096PCS暫存器設定是否正確。如果沒有訊號,檢查6096設計原理圖和PCB以及器件的焊接。如果沒有問題轉入7。
7、使用mr、mw命令修改ARM端GMAC相關配置暫存器。檢視DMA和EMAC相關資訊、統計收發資料包暫存器。重複4下的ping過程。如果還是不行。
8、檢查ARM端的原理圖、PCB、硬體上拉、下拉的配置。
9、Linux下該晶片驅動程式碼新增在drivers/net/phy/目錄。修改相關Makefile和配置指令碼,編譯。
另外:如果光口熱插拔出問題,即光模組在上電完成後拔下再插上出現網路不通,此時埠設定成自協商模式,可以解決此問題。
iperf效能測試
不同的網路測試環境結果可能有所差異。
# ./iperf -c 10.12.39.18 -b 1000M -t 120 -i1 u
...
[ 5]112.0-113.0 sec 41.4 MBytes 347 Mbits/sec
[ 5]113.0-114.0 sec 41.4 MBytes 348 Mbits/sec
[ 5]114.0-115.0 sec 41.4 MBytes 348 Mbits/sec
[ 5]115.0-116.0 sec 42.1 MBytes 353 Mbits/sec
[ 5]116.0-117.0 sec 42.5 MBytes 356 Mbits/sec
[ 5]117.0-118.0 sec 42.3 MBytes 355 Mbits/sec
[ 5]118.0-119.0 sec 42.3 MBytes 355 Mbits/sec
[ 5] 0.0-120.0 sec 4.94 GBytes 354 Mbits/sec
[ 5]Sent 3608196 datagrams
[ 5]Server Report:
[ 5] 0.0-120.0 sec 4.65 GBytes 333 Mbits/sec 0.069 ms 212912/3608194(5.9%)
ping包延遲
# ping 10.12.39.18
PING 10.12.39.18 (10.12.39.18): 56 databytes
64 bytes from 10.12.39.18: icmp_seq=0ttl=128 time=0.7 ms