1. 程式人生 > >AM335x支援KSZ8863除錯總結

AM335x支援KSZ8863除錯總結

      最近由於技術支援需要,接觸到交換機晶片KSZ8863,由於以前未接觸過這款晶片,除錯過程中也越到了一系列的問題,需要對問題總結,積累,方便以後的專案,也方便遇到相同問題的朋友。

      在客戶需求中,需要組建環形網路,也就是A裝置接B裝置,B裝置接C裝置......,,要求A,B,C,D裝置之間可以進行網路通訊。組建環行網路的原因主要是為了節約成本(可以不用交換機),方便佈線。滿足客戶這樣的需求就要求每臺裝置要有兩個網口,且環形網路上面的裝置需要在同一網段,裝置和裝置之間可以進行網路交換,類似於所有的裝置都接到交換機上面。

           

    如上圖所示,每臺裝置有兩個網口,B裝置的網口1與A裝置的網口2連線,C裝置的網口1 跟B裝置的網口2連線,D裝置的網口1跟C裝置的網口2連線,A裝置的網口1跟C裝置的網口2連線,只要四臺裝置的IP地址在同一網段,他們之間就可以互相通訊。

       實際上每臺裝置的網口1代表該裝置的網路,擁有裝置的IP地址,而網口2其實是交換機介面,跟該裝置沒有什麼必然的關係,獨立使用,可以掛載網路裝置,這樣理解整個組網就很容易了。

       為了實現客戶的需求,採用了網路晶片 KSZ8863RLL,該晶片有三個埠,埠1與網口1連線,埠2與網口2連線,埠3與SoC的CPU連線,SoC我們採用的TI  Cortex-A8 處理器,埠3與CPU的連線使用RMII介面,MDIO管理KSZ8863。

    

我們採用的是FET335xD核心板,該核心板支援RMII介面,MDIO介面,軟體上面我們使用的是Linux系統,Uboot和Kernel裡面不需要KSZ8863特別的驅動,直接使用通用Phy驅動即可,軟體修改需要注意:

1  Phy在MDIO總線上面的地址

   本例中CPU通過port3連線的是Port1的Phy,Port1埠作為裝置X的Phy裝置,進行網路通訊,KSZ8863的Port1 Phy 地址是1,故我們需要在Uboot和Kernel中設定Phy  address 為 0x01.

2   KSZ8863的工作模式

 該晶片通過Port3與CPU進行RMII物理連線,另外在AM335X上面我們需要通過MDIO匯流排管理KSZ8863,KSZ8863支援IIC介面,SPI介面,SMI介面(也就是MDIO介面),需要設定Pin43和Pin44的引腳狀態,讓晶片採用SMI介面。(Datasheet有模式配置說明)

     

     需要注意以上兩點,這樣KSZ8863就可以工作了,在Uboot命令列中可以執行mii 命令檢視網路Phy裝置暫存器,如果不知道Phy在MDIO總線上面的地址,也可以在Uboot命令列執行mii命令掃描MDIO總線上面的裝置,另外KSZ8863的晶片與AM335X連線時晶片務必工作在SMI模式下面,客戶的板子就是因為模式設定引腳狀態不對(上下拉電阻導致),CPU總是無法識別該裝置。

     裝置識別KSZ8863後進可以正常工作了,通用的Phy驅動確實很不錯,不需要單獨移植晶片的驅動了,很給力,當然KSZ8863還支援其他的工作模式,本例中使用的是一個埠作為Phy,另外一個埠作為交換機工作模式。對了,可以測試一下,使用一臺PC與一臺裝置的網口2連線,兩臺裝置設定在同一網段,網路不通?奇怪,哦,原來是裝置的網口1沒有啟用(網口1的燈不亮),需要用一條網線連線網口1與其他的任意網路裝置,網路1的燈閃爍時,PC就可以Ping通裝置了。網口1建立連線後(網口燈閃爍),才啟用裝置的網路功能,這一點跟普通的Phy晶片有點不同。