張慶輝,馬延立
(河南工業(yè)大學(xué) 信息科學(xué)與工程學(xué)院,鄭州 450001)
隨著以太網(wǎng)技術(shù)的普及和發(fā)展,基于以太網(wǎng)的應(yīng)用接口設(shè)備也迅速普及到醫(yī)療設(shè)備、工廠電力系統(tǒng)等領(lǐng)域。嵌入式以太網(wǎng)系統(tǒng)不但可以通過Internet將通信距離無限擴(kuò)大,使得大量數(shù)據(jù)的快速傳輸成為可能,還可以實現(xiàn)測控系統(tǒng)間的數(shù)據(jù)交換,為智能化、模塊化的嵌入式設(shè)備的實現(xiàn)提供了一種新途徑。然而,嵌入式以太網(wǎng)接口設(shè)計的核心器件是網(wǎng)絡(luò)控制芯片,其性能優(yōu)劣直接影響網(wǎng)絡(luò)通信的效率。
本文采用基于32位Cortex-M3內(nèi)核的STM32F103VET6微處理器和高性能的以太網(wǎng)控制芯片ENC28J60實現(xiàn)高性能、高可靠性的嵌入式以太網(wǎng)通信接口設(shè)計,其系統(tǒng)各功能模塊容易擴(kuò)展和升級。
STM32F103VET6是32位Cortex-M3內(nèi)核的新型處理器。它具有更多片內(nèi)RAM和外設(shè),其出色的性能和豐富的資源幾乎不需要擴(kuò)展外圍電路就能滿足一般的設(shè)計要求,硬件設(shè)計大為簡化,且執(zhí)行速度和內(nèi)存容量完全滿足主控模塊的多任務(wù)實時應(yīng)用。
ENC28J60是Microchip公司推出的28引腳獨立以太網(wǎng)控制芯片,可為嵌入式應(yīng)用提供低引腳數(shù)、低成本且高效易用的遠(yuǎn)程通信解決方案。ENC28J60采用業(yè)界標(biāo)準(zhǔn)的SPI串行接口,只需4條連線即可與主控單片機(jī)連接。ENC28J60以太網(wǎng)控制器的主要功能包括:
① 符合IEEE 802.3標(biāo)準(zhǔn)。內(nèi)置10Mbps以太網(wǎng)物理層器件(PHY)及媒介接入控制器(MAC),可按業(yè)界標(biāo)準(zhǔn)的以太網(wǎng)協(xié)議可靠地收發(fā)信息包數(shù)據(jù)。
② 可編程過濾功能。特殊的過濾器包括可編程模式匹配過濾器,可自動評價、接收或拒收Magic Packe的單播、多播或廣播信息包,以減輕主控單片機(jī)的處理負(fù)荷。
③ 最高速度可達(dá)10MB/s的SPI接口。
④ 可編程8KB雙端口SRAM緩沖器,以高效的方式進(jìn)行信息包的存儲、檢索和修改,以減輕主控單片機(jī)的內(nèi)存負(fù)荷。該緩沖器提供了靈活可靠的數(shù)據(jù)管理機(jī)制[1]。
ENC28J60可以通過SPI接口方便地和微處理器連接而構(gòu)成嵌入式以太網(wǎng)通信接口,對于沒有SPI接口的微處理器也可以通過I/O口模擬SPI的方法實現(xiàn)。STM32F103VET6內(nèi)部含有3個SPI接口,可以很方便地實現(xiàn)與ENC28J60的連接。STM32F103VET6SPI引腳連接圖如圖1所示。
圖1 STM32F103VET6SPI引腳連接圖
ENC28J60具有上電復(fù)位功能,一旦VDD上升到某個門限值后,就會在片內(nèi)產(chǎn)生上電復(fù)位脈沖,當(dāng)VDD上升到足夠器件工作電壓時,器件會以初始化狀態(tài)啟動,在器件正常工作期間,RESET引腳的內(nèi)部弱上拉將會使引腳保持邏輯高電平,在系統(tǒng)上電復(fù)位后不應(yīng)立即發(fā)送數(shù)據(jù)或訪問到MAC、MII或PHY寄存器,至少應(yīng)延遲10ms。通過查詢ENC28J60狀態(tài)寄存器ESTAT中的CLKRDY位來確定系統(tǒng)是否準(zhǔn)備好是不可靠的,最好將復(fù)位引腳連接到單片機(jī)的引腳,通過軟件延時來使系統(tǒng)可靠復(fù)位[2]。
ENC28J60內(nèi)部集成了2.5V穩(wěn)壓器,要使之工作穩(wěn)定,需要在VCAP引腳與地之間外接一個10μF電容;由于ENC28J60內(nèi)部穩(wěn)壓器無法驅(qū)動外部負(fù)載,所以電源引腳必須與同一個3.3V電源相連,并且在每個電源引腳與地之間都應(yīng)連接一個0.1μF的磁片電容,而且電容應(yīng)盡可能靠近引腳。
硬件電路連接如圖2所示。根據(jù)ENC28J60的工作頻率要求,需在OSC1和OSC2引腳間連接25MHz晶振及接地電容。ENC28J60的內(nèi)部模擬電路需要在RBIAS引腳與地之間外接一個1kΩ的電阻。以太網(wǎng)變壓器在實現(xiàn)以太網(wǎng)接口操作時是不可缺少的,在差分發(fā)送引腳(TPOUT+/TPOUT-)上,需要外接一個帶有中心抽頭的1∶1脈沖變壓器[3]。變壓器應(yīng)具有2kV以上的電壓隔離性能,以防止靜電干擾。本設(shè)計采用的是集成以太網(wǎng)隔離變壓器RJ45插座HR911105A。
STM32(即STM32F10系列芯片,包括了本文所用的芯片)標(biāo)準(zhǔn)外設(shè)庫也稱固件函數(shù)庫或固件庫,是一個固件函數(shù)包,它由程序、數(shù)據(jù)結(jié)構(gòu)和宏組成,包括了微處理器所有外設(shè)的性能特征。該函數(shù)庫還包括每一個外設(shè)的驅(qū)動描述和應(yīng)用實例,為開發(fā)者訪問底層硬件提供了一個中間API,通過使用固件函數(shù)庫,無需深入掌握底層硬件細(xì)節(jié),就可以輕松應(yīng)用每一個外設(shè)。因此,使用固件函數(shù)庫可以大大減少用戶的程序編寫時間,進(jìn)而降低開發(fā)成本。該固件庫中的每個外設(shè)驅(qū)動都由一組函數(shù)組成,這組函數(shù)覆蓋了該外設(shè)的所有功能,并且每個器件的開發(fā)都有一個通用API驅(qū)動,API對該驅(qū)動程序的結(jié)構(gòu)、函數(shù)和參數(shù)名稱都進(jìn)行了標(biāo)準(zhǔn)化[4]。
在實際開發(fā)過程中,根據(jù)應(yīng)用程序的需要,可以采取2種方法使用標(biāo)準(zhǔn)外設(shè)庫:
① 使用外設(shè)驅(qū)動:這時應(yīng)用程序開發(fā)基于外設(shè)驅(qū)動的 API。用戶只需要配置文件“stm32f10x_conf.h”,并使用相應(yīng)的文件“stm32f10x_ppp.h/.c”即可。
② 不使用外設(shè)驅(qū)動:這時應(yīng)用程序開發(fā)基于外設(shè)的寄存器結(jié)構(gòu)和位定義文件。
使用標(biāo)準(zhǔn)外設(shè)庫進(jìn)行開發(fā)可以極大地減少軟件開發(fā)的工作量,也是目前嵌入式系統(tǒng)開發(fā)的一個趨勢。
圖2 硬件電路連接圖
ENC28J60控制寄存器中最基本和重要的5個寄存器是:EIE、EIR、ESTAT、ECON2和ECON1。
EIE:以太網(wǎng)中斷使能控制寄存器,分為總中斷使能和各部分使能控制。
EIR:以太網(wǎng)中斷標(biāo)志寄存器,在接收和發(fā)送數(shù)據(jù)包時根據(jù)不同的標(biāo)志位進(jìn)入不同的執(zhí)行程序。
ESTAT:以太網(wǎng)狀態(tài)寄存器,反映以太網(wǎng)當(dāng)前的數(shù)據(jù)碰撞、忙信息、錯誤信息、時鐘狀態(tài)等信息。
ECON2:以太網(wǎng)輔助控制寄存器,設(shè)置數(shù)據(jù)指針、芯片節(jié)能等。
ECON1:以太網(wǎng)主控制寄存器,這個是芯片最常用的寄存器,主要用來設(shè)置不同層的寄存器空間[5]。
在使用ENC28J60發(fā)送和接收數(shù)據(jù)包時,必須對器件進(jìn)行初始化設(shè)置。根據(jù)不同的應(yīng)用,一些配置選項可能需要更改。ENC28J60的初始化主要是對其接收和發(fā)送緩沖器、接收過濾器、晶振啟動時間、MAC寄存器、PHY寄存器進(jìn)行設(shè)置。初始化ENC28J60之前,先關(guān)閉單片機(jī)的中斷輸入,對引腳給定一個持續(xù)的低電平復(fù)位信號,然后對相應(yīng)的寄存器進(jìn)行設(shè)置。設(shè)置完成所有需要的寄存器后,判斷以太網(wǎng)狀態(tài)中的時鐘啟動標(biāo)志位是否置位,然后開中斷。對于以太網(wǎng)傳輸部分來說,主要有兩個作用:一是對要發(fā)送的數(shù)據(jù)按照以太網(wǎng)數(shù)據(jù)幀格式進(jìn)行封裝并發(fā)送;二是對接收的以太網(wǎng)數(shù)據(jù)幀進(jìn)行解包,供應(yīng)用程序使用[6]。
通過向STM32F103VET6的SPI緩沖器寫入相應(yīng)格式的命令代碼,可實現(xiàn)與ENC28J60的數(shù)據(jù)通信。需要指出的是,對PHY寄存器不能通過SPI口直接讀寫,而是通過特殊的MII寄存器來完成讀寫操作。
ENC28J60與STM32F103VET6的連接是通過SPI實現(xiàn)的,STM32F103VET6可通過SPI接口發(fā)送命令,訪問ENC28J60的相關(guān)寄存器來完成相應(yīng)的操作。下面給出SPI讀/寫數(shù)據(jù),以及ENC28J60接收/發(fā)送數(shù)據(jù)包的部分源代碼:
ENC28J60內(nèi)的MAC在發(fā)送時會自動生成前導(dǎo)符和幀起始定界符。此外,MAC可根據(jù)配置生成填充和CRC字段。但主控制器必須生成所有其他幀字段,并將它們寫入緩沖存儲器,以待發(fā)送。ENC28J60發(fā)送數(shù)據(jù)包主要源代碼如下:
ENC28J60收到一個完整的以太網(wǎng)數(shù)據(jù)包后,會向CPU發(fā)出中斷請求,CPU響應(yīng)ENC28J60的中斷申請后,系統(tǒng)將進(jìn)入中斷服務(wù)程序并開始接收數(shù)據(jù)。ENC28J60接收數(shù)據(jù)包主要源代碼如下:
由ENC28J60構(gòu)成的嵌入式以太網(wǎng)接口電路25 連接簡單,功能強(qiáng)大,與目前大多數(shù)需要并行數(shù)據(jù)和地址總線的以太網(wǎng)相比,不需要外擴(kuò)地址和數(shù)據(jù)總線,并且完全符合未來工業(yè)以太網(wǎng)的發(fā)展趨勢。此外,本設(shè)計應(yīng)用在智能儀表中,可使現(xiàn)場設(shè)備方便地接入以太網(wǎng),以便更好地實現(xiàn)管控一體化;克服了市場上已有以太網(wǎng)控制器封裝引腳多的缺點,簡化了設(shè)計,減小了占板空間。該接口電路實現(xiàn)方便,可以廣泛應(yīng)用于控制領(lǐng)域。
[1] 祁樹勝.SPI接口以太網(wǎng)控制器ENC28J60及其應(yīng)用[J].微計算機(jī)信息,2006,8(2):266-268.
[2] 王廷堯.以太網(wǎng)技術(shù)與應(yīng)用[M].北京:人民郵電出版社,2005.
[3] 陳磊,馮冬芹,金建祥,等.以太網(wǎng)在工業(yè)應(yīng)用中的實時特性研究[J].浙江大學(xué)學(xué)報:工學(xué)版,2004,38(6):29-31.
[4] 李寧.基于 MDK的STM32處理器開發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2008.
[5] 張瑞瑞,馬晨普.一種精簡可靠的低成本嵌入式以太網(wǎng)接口設(shè)計[J].電子產(chǎn)品世界,2006(12):66-68.
[6] 張偉業(yè),黃云龍,陳國定.基于ENC28J60以太網(wǎng)通信接口的設(shè)計與實現(xiàn)[J].機(jī)電工程,2008,25(1):28-30.