千兆交換機(Realtek主晶片RTL8367SS-CG)的開發與調試

在現代的生活中,交換機是一個非常常見的,重要的設備,無論在公司企業,還包括一些家庭中,交換機都是很常用的設備,通過交換機,可以將多台設備進行互聯互通.
家庭網絡示意圖小型網絡示意圖

那麼是否考慮過開發一款自己的交換機呢?
其實開發交換機並不困難,Realtek 有全系列的交換機產品方案,包括  RTL8367S-CG(5+2)/RTL8367RBI-VH-CG(5+2)/RTL8370MB(8+2)  10/100/1000M交換機,高端的還有萬兆交換機。
本文以 RTL8367S-CG作為主晶片作為說明。

1.  首先了一下 RTL8367S的外部接口
RTL8367S-CG 系統框圖
RTL8367S-CG 交換機框圖

由上圖我們可以看到 RTL8367S-CG 可以直接引出 5個RJ45接口,另外還有2個擴展接口,所以叫 5+2,通過擴展接口可以與SOC連接,讓SOC可以與多個網絡設備進行通信,也可以通過擴展接口來與PHY 進行連接,這樣可以實現把交換機埠最大擴展到7個。

這裡需要注意的是GMAC1 支持SGMII/HSGMII,可以通過這個接口擴展光口或接SOC,也可以接支持SGMII的PHY等,GMAC2 支持MII/RGMII , 可以接SOC 或PHY.
如果想設計交換機應用,可以參考 Realtek 的 HDK , 能比較容易的進行開發。

2.  根據Realtek 的參考設計(HDK)進行開發
原理設計時一定要嚴格以Realtek參考設計為準,注意以下幾點:
       
A.  電源的網絡標號要與Realtek原廠的HDK中的一致,交換機的電源網絡標號比較多,包括 AVDDH,AVDDL,DVDDL,DVDD09,DVDDIO,DVDDIO2,DVDDIO_2等,每路電源都有具體用途,建議不要輕易改名字。
B.  LED 的引腳大部分帶有配置功能,一定先設計好strapping,可以上拉,下拉,能進行配置, 再去設計LED顯示部分
C.  對於RGMII 如果引腳不使用,可以考慮輸出引腳懸空,輸入引腳接地,輸入輸出的區分請參考 datasheet
D.  如果通過RGMII/SGMII 與對端連接,一定注意方向,做到交換機的輸出引腳接對端設備的對應的輸入引腳,建議設計原理時在原理上就標出引腳方向,這樣不容易出錯
 
3.  PCB設計相關說明
PCB 的設計注意項比較多,包括布局及走線,建議開發時,與我們聯繫,我們會與Realtek原廠一起對咱們的PCB 進行把控。
下圖是本人據參考設計業餘時間做的交換機Demo板,由於時間關係,PCB 走線部分做得並不細緻,有些地方也沒有嚴格按PCB走線要求做,但是交換機功能仍穩定可靠,這也說明Realtek的晶片對PCB的要求也沒有那麼苛刻(不過我們建議做產品還是要嚴格按要求設計),實現基本功能還是比較容易的。

  自製交換機Demo

4.  調試說明
板子貼片回來後,可以先做以下檢查

A.先要測量電源電壓是否正確  

B.檢查各個配置引腳是否正確
C. 交換機默認就是可以工作的,可以先不用加載API
D. 在API調通之前,一定先把配置引腳  LAN1LED0 / EN_PHY: Pull Up: Enable embedded PHY.   拉高后使能 PHY,這樣交換機如果硬體沒有問題,且配置正確的情況下肯定是可以工作的, 然後把交換機的埠插上網線,對端
連接電腦,並看電腦端的網絡狀態,就可以判斷出交換機是否已經正常工作,如果電腦識別不到,請檢查硬體

5.  軟體說明
Rtl8367S支持通過MDIO進行管理,但是這裡需要注意的是,Realtek 的API功能很強大,所以代碼量也較大,對MCU要求也比較高。 本人調試時,使用 STM32F103RCT6感覺剛好夠用(建議用STM32F103RET6,如果接有SOC , 就用SOC集成API), 通過GPIO模擬MDIO方式實現對交換機的管理即可。集成API時,比較麻煩的點是API 的集成及編譯。編譯完成之後,調用rtk_switch_init() 函數接口對交換機進行基本配置後,交換機就可以用了。如果要使用 GMAC口,還需要通過rtk_port_macForceLinkExt_set()接口進行相應的配置,再配置好Delay和 LED 部分,交換機的基本功能就都實現了。
另外,在程序中我們還可以加入以下代碼,用來監控每個網口的狀態,包括連接狀態0/1,當前的速度10/100/1000,和全雙功/半雙功方式,代碼可以放在Task 中周期運行。
void rtl83xx_switch_linkcheck ( void )
{
int i;
rtk_api_ret_t ret;
rtk_port_linkStatus_t LinkStatus;
rtk_port_speed_t Speed;
rtk_port_duplex_t Duplex;
printf ( "\r\n\r\n------------------------------------------------------" );
for ( i=UTP_PORT0; i<UTP_PORT5; i++ )
{
ret = rtk_port_phyStatus_get ( i, ( rtk_port_linkStatus_t* ) &LinkStatus, ( rtk_port_speed_t* ) &Speed, ( rtk_port_duplex_t* ) &Duplex );

printf ( "\r\n Port:%d , LinkStatus:0x%x, Duplex:0x%x",i,LinkStatus, Duplex );

}
printf ( "\r\n------------------------------------------------------\r\n" );

}
當我們在一個網口插上網線的時候,系統列印出對應埠的連接狀態 LinkStatus: 0x01  , 當再取下網線時, 系統會列印出對應的埠的狀態: LinkStatus: 0x00 , 通過上面的代碼我們就可以監控每個埠的 Link狀態,對做更智能的應用,打好基礎。

到此這個交換機的功能是不是已經比普通的交換機強大了呢,是不是心動呢?
要做交換機可以與大聯大北京Realtek團隊聯繫,郵箱: Lynx.liu@cn.yosungroup.com

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★博文作者未開放評論功能

參考來源