于海波,付江波,李金濤
(北京中電科電子裝備有限公司,北京100176)
隨著科技的發(fā)展,工業(yè)生產(chǎn)中的數(shù)據(jù)采集與控制設(shè)備逐步走向網(wǎng)絡(luò)化。以單片機(jī)為核心的智能檢測(cè)及控制系統(tǒng)因其具有低廉的價(jià)格,而被廣泛的應(yīng)用。應(yīng)用單片機(jī)實(shí)現(xiàn)網(wǎng)絡(luò)通信有多種解決方案,一些以太網(wǎng)接口設(shè)計(jì)方案是通過(guò)MCU擴(kuò)展以太網(wǎng)控制器來(lái)實(shí)現(xiàn)的,這種設(shè)計(jì)方案應(yīng)用起來(lái)較為困難,硬件電路設(shè)計(jì)復(fù)雜,單片機(jī)系統(tǒng)開(kāi)銷較大,而且其整體性能不穩(wěn)定。而另外一些采用集成以太網(wǎng)MAC層和物理層16位單片機(jī)MC9612NE64來(lái)設(shè)計(jì)通過(guò),如RTL8019AS,CS8900等的以太網(wǎng)控制器,它們的封裝均超過(guò)80個(gè)引腳,不僅結(jié)構(gòu)復(fù)雜,體積龐大,而且價(jià)格較貴,很難滿足智能檢測(cè)控機(jī)制系統(tǒng)的實(shí)際應(yīng)用要求。為了解決以上的不足,本文采用AVR系列單片機(jī)Atmega16與Microchip公司生產(chǎn)的以太網(wǎng)控制芯片ENC28J60來(lái)實(shí)現(xiàn)以太網(wǎng)模塊的設(shè)計(jì),為實(shí)現(xiàn)智能檢測(cè)及控制系統(tǒng)的網(wǎng)絡(luò)化提供良好的解決方案。
AVR系列單片機(jī)汲取PIC和8051單片機(jī)的優(yōu)點(diǎn)[1],采用了CMOS技術(shù)和RISC架構(gòu),實(shí)現(xiàn)高速低功耗及休眠等功能。AVR系列單片機(jī)集成了8051和PIC單片機(jī)的優(yōu)點(diǎn),具有多個(gè)固定中端向量地址入口,并帶有可設(shè)置的啟動(dòng)復(fù)位延時(shí)計(jì)數(shù)器。AVR系列單片機(jī)外圍資源較為豐富,帶有A/D采集模塊、SPI模塊、PWM模塊等。本文采用的是ATMEGA16,數(shù)據(jù)吞吐率高達(dá)16MISP/MHz。系統(tǒng)內(nèi)部具有16K字節(jié)可編程Flash,512字節(jié)EEPROM,1K字節(jié)SRAM,32個(gè)通用I/O口線,32個(gè)通用工作寄存器。
以太網(wǎng)芯片ENC28J60有28個(gè)引腳,硬件設(shè)計(jì)符合IEEE802.3標(biāo)準(zhǔn)。內(nèi)置10Mbps以太網(wǎng)物理層器件(PHY)及媒介接入控制器(MAC),可以和標(biāo)準(zhǔn)以太網(wǎng)可靠地進(jìn)行收發(fā)數(shù)據(jù)。它具有可編程填充和CRC自動(dòng)校驗(yàn)功能;具有可編程過(guò)濾功能,包括Microchip的可編程模式匹配過(guò)濾器;具有自動(dòng)評(píng)價(jià)、接收或拒絕單播、多播或廣播信息包的功能;其內(nèi)部具有8KB可編程雙端口SRAM緩沖器,從而實(shí)現(xiàn)了信息包的存儲(chǔ),基于上述功能ENC28J60可有效地減少了主控器內(nèi)存的負(fù)荷,ENC28J60的SPI接口通訊速度可達(dá)10 Mbps。
系統(tǒng)硬件設(shè)計(jì)如圖1所示,AVR單片機(jī)AT-mega16與ENC28J60通過(guò)SPI接口進(jìn)行數(shù)據(jù)傳輸,ATmega16與ENC28J60進(jìn)行SPI通信時(shí)需配制成主機(jī)模式,ENC28J60配置成從機(jī)模式。ENC28J60供電電壓為3.3 V,SPI的信號(hào)輸入引腳CS,SCK、SI以及 RESTE可承受5 V電壓,可以直接與單片機(jī)相連。而SO和INT只能承受3.3 V電平,可以使用74HCT08(與門),74ACT125(三態(tài)緩沖器)或其他帶有TTL電平輸入緩沖器的5 V CMOS芯片來(lái)提供必要的電平轉(zhuǎn)換,本文采用一個(gè)74HCT08(與門)實(shí)現(xiàn)信號(hào)的電平轉(zhuǎn)換。
圖1 硬件設(shè)計(jì)電路圖
系統(tǒng)軟件設(shè)計(jì)包括兩部分,系統(tǒng)軟件設(shè)計(jì)的層次結(jié)構(gòu)如圖2所示。
(1)單片機(jī)系統(tǒng)的初始化和ENC28J60驅(qū)動(dòng)程序的編寫。
該部分主要是對(duì)單片機(jī)的外圍控制寄存器進(jìn)行初始化,提供所需的應(yīng)用接口。這部重點(diǎn)在于對(duì)ENC28J60的硬件初始化及對(duì)其進(jìn)行讀寫的操作,表1列出ENC28J60的SPI指令命令代碼及格式。AVR單片機(jī)通過(guò)SPI緩沖器向ENC28J60寫入相應(yīng)格式的命令代碼,就可以實(shí)現(xiàn)與ENC28J60的數(shù)據(jù)通信,其中PHY寄存器不能通過(guò)SPI接口直接操作,而是需要通過(guò)特殊功能寄存器MII完成讀寫操作。
本文采用如下的C語(yǔ)言程序?qū)NC28J60控制寄存器進(jìn)行了初始化,完成了對(duì)控制寄存器的讀寫操作。其它對(duì)ENC28J60操作函數(shù)與此類似,由于篇幅有限,不在此進(jìn)行詳述
圖2 系統(tǒng)軟件設(shè)計(jì)層次
表1 ENC28J60的SPI指令集
(2)uIP協(xié)議棧在AVR單片機(jī)上的移植。
uIP協(xié)議棧是專門為8/16位嵌入式微處理器設(shè)計(jì)的小型TCP/IP協(xié)議棧,獲得BSD授權(quán),并遵循RFC標(biāo)準(zhǔn)。它完全由C語(yǔ)言編寫,具有良好的互操作性和完整的原代碼及注釋,可免費(fèi)應(yīng)用。
uIP協(xié)議棧有多個(gè)版本,本文采用的是uIP0.9版本。本文用到的 uip.c、uip.h、uip_arp.c、uip_arp.h、uip_arich.h文件位于/uip目錄下。uip.c和uip.h實(shí)現(xiàn)了 IP、TCP、ICMP 協(xié)議,uip_arp.c和 uip_arp.h 實(shí)現(xiàn)了ARP協(xié)議。其中uip_arch.c是校驗(yàn)和文件,uippopt.h為參數(shù)配置文件,根據(jù)系統(tǒng)的需要,修改相應(yīng)的參數(shù),從而完成對(duì)uIP協(xié)議棧的移植。
本文采用AVR單片機(jī)和ENC28J60網(wǎng)絡(luò)接口芯片的設(shè)計(jì)方案,實(shí)現(xiàn)了單片機(jī)系統(tǒng)與以太網(wǎng)的通信。隨著智能數(shù)據(jù)采集與控制系統(tǒng)對(duì)數(shù)據(jù)傳輸質(zhì)量要求的不斷提高,基于單片機(jī)系統(tǒng)的以太網(wǎng)接口方案的設(shè)計(jì)將會(huì)得到廣泛的應(yīng)用。
[1]張永濤 黃丹丹 李歐.uIP協(xié)議分析及應(yīng)用[J].信息工程大學(xué)學(xué)報(bào),2006,7(2):148-149.