基于BF537的雙冗余以太網(wǎng)的設(shè)計(jì)與實(shí)現(xiàn)
表l中,Basic Control Register為基本控制寄存器,通過配置其各位,完成芯片軟復(fù)位、10 M/100 M選擇、全雙工/半雙工選擇、LookBack模式選擇、自協(xié)商等功能。Basic StatusRegister為基本狀態(tài)寄存器,對(duì)其查詢可以得到自協(xié)商結(jié)果、網(wǎng)絡(luò)物理連接狀態(tài)等網(wǎng)絡(luò)基本狀態(tài)。PHY Identifierl/PHYIdentifier 2寄存器標(biāo)識(shí)了芯片的Chip ID。因此,對(duì)網(wǎng)絡(luò)狀態(tài)的實(shí)時(shí)監(jiān)測(cè)實(shí)際上就是實(shí)時(shí)讀取Basic Status Register,并對(duì)結(jié)果作出判斷。
3.2 程序設(shè)計(jì)
可以通過操作BF537的寄存器EMAC_STAADD完成其對(duì)LAN8187寄存器的讀寫。對(duì)LAN8187寄存器讀寫的函數(shù)定義為:
u16 RdPHYReg(u16 PHYAddr,u16 RegAddr);
void WrPHYReg(u16 PHYAddr,u16 RegAddr,u32 Data);
其中PHYAddr為芯片的物理地址,RegAddr為寄存器地址。
對(duì)Basic Status Register的監(jiān)測(cè)采用輪詢的機(jī)制,即設(shè)定一個(gè)信號(hào)量Link_status,其周期為2 ms,因此每隔2 msEther moniter線程被觸發(fā)一次。在Ether_moniter中通過調(diào)用RdPHYReg()函數(shù),讀取Basic Status Register的值,并判斷Link位。Ether_moniter線程流程如圖3所示。
對(duì)于設(shè)計(jì)方案1來講,當(dāng)檢測(cè)到需要進(jìn)行網(wǎng)絡(luò)切換時(shí),需要停用當(dāng)前網(wǎng)卡初始化備用網(wǎng)絡(luò)LAN91C111并設(shè)定相同的IP地址以及MAC地址。對(duì)于方案2,則只需要通知CPLD將通道切換至備用的LAN8187接口。
4 冗余切換測(cè)試
用Visual C++6.0開發(fā)的簡(jiǎn)單的上位機(jī)測(cè)試程序,每隔1ms發(fā)送一個(gè)UDP數(shù)據(jù)報(bào),并給每個(gè)數(shù)據(jù)報(bào)編寫不同的序號(hào)。在BF537中編寫程序不斷接收上位機(jī)發(fā)來的數(shù)據(jù)報(bào),然后制造網(wǎng)絡(luò)通信故障,本文構(gòu)建的冗余網(wǎng)絡(luò)將會(huì)自動(dòng)切換到備用通道繼續(xù)接收上位機(jī)的數(shù)據(jù)報(bào),最后通過檢測(cè)接收到數(shù)據(jù)報(bào)的序號(hào)來確定冗余切換所消耗的時(shí)間。分別對(duì)兩種方案所構(gòu)建的冗余網(wǎng)絡(luò)的切換進(jìn)行測(cè)試,結(jié)果如表2所示。
從實(shí)驗(yàn)結(jié)果可以看出方案2具有快速切換的優(yōu)點(diǎn),丟包率低;方案l平均丟包數(shù)遠(yuǎn)遠(yuǎn)大于方案2,并且切換時(shí)間長(zhǎng)。
5 結(jié)束語
本文提出了兩種基于BF537構(gòu)建雙冗余以太網(wǎng)的方案,分別論述了其原理、器件選擇、連接方法,并做出軟件設(shè)計(jì)。最后經(jīng)過測(cè)試,方案2的切換效果和時(shí)間非常理想,最終在實(shí)際項(xiàng)目中得到了應(yīng)用。
評(píng)論