基于BF537構建雙冗余以太網(wǎng)的設計方案
表l中,Basic Control Register為基本控制寄存器,通過(guò)配置其各位,完成芯片軟復位、10 M/100 M選擇、全雙工/半雙工選擇、LookBack模式選擇、自協(xié)商等功能。Basic StatusRegister為基本狀態(tài)寄存器,對其查詢(xún)可以得到自協(xié)商結果、網(wǎng)絡(luò )物理連接狀態(tài)等網(wǎng)絡(luò )基本狀態(tài)。PHY Identifierl/PHYIdentifier 2寄存器標識了芯片的Chip ID。因此,對網(wǎng)絡(luò )狀態(tài)的實(shí)時(shí)監測實(shí)際上就是實(shí)時(shí)讀取Basic Status Register,并對結果作出判斷。
3.2 程序設計
可以通過(guò)操作BF537的寄存器EMAC_STAADD完成其對LAN8187寄存器的讀寫(xiě)。對LAN8187寄存器讀寫(xiě)的函數定義為:
u16 RdPHYReg(u16 PHYAddr,u16 RegAddr);
void WrPHYReg(u16 PHYAddr,u16 RegAddr,u32 Data);
其中PHYAddr為芯片的物理地址,RegAddr為寄存器地址。
對Basic Status Register的監測采用輪詢(xún)的機制,即設定一個(gè)信號量Link_status,其周期為2 ms,因此每隔2 msEther moniter線(xiàn)程被觸發(fā)一次。在Ether_moniter中通過(guò)調用RdPHYReg()函數,讀取Basic Status Register的值,并判斷Link位。Ether_moniter線(xiàn)程流程如圖3所示。

對于設計方案1來(lái)講,當檢測到需要進(jìn)行網(wǎng)絡(luò )切換時(shí),需要停用當前網(wǎng)卡初始化備用網(wǎng)絡(luò )LAN91C111并設定相同的IP地址以及MAC地址。對于方案2,則只需要通知CPLD將通道切換至備用的LAN8187接口。
4 冗余切換測試
用Visual C++6.0開(kāi)發(fā)的簡(jiǎn)單的上位機測試程序,每隔1ms發(fā)送一個(gè)UDP數據報,并給每個(gè)數據報編寫(xiě)不同的序號。在BF537中編寫(xiě)程序不斷接收上位機發(fā)來(lái)的數據報,然后制造網(wǎng)絡(luò )通信故障,本文構建的冗余網(wǎng)絡(luò )將會(huì )自動(dòng)切換到備用通道繼續接收上位機的數據報,最后通過(guò)檢測接收到數據報的序號來(lái)確定冗余切換所消耗的時(shí)間。分別對兩種方案所構建的冗余網(wǎng)絡(luò )的切換進(jìn)行測試,結果如表2所示。

從實(shí)驗結果可以看出方案2具有快速切換的優(yōu)點(diǎn),丟包率低;方案l平均丟包數遠遠大于方案2,并且切換時(shí)間長(cháng)。
5 結束語(yǔ)
本文提出了兩種基于BF537構建雙冗余以太網(wǎng)的方案,分別論述了其原理、器件選擇、連接方法,并做出軟件設計。最后經(jīng)過(guò)測試,方案2的切換效果和時(shí)間非常理想,最終在實(shí)際項目中得到了應用。
評論