(河南思維自動化設(shè)備股份有限公司,鄭州 450001)
隨著嵌入式系統(tǒng)的進(jìn)一步發(fā)展,以及對通信速率的要求不斷提高,以太網(wǎng)通信在各種工業(yè)領(lǐng)域的應(yīng)用越來越廣。目前,嵌入式工業(yè)控制領(lǐng)域使用最廣泛的是基于ARM內(nèi)核的微控制器(MCU)芯片,其在所有微控制器中占有率超過70%。從之前的ARM7、ARM9,到現(xiàn)在的 ARM Cortex-M3、M4,絕大多數(shù)的ARM內(nèi)核微控制器最多內(nèi)部集成1個以太網(wǎng)控制器,當(dāng)系統(tǒng)需要2個以上以太網(wǎng)口時無法滿足設(shè)計需求。因此,本文提出了使用最新的ARM Cortex-M4內(nèi)核微控制器和并行網(wǎng)口芯片ENC624J600來實現(xiàn)雙10/100 Mb/s的以太網(wǎng)口擴(kuò)展。
本系統(tǒng)微控制器選用意法半導(dǎo)體(ST)公司的STM32F437IIT6,該芯片是以32位Cortex-M4為內(nèi)核,具有高達(dá)168 MHz的工作頻率,內(nèi)置高速存儲器(2 MB FLASH,256 KB RAM)和豐富的外設(shè)接口,并具有M4新增加的浮點運(yùn)算單元(FPU)[1]。
以太網(wǎng)控制器選用美國微芯(Microchip)公司的ENC624J600,該芯片符合IEEE 802.3中以太網(wǎng)的全部規(guī)范,具有獨立的MAC和10/100 Mb/s PHY控制器。ENC624J600(64引腳)與MCU之間通過8位/16位復(fù)用并行接口連接,具有24 KB可配置的發(fā)送/接收數(shù)據(jù)緩沖區(qū)。該芯片通過11種不同的接收過濾器對傳入數(shù)據(jù)包進(jìn)行過濾,并且還提供了16位寬的內(nèi)部DMA,以實現(xiàn)快速數(shù)據(jù)吞吐及硬件IP校驗和計算支持[2]。
本系統(tǒng)采用STM32F437的FSMC接口與2片ENC624J600相連,實現(xiàn)雙網(wǎng)口擴(kuò)展。FSMC是靈活的靜態(tài)存儲控制器,STM32F437芯片可利用FSMC控制NOR FLASH、PSRAM和 NAND FLASH存儲芯片。這里,使用FSMC的NOR/PSRAM存儲器、控制器訪問ENC624J600網(wǎng)口芯片。NOR/PSRAM存儲器地址為60000000h~6FFFFFFFh共4*64 MB的地址空間[3]。因此,可連接多達(dá)4個NOR/PSRAM類型的存儲器器件。本系統(tǒng)中2片網(wǎng)口芯片占用其中的2路,另外2路擴(kuò)展了2片NORFLASH芯片用以掉電保存重要的網(wǎng)絡(luò)數(shù)據(jù)。
STM32F437與2片ENC624J600的硬件結(jié)構(gòu)如圖1所示。FSMC數(shù)據(jù)線D0~D15與ENC624J600雙向數(shù)據(jù)線 D0~D15相連,F(xiàn)SMC地址線 A0~A13與ENC624J600地址輸入線A0~A13相連,網(wǎng)口芯片的地址線A14接地。由于ENC624J600的讀、寫及片選控制管腳的有效電平與ST微控制器FSMC控制管腳的有效電平是相反的,因此中間需加一片反相器(如SN74LVC04A)進(jìn)行反向。其中,讀寫控制管腳FSMC_NOE和FSMC_NWE經(jīng)過反向后同時與2片ENC624J600的NET_RD和NET_WR相連,片選控制管腳FSMC_NE3經(jīng)反向后與第一片ENC624J600芯片的片選NET1_CS相連,F(xiàn)SMC_NE4經(jīng)反向后與第二片ENC624J600芯片的片選NET2_CS相連。另外,2個網(wǎng)口芯片的中斷管腳NET1_INT和NET2_INT分別與微控制器的2個I/O相連。
圖1 STM32F437與ENC624J600硬件結(jié)構(gòu)Fig.1 Hardware structure between STM32F437 and ENC624J600
本設(shè)計的軟件主要有微控制器接口配置和網(wǎng)絡(luò)芯片驅(qū)動程序兩部分。對STM32F437的接口配置包括對其FSMC總線初始化及EXTI外部中斷初始化,ENC624J600的驅(qū)動程序主要包括對其進(jìn)行初始化及數(shù)據(jù)收發(fā)處理。
對微控制器STM32F437的接口配置主要包括FSMC初始化和EXTI外部中斷初始化。FSMC初始化使用了ST的庫函數(shù),需要對FSMC_NORSRAM TimingInitTypeDef和FSMC_NORSRAMInitTypeDef類型的結(jié)構(gòu)體進(jìn)行配置,F(xiàn)SMC初始化相關(guān)代碼如下:
EXTI作為STM32F437的外部中斷/事件控制器,負(fù)責(zé)管理映射到GPIO引腳上的中斷輸入,并最終映射到NVIC的相應(yīng)通道上[4]。這里配置2路網(wǎng)口芯片中斷管腳連到微控制器的2個GPIO為下降沿觸發(fā)中斷。
ENC624J600驅(qū)動程序包括芯片初始化及數(shù)據(jù)收發(fā)處理兩部分。芯片初始化過程包括復(fù)位以及對控制寄存器、PHY寄存器和以太網(wǎng)緩沖器進(jìn)行初始化[5],初始化流程如圖2所示。
圖2 網(wǎng)口芯片初始化流程Fig.2 Flow chart of network interface chip initialization
ENC624J600接收數(shù)據(jù)使用中斷方式,當(dāng)網(wǎng)口收到完整的一幀數(shù)據(jù)包后,會向微控制器發(fā)送中斷,微控制器響應(yīng)ENC624J600的中斷請求,系統(tǒng)進(jìn)入中斷程序并開始接收數(shù)據(jù)。當(dāng)ENC624J600發(fā)送數(shù)據(jù)時,需先確定發(fā)送數(shù)據(jù)起始指針ETXST和發(fā)送緩沖區(qū)長度指針ETXLEN,再使能發(fā)送控制寄存器。這里需要注意的是ENC624J600的收發(fā)緩沖區(qū)空間可以在0000h~5FFFh共24 KB地址空間靈活配置,因此在芯片初始化時就應(yīng)配置好收發(fā)緩沖區(qū)的地址范圍。
使用STM32F437和2片ENC624J600的雙網(wǎng)口擴(kuò)展技術(shù),解決了工業(yè)控制現(xiàn)場多路獨立網(wǎng)口通信的需求,并運(yùn)用到實際產(chǎn)品中去。經(jīng)過連續(xù)24 h以上工作測試,硬件和驅(qū)動程序性能穩(wěn)定,在10 Mb/s、100 Mb/s均能正常工作,實際通信速率可穩(wěn)定達(dá)到5 MB/s以上,取得了系統(tǒng)設(shè)計的預(yù)期效果。
[1]STM32F405xx/07xx,STM32F415xx/17xx,STM32F42xxx and STM32 F43xxx advanced ARM-based 32-bit MCUs reference manual[Z].STMicroelectronics,2013.
[2]ENC424J600/624J600 data sheet[Z].Microchip,2009.
[3]湯莉莉,黃偉.基于STM32的FSMC接口驅(qū)動TFT彩屏設(shè)計[J].現(xiàn)代電子技術(shù),2013,36(20):139-141.
[4] 李寧.基于MDK的STM32處理器開發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2008.
[5]李陽,吳成富,鄧紅德.基于DSP和ENC28J60的多串口與以太網(wǎng)數(shù)據(jù)傳輸系統(tǒng)設(shè)計[J].測控技術(shù),2011,30(12):61-65.