1 引言
目前,以太網(wǎng)(ethernet)協(xié)議已經(jīng)非常廣泛地應(yīng)用于各種計(jì)算機(jī)網(wǎng)絡(luò),,如辦公局域網(wǎng),、工業(yè)控制網(wǎng)絡(luò)等場(chǎng)合,并且還不斷地發(fā)展,?;谝蕴W(wǎng)的新技術(shù)和聯(lián)網(wǎng)設(shè)備不斷出現(xiàn),以太網(wǎng)已經(jīng)成為事實(shí)上最常用的局域網(wǎng)絡(luò)標(biāo)準(zhǔn)之一,。但是,,基于以太網(wǎng)的嵌入式系統(tǒng)目前并不是很多。其原因除了嵌入式系統(tǒng)本身運(yùn)行速度較慢,、資源較少且不足以實(shí)現(xiàn)以太網(wǎng)的各種協(xié)議外,,更重要是設(shè)計(jì)以太網(wǎng)的接口及協(xié)議相對(duì)比較復(fù)雜,使人望而卻步,。本文將研討基于c8051f系列單片機(jī)系統(tǒng)的嵌入式系統(tǒng)與10mbps以太網(wǎng)控制器芯片rtl8019as的接口電路實(shí)現(xiàn)及編程方法,。
2 嵌入式以太網(wǎng)接口分析
2.1 接口組成
8位mcu的嵌入式設(shè)備通過(guò)以太網(wǎng)接口,將8位mcu采集的數(shù)據(jù)信息,,傳送到遠(yuǎn)程服務(wù)器,。在這個(gè)過(guò)程中需要處理網(wǎng)絡(luò)接口,、接收數(shù)據(jù)的分析、發(fā)送數(shù)據(jù)段的封裝等問(wèn)題,。
以10baset以太網(wǎng)為例,,發(fā)送數(shù)據(jù)時(shí)應(yīng)該做的工作是首先對(duì)需要發(fā)送的數(shù)據(jù)進(jìn)行曼切斯特編碼,然后對(duì)編碼后的數(shù)據(jù)進(jìn)行預(yù)處理,,使其發(fā)送的數(shù)據(jù)適合10baset的以太網(wǎng)傳輸,,最后把處理好的數(shù)據(jù)以適當(dāng)?shù)乃俣劝l(fā)送到以太網(wǎng)。同時(shí)為了保證數(shù)據(jù)的有效性,,系統(tǒng)還應(yīng)具有沖突檢測(cè)和重發(fā)功能,。在這個(gè)過(guò)程中,直接用8位mcu來(lái)實(shí)現(xiàn)該功能非常困難,。解決的方法是用專門的網(wǎng)絡(luò)接口芯片nic網(wǎng)絡(luò)接口卡(nic-network inteRFace card)來(lái)實(shí)現(xiàn),,這類芯片遵循ieee802.3所規(guī)定的csma/cd協(xié)議,除了提供物理鏈路所需的電氣性能外,,還提供曼切斯特編碼,、沖突檢測(cè)和重發(fā)功能,可以用很少的外圍電路一起完成數(shù)據(jù)的發(fā)送和接收功能,。這樣,,8位mcu只需要nic芯片提供初始配置和數(shù)據(jù)接口,這對(duì)于8位mcu是沒(méi)有問(wèn)題的,?;谝陨系姆治觯?位mcu的嵌入式設(shè)備以太網(wǎng)接口部分構(gòu)成如圖1所示:
圖1 嵌入式設(shè)備以太網(wǎng)接口組成
2.2 以太網(wǎng)控制芯片——rtl8019as
?。?) rtl8019as的主要性能
符合以太網(wǎng)ii與ieee802.3(10base5,、10base2、10baset)標(biāo)準(zhǔn);
全雙工,,收發(fā)可同時(shí)達(dá)到10mbit/s的速率;
內(nèi)置16kb的sram,,用于收發(fā)緩沖,降低對(duì)主處理器的速度要求;
支持8/16位數(shù)據(jù)總線,,8個(gè)中斷申請(qǐng)線以及16個(gè)i/o基地址選擇;
支持utp,、aui、bnc自動(dòng)檢測(cè),,還支持對(duì)10baset拓?fù)浣Y(jié)構(gòu)的自動(dòng)極性修正;
允許4個(gè)診斷l(xiāng)ed引腳可編程輸出;
采用cmos工藝,,功耗低。單一電源5v供電,。
?。?) rtl8019as的內(nèi)部結(jié)構(gòu)
rtl8019as芯片內(nèi)部包含遠(yuǎn)程dma(直接存儲(chǔ)器存?。┙涌?、本地dma接口,、mac(介質(zhì)訪問(wèn)控制)邏輯、數(shù)據(jù)編碼解碼邏輯和其它接口,。這里的dma與平時(shí)所說(shuō)的dma有些不同:rtl8019as芯片的本地dma操作是由控制器本身完成;而遠(yuǎn)程dma并不是在沒(méi)有主處理器的參與下數(shù)據(jù)能自動(dòng)移到主處理器的內(nèi)存中,,它指主處理器給出起址和長(zhǎng)度就可以讀寫芯片的ram緩沖區(qū),每操作一次ram地址自動(dòng)加1,,而普通ram操作每次要先發(fā)地址再處理數(shù)據(jù),,速度較慢。內(nèi)部結(jié)構(gòu)如圖2所示,。
圖2 內(nèi)部結(jié)構(gòu)圖
3 嵌入式設(shè)備網(wǎng)絡(luò)互連設(shè)計(jì)方案
3.1 電路原理設(shè)計(jì)
c8051f020是美國(guó)cygnal公司推出的一種混合信號(hào)soc型8位單片機(jī),,它是一種完全集成的混合信號(hào)系統(tǒng)級(jí)芯片,具有與8051兼容的微控制器內(nèi)核,,與mcs-51指令集完全兼容,。內(nèi)核采用流水線結(jié)構(gòu),機(jī)器周期由標(biāo)準(zhǔn)的12個(gè)系統(tǒng)時(shí)鐘周期降為1個(gè)系統(tǒng)時(shí)鐘周期,,70%指令的執(zhí)行時(shí)間為1個(gè)或2個(gè)系統(tǒng)時(shí)鐘周期,,處理能力大大提高,峰值性能可達(dá)25mips,。
同時(shí),,除具有標(biāo)準(zhǔn)8051的數(shù)字外設(shè)部件外,c8051- f020片內(nèi)還集成了構(gòu)成一個(gè)單片機(jī)數(shù)據(jù)采集,、控制系統(tǒng)所需要的幾乎所有模擬,、數(shù)字外設(shè)及其他功能部件。這些外設(shè)或功能部件包括:用于多種模擬信號(hào)的模擬多路選擇器,、真正12位轉(zhuǎn)換精度的ADC,,還有能滿足特殊功能所需的smbus(i2c兼容)、uart,、spi,、多個(gè)多功能計(jì)數(shù)器/定時(shí)器、以及看門狗定時(shí)器(wdt)和電源監(jiān)視器等數(shù)字外設(shè),。
c8051f020具有100腳的tqfp封裝,,功耗低,供電電壓為2.7~3.3v,,全部i/o,、rst、jtag引腳均耐5v電壓,。其mcu具有p0~p7共64個(gè)通用i/o端口,,每個(gè)端口引腳都可以被配置為推挽輸出或漏級(jí)開(kāi)路輸出。對(duì)于rtl8019as,由于其工作電壓是5v,,而c8051f020的工作電壓是3.3v,,所以要c8051f020的輸出能更好地驅(qū)動(dòng)5v輸入的oled,需要對(duì)系統(tǒng)進(jìn)行額外配置,。除了將對(duì)應(yīng)端口的輸出方式設(shè)置為“漏極開(kāi)路”外,,還應(yīng)在電路上將每個(gè)端口通過(guò)一個(gè)上拉電阻接到5v電源,這樣可以保證c8051f020的邏輯“1”輸出能夠被提升到5v,。
單片機(jī)采用c8051f020芯片,,以查詢工作方式不斷讀取rtl8019as狀態(tài)寄存器。以遠(yuǎn)程dma方式發(fā)送或讀取rtl8019as的數(shù)據(jù),。詳見(jiàn)圖3,。
圖3
由于網(wǎng)絡(luò)控制器具有 ethernet(ieee802.3)協(xié)議處理功能,系統(tǒng)便可直接rj45連接到以太網(wǎng)(再通過(guò)以太網(wǎng)接入 internet),。本文所設(shè)計(jì)的系統(tǒng)中選用的rj45連接器為lf1s022,,它已經(jīng)具有電平轉(zhuǎn)換功能,簡(jiǎn)化了 pcb設(shè)計(jì),。值得注意的是,,設(shè)計(jì)pcb時(shí),rj45連接器不能與cpu和網(wǎng)絡(luò)芯片相距太遠(yuǎn),,以免對(duì)數(shù)據(jù)傳輸造成影響,。
rtl8019as的tpin+(59腳), tpin-(58腳)腳是tp 的一對(duì)輸入腳,能以10mbits/s 的速率從雙絞線接收差分曼徹斯特編碼的數(shù)據(jù),。tpout+(45腳),、tpout-(46腳)是一對(duì)曼徹斯特編碼的差分tp輸出信號(hào)。為了防止雙絞線超載,,該輸出信號(hào)會(huì)被提前中斷,,這樣可以減少擁塞。連接時(shí),,這四個(gè)管腳分別接到 lf1s022的7,、6、5,、4腳,。連接器的其他管腳都通過(guò)一個(gè)電容與地連接。最后,,還必須在50,、51腳之間接入一個(gè)20mhz的晶體振蕩器。
圖3中擴(kuò)展的rj45口接入互聯(lián)網(wǎng),,rtl8019as通過(guò)本地dma方式將接收到的數(shù)據(jù)送到片內(nèi)sram,,或者從片內(nèi)sram讀取數(shù)據(jù)從rj45口發(fā)送出去,。
網(wǎng)卡的復(fù)位信號(hào)rstdrv由單片機(jī)的p5.2產(chǎn)生,rstdrv為高電平有效,,至少需要800ns的寬度,。由p5.2引腳產(chǎn)生一個(gè)1μs以上的高電平就可以使rtl- 8019as芯片復(fù)位。
rstdrv從高電平到低電平之后要等多久,,單片機(jī)才可以對(duì)網(wǎng)卡進(jìn)行操作?復(fù)位的過(guò)程將執(zhí)行一些操作,,比如將內(nèi)部寄存器初始化等,。這些至少需要2ms的時(shí)間。為確保完全復(fù)位,,應(yīng)該等待更久的時(shí)間之后才對(duì)網(wǎng)卡操作,,比如100ms之后才對(duì)它操作。
對(duì)rstdrv可以接單片機(jī)的一個(gè)i/o口線進(jìn)行網(wǎng)卡的復(fù)位,,也可以直接將rstdrv跟單片機(jī)的reset引腳并聯(lián),,單片機(jī)復(fù)位的時(shí)候,網(wǎng)卡也復(fù)位,,以減少一個(gè)單片機(jī)的引腳使用,。
3.2 網(wǎng)卡的初始化
網(wǎng)卡在能夠正常工作以前,必須先對(duì)其進(jìn)行初始化,,一般帶有操作系統(tǒng)的計(jì)算機(jī)上,,網(wǎng)卡的初始化由其驅(qū)動(dòng)程序完成。此例中由于c8051f020單片機(jī)是全裸機(jī)(不含驅(qū)動(dòng)程序),,不僅需要用戶自己完成網(wǎng)卡的初始化,,還需要用戶自己設(shè)置網(wǎng)卡的mac(介質(zhì)訪問(wèn)控制)地址以及對(duì)網(wǎng)卡進(jìn)行讀寫訪問(wèn)。
初始化需要設(shè)置頁(yè)0與頁(yè)1的相關(guān)寄存器,,頁(yè)2的寄存器是只讀的,,不可以設(shè)置,頁(yè)3的寄存器不是ne2000兼容的,,不用設(shè)置,。需初始化的寄存器包括cr、dcr,、pbcr,、pstart、pstop,、isr,、imr、par0~par5,、mar0~mar7,、curr,、tcr、rcr等寄存器,。初始化函數(shù)主要要完成以下諸項(xiàng)工作,。
(1) 調(diào)用復(fù)位子程序隊(duì)rtl8019as進(jìn)行復(fù)位,。有兩種復(fù)位方式:一是硬件復(fù)位,,通過(guò)拉高拉低reset引腳達(dá)到復(fù)位rtl8019as的目的;二是軟件復(fù)位,向if端口讀寫數(shù)據(jù)從而使rtl8019as復(fù)位,。
?。?) 向命令寄存器cr寫入0x21h使rtl8019as處于停止模式,設(shè)置寄存器,。
?。?) 設(shè)置數(shù)據(jù)配置寄存器dcr為使用fifo緩存、普通模式,、8位數(shù)據(jù)傳輸模式,,字節(jié)順序?yàn)楦呶蛔止?jié)在前,低位字節(jié)在后,。設(shè)置rbcr0,、rbcr1寄存器為0,即讀取ram字節(jié)數(shù),。
?。?) 設(shè)置接收和發(fā)送緩沖區(qū)起止地址。pstart接收緩沖區(qū)的起始頁(yè)地址0x46;pstop接收緩沖區(qū)的結(jié)束頁(yè)地址0x80;bnry指向最后一個(gè)已經(jīng)讀取頁(yè)的指針0x46;tpsr發(fā)送頁(yè)的起始地址0x40;curr芯片寫內(nèi)存指針,,它指向當(dāng)前正在寫的頁(yè)的下一個(gè)頁(yè),,即初始化時(shí)指向0x47。
?。?) 設(shè)置rcr接收配置寄存器為0xcc,,使用接收緩沖區(qū),僅接收自己的地址的數(shù)據(jù)包(以及廣播地址數(shù)據(jù)包)和多點(diǎn)播送地址包,,小于64字節(jié)的包丟棄,,校驗(yàn)錯(cuò)的數(shù)據(jù)包不接收。設(shè)置tcr發(fā)送配置寄存器為0xe0,,啟用crc自動(dòng)生成和自動(dòng)校驗(yàn),,工作在正常模式。
?。?) 設(shè)置mar0~mar8為0,,清除多播地址寄存器;設(shè)置isr為0xff,清除中斷狀態(tài)寄存器;設(shè)置中斷屏蔽寄存器imr為0,,屏蔽所有中斷請(qǐng)求,。
?。?) 將物理地址寫入par0~5物理地址寄存器。
?。?) 最后設(shè)置tcr發(fā)送配置寄存器為0xe0;設(shè)置命令寄存器cr為0x22,,芯片進(jìn)入正常工作狀態(tài),rtl8019as初始化完成,。
初始化時(shí),,必需指明嵌入式設(shè)備的48位硬件地址和廣播地址,并正確設(shè)置它的ip地址,、子網(wǎng)掩碼和默認(rèn)網(wǎng)關(guān),。工業(yè)控制一般都在一個(gè)同級(jí)局域網(wǎng)內(nèi)部進(jìn)行,因此可以直接令網(wǎng)關(guān)的ip地址為0,。其主控制流程如圖4所示。
4 結(jié)束語(yǔ)
本文分析了嵌入式設(shè)備與以太網(wǎng)接口的組成,,簡(jiǎn)要介紹了rtl8019as和c8019f芯片,,并給出了嵌入式mcu與以太網(wǎng)控制芯片的硬件連接及其軟件設(shè)計(jì)。該設(shè)計(jì)以數(shù)據(jù)采集為例的,,在工業(yè)生產(chǎn)中有很大的現(xiàn)實(shí)意義,。