基于STM32處理器的硬件電路連接圖和軟件程序設(shè)計(jì)
本文介紹了一款單片網(wǎng)絡(luò)接口芯片W5100,該芯片內(nèi)部集成了TCP/IP硬件協(xié)議棧,支持多種網(wǎng)絡(luò)協(xié)議。給出了基于STM32處理器的硬件電路連接圖和軟件程序設(shè)計(jì)。目前,該系統(tǒng)已成功應(yīng)用在多個(gè)建筑能耗監(jiān)測(cè)項(xiàng)目中,運(yùn)行結(jié)果表明該系統(tǒng)通信穩(wěn)定可靠,能夠滿足項(xiàng)目對(duì)遠(yuǎn)程數(shù)據(jù)傳輸?shù)男枨蟆?/p>
數(shù)據(jù)采集與傳輸系統(tǒng)一直是工業(yè)控制、環(huán)境參數(shù)監(jiān)測(cè)、建筑能耗信息監(jiān)測(cè)等多個(gè)領(lǐng)域共同關(guān)注的問(wèn)題,尤其是針對(duì)遠(yuǎn)程數(shù)據(jù)傳輸問(wèn)題。受傳輸距離的限制,傳統(tǒng)的現(xiàn)場(chǎng)總線通信方式只適合于近距離的數(shù)據(jù)傳輸;而基于GPRS技術(shù)的數(shù)據(jù)傳輸系統(tǒng)雖然可以不受距離的限制,但其按照流量進(jìn)行收費(fèi),對(duì)于大量數(shù)據(jù)連續(xù)傳輸而言資費(fèi)不低,在實(shí)際的項(xiàng)目中應(yīng)用也不是很廣泛。目前,基于以太網(wǎng)的數(shù)據(jù)傳輸系統(tǒng)以其成本低廉、通信速率高和支持遠(yuǎn)距離通信等諸多優(yōu)點(diǎn),在監(jiān)測(cè)領(lǐng)域得到了越來(lái)越多的應(yīng)用。
常見的網(wǎng)絡(luò)驅(qū)動(dòng)芯片有RTL8019、CS8900、ENC28J60、DM9000、W5100等,其中ENC28J60支持串行SPI接口通信方式,接口電路設(shè)計(jì)相對(duì)簡(jiǎn)單。RTL8019、CS8900和DM9000都是并行總線式驅(qū)動(dòng)方式,需要連接較多的數(shù)據(jù)線、地址線以及讀寫控制引腳等。W5100既支持串行SPI接口,同時(shí)也支持并行總線方式。這幾款芯片中除了W5100內(nèi)置TCP/IP協(xié)議棧之外,其余都需要用戶自己開發(fā)以太網(wǎng)驅(qū)動(dòng)程序,需要占據(jù)大量的存儲(chǔ)空間以及寶貴的RAM內(nèi)存單元;而且,軟件的實(shí)現(xiàn)方式與硬件集成相比,穩(wěn)定性和可靠性也稍差。
1 W5100芯片介紹
W5100是韓國(guó)Wiznet公司生產(chǎn)的一款多功能的單片網(wǎng)絡(luò)接口芯片,內(nèi)部集成有10/100M以太網(wǎng)控制器,且經(jīng)過(guò)多年實(shí)際項(xiàng)目應(yīng)用驗(yàn)證的硬件TCP/IP協(xié)議棧,提供全雙工以太網(wǎng)解決方案。與該公司之前的產(chǎn)品W3100相比,W5100內(nèi)部集成了物理層RTL8201CP核,它是一款集TCP /IP協(xié)議棧、以太網(wǎng)MAC和PHY為一體的網(wǎng)絡(luò)接口芯片,具有更高的集成度和更穩(wěn)定的工作性能,便于硬件實(shí)現(xiàn)。W5100芯片同時(shí)支持直接并行總線、間接并行總線和SPI串行總線共3種接口方式與主控芯片進(jìn)行通信,可以滿足不同場(chǎng)合的需求。這些性能使得用戶不需要考慮以太網(wǎng)TCP/IP協(xié)議棧的移植等復(fù)雜的軟件驅(qū)動(dòng)程序,可以像訪問(wèn)外部存儲(chǔ)器一樣操作W5100,實(shí)現(xiàn)網(wǎng)絡(luò)通信功能。W5100的性能特點(diǎn)如下:
①內(nèi)嵌10/100BaseT以太網(wǎng)物理層;
②理論最大傳輸率可達(dá)25 Mb/s;
③支持自動(dòng)MDI/MDIX,自動(dòng)校正信號(hào)極性;
④支持ADSL連接(支持PPPOE協(xié)議中的PAD/CHAP認(rèn)證模式);
⑤支持4個(gè)獨(dú)立端口同時(shí)運(yùn)行;
⑥內(nèi)置16 KB存儲(chǔ)器用于數(shù)據(jù)發(fā)送/接收緩存。
1.1 內(nèi)部結(jié)構(gòu)及引腳功能
如圖1所示,W5100將網(wǎng)絡(luò)協(xié)議的處理分成一個(gè)由特定處理器執(zhí)行的控制部分和一個(gè)硬件線路部分,實(shí)現(xiàn)硬件化的TCP、UDP、ICMP、IPv 4、ARP、IGMP以及PPPoE協(xié)議,含有連接以太網(wǎng)協(xié)議中的數(shù)據(jù)控制及MAC協(xié)議;按照功能可以將W5100的引腳分為與處理器接口的通信引腳、以太網(wǎng)物理層功能引腳、時(shí)鐘引腳、LED工作狀態(tài)指示引腳、電源引腳等幾類。直接總線接口方式需要用到ADDR[0~14]共15個(gè)引腳;而間接總線接口方式只需要用到地址線0和地址線1,其余的地址線ADDR[2~14]通過(guò)電阻接地即可;使用SPI接口方式時(shí)需要注意,必須將SEN引腳接高電平,才能使SPI功能有效,后面在硬件電路部分介紹。
1.2 寄存器功能介紹
W5100的寄存器可以分為通用寄存器和端口寄存器兩類。其中,通用寄存器包括對(duì)W5100的網(wǎng)絡(luò)配置、中斷、超時(shí)參數(shù)以及緩沖區(qū)大小等設(shè)置;端口寄存器是針對(duì)W5100的4個(gè)獨(dú)立的端口設(shè)置,包括端口模式寄存器、端口命令寄存器、端口中斷寄存器和端口狀態(tài)寄存器等在內(nèi)的共17個(gè)寄存器。
通用寄存器的詳細(xì)信息如表1所列。針對(duì)中斷寄存器IR共有7個(gè)中斷源,當(dāng)任何一個(gè)未被屏蔽的中斷置為高電平時(shí),W5100的中斷輸出引腳INT將會(huì)一直保持低電平,MCU通過(guò)讀取IR寄存器定位中斷源,并進(jìn)行中斷程序處理,之后清零IR中相應(yīng)的位,INT引腳才恢復(fù)為高電平。
W5100內(nèi)部共有16 KB發(fā)送/接收緩沖區(qū),發(fā)送和接收各占8 KB,默認(rèn)每個(gè)端口的發(fā)送和接收均為2 KB,即RMSR=TMSR=0x55,在實(shí)際使用過(guò)程中,用戶可以根據(jù)實(shí)際情況調(diào)整發(fā)送/接收緩沖區(qū)大小。如圖2所示,通過(guò)修改每個(gè)端口對(duì)應(yīng)的S1和S0寄存器可以修改相應(yīng)的端口緩沖區(qū)大小。
端口寄存器是分別針對(duì)4個(gè)獨(dú)立Socket的寄存器,以Sn_xx的形式表示,其中n取值為0、1、2、3。端口模式寄存器Sn_MR定義了該端口工作在TCP模式或者是UDP模式,不同模式下端口寄存器的表現(xiàn)形式不一,本文對(duì)此不作過(guò)多的闡述。
2 系統(tǒng)方案設(shè)計(jì)
本文核心處理器采用的是STM32F103VET6,它是一款基于Cortex—M3內(nèi)核的ARM處理器芯片,內(nèi)部集成了512K Flash程序存儲(chǔ)空間和64K的SRAM數(shù)據(jù)存儲(chǔ)空間。STM32F103VET6最高工作頻率72 MHz,含有資源外設(shè)接口,包括2個(gè)12位數(shù)/模轉(zhuǎn)換器、7個(gè)定時(shí)器、CAN總線接口、SPI通信接口、3路USART串行通信接口等資源。圖3展示了基于STM32F103VET6的W5100通信系統(tǒng)結(jié)構(gòu)圖,包括電源電路、時(shí)鐘電路、復(fù)位電路、
JTAG調(diào)試電路和W5100以太網(wǎng)通信電路。
2.1 硬件電路設(shè)計(jì)
本系統(tǒng)中STM32F103VET6處理器采用SPI串行接口方式與W5100進(jìn)行通信,硬件電路連接如圖4所示。13F-60FGYDPNW2濾波器帶有網(wǎng)絡(luò)變壓器的RJ45接口元件。W5100的通信、控制引腳分別與STM32F103-VET6相連接,其中INT引腳連接PC4(外部中斷4),該引腳低電平有效。當(dāng)W5100產(chǎn)生連接、斷開、發(fā)送數(shù)據(jù)完成、接收到數(shù)據(jù)或者通信超時(shí)等情況時(shí),該引腳將會(huì)產(chǎn)生一個(gè)從高電平到低電平的跳變,觸發(fā)一次中斷。W5100的RST_BG引腳需要通過(guò)一個(gè)12.3 kΩ的電阻接地,由于沒(méi)有標(biāo)稱12.3 kΩ的電阻,因此采用12 kΩ電阻+300 Ω精密電阻的方式連接。[!--empirenews.page--]
W5100工作頻率較高,為了保證通信的穩(wěn)定性、可靠性,在設(shè)計(jì)PCB電路板的時(shí)候有幾點(diǎn)需要注意:
①RJ45接口元件與W5100之間的距離要足夠的小;
②終端匹配模塊要盡量地靠近網(wǎng)絡(luò)變壓器;
③晶振布局要遠(yuǎn)離網(wǎng)絡(luò)變壓器和TX、RX導(dǎo)線,避免對(duì)高速信號(hào)造成干擾;
④去耦電容距W5100的位置越近越好,導(dǎo)線相對(duì)越寬越好。
2.2 軟件程序設(shè)計(jì)
W5100的程序設(shè)計(jì)包括初始化和Socket驅(qū)動(dòng)兩個(gè)部分,初始化過(guò)程主要對(duì)芯片內(nèi)部的各寄存器編程來(lái)實(shí)現(xiàn)芯片的復(fù)位、收發(fā)緩沖器設(shè)置等底層工作,初始化過(guò)程涉及的寄存器包括:
①RMSR(接收緩沖區(qū)寄存器)和TMSR(發(fā)送緩沖區(qū)寄存器)設(shè)置為0xAA(默認(rèn)為0x55),本系統(tǒng)中只用到了Socket0和Socket1兩個(gè)端口,岡此將緩沖區(qū)設(shè)置為4 KB,增大發(fā)送和接收空間。
②RTR(重發(fā)時(shí)間寄存器)按照默認(rèn)值設(shè)置,即200 ms(0x07D0)。通信過(guò)程中,當(dāng)發(fā)出連接、斷開等命令后,在200 ms內(nèi)沒(méi)有收到對(duì)方的響應(yīng)時(shí),將會(huì)觸發(fā)重發(fā)機(jī)制。
③RCR(重發(fā)計(jì)數(shù)寄存器)設(shè)置為8次。
④IMR(中斷屏蔽寄存器),通過(guò)向相應(yīng)的中斷屏蔽位寫入1使能相應(yīng)的中斷源,指出了IMR的每一位對(duì)應(yīng)的中斷源,本系統(tǒng)中需要開啟7、6、1、0即可。即設(shè)置IMR寄存器為0xC3,中斷產(chǎn)生后,STM32F103VET6可以通過(guò)訪問(wèn)IR寄存器獲得中斷來(lái)源,從而進(jìn)行相應(yīng)的中斷程序處理。中斷屏蔽寄存器如下。
除了上面幾個(gè)寄存器之外,還需要設(shè)置MAC地址、IP地址、網(wǎng)關(guān)地址等,根據(jù)實(shí)際應(yīng)用向?qū)?yīng)的控制位寫入相應(yīng)的地址即可,這里不再贅述。
W5100可以工作在TCP和UDP兩種通信模式下,在不同的通信模式下又分為客戶端和服務(wù)器兩種工作狀態(tài),TCP是面向連接的以太網(wǎng)通信,相比UDP可以提供更可靠的通信服務(wù)。本文通過(guò)W5100建立TCP的客戶端工作模式,將采集到的數(shù)據(jù)通過(guò)以太網(wǎng)發(fā)送至數(shù)據(jù)中心的服務(wù)器。如圖5所示,客戶端首先向服務(wù)器發(fā)起請(qǐng)求連接,成功建立連接之后,當(dāng)周期性數(shù)據(jù)采集任務(wù)結(jié)束后,將向服務(wù)器發(fā)送數(shù)據(jù)包;如果遇到網(wǎng)絡(luò)阻塞,會(huì)產(chǎn)生通信超時(shí)或者沒(méi)有響應(yīng)等情況,將會(huì)終止一次通信連接,關(guān)閉Socket,然后重新發(fā)起新的連接請(qǐng)求,循環(huán)反復(fù)。
3 系統(tǒng)應(yīng)用
目前,通過(guò)本文開發(fā)的基于W5100的遠(yuǎn)程數(shù)據(jù)采集與傳輸系統(tǒng)已經(jīng)成功應(yīng)用在遼寧省建筑能耗監(jiān)測(cè)平臺(tái)、太原理工大學(xué)節(jié)約型校園監(jiān)管平臺(tái)、大連市公共機(jī)構(gòu)能耗監(jiān)管平臺(tái)等多個(gè)能耗監(jiān)測(cè)項(xiàng)目當(dāng)中。其中,遼寧省項(xiàng)目覆蓋范圍最廣,涉及到省內(nèi)14個(gè)地級(jí)市共50棟建筑的能耗采集與傳輸工作。調(diào)試期間,因能耗采集周期和上傳周期均一致,并且各客戶端的時(shí)間信息通過(guò)服務(wù)器進(jìn)行同步,導(dǎo)致所有的客戶端均在同一個(gè)時(shí)刻向數(shù)據(jù)中心發(fā)起連接或者發(fā)送能耗信息數(shù)據(jù),如圖6所示(上傳周期為5 min),第1分鐘的C1~Cn表示各地的數(shù)據(jù)采集器在同一時(shí)刻向服務(wù)器發(fā)起連接請(qǐng)求,第5 min的C1~Cn表示各數(shù)據(jù)采集器在同一時(shí)刻向服務(wù)器發(fā)送能耗數(shù)據(jù)信息,從而造成服務(wù)器偶爾因連接負(fù)載過(guò)多造成采集軟件死機(jī)等情況發(fā)生。
解決該問(wèn)題的方法其實(shí)很簡(jiǎn)單,設(shè)置各客戶端分時(shí)發(fā)送數(shù)據(jù)即可,但如果對(duì)不同的客戶端下載不同版本的程序,從而達(dá)到分時(shí)的目的,實(shí)際操作過(guò)程中很不方便,而且造成程序版本不唯一,容易出現(xiàn)問(wèn)題。經(jīng)過(guò)進(jìn)一步分析發(fā)現(xiàn),各客戶端的網(wǎng)絡(luò)通信質(zhì)量不一,與服務(wù)器成功建立連接的時(shí)間不同,通過(guò)下面的方法巧妙地將該問(wèn)題解決,如圖7所示。
通過(guò)在程序中加入下面兩行代碼:
Write_W5100(W5100_S0_CR,S_CR_SEND KEEP);
//監(jiān)測(cè)網(wǎng)絡(luò)狀態(tài)
SSR0_state=Read_W5100(W5100_S0_SSR);
//讀取當(dāng)前網(wǎng)絡(luò)狀態(tài)
對(duì)當(dāng)前的網(wǎng)絡(luò)進(jìn)行監(jiān)測(cè),客戶端與服務(wù)器成功建立連接之后,寄存器ssr0_state變?yōu)?x17,記錄從發(fā)起連接到建立連接之間的時(shí)間差△T,發(fā)送數(shù)據(jù)時(shí)順延△T時(shí)刻再發(fā)送,從而零成本解決了負(fù)載過(guò)大的難題。遼寧省項(xiàng)目自2010年7月開始運(yùn)行,至今已經(jīng)連續(xù)運(yùn)行2年多時(shí)間,結(jié)果表明該系統(tǒng)能夠準(zhǔn)確地將數(shù)據(jù)上傳,工作穩(wěn)定可靠。
結(jié)語(yǔ)
本文以STM32F103VET6為核心處理器,通過(guò)單片網(wǎng)絡(luò)控制芯片W5100建立了以太網(wǎng)遠(yuǎn)程數(shù)據(jù)傳輸系統(tǒng),該系統(tǒng)具有高集成度、低成本、開發(fā)周期短等優(yōu)勢(shì)。針對(duì)建筑能耗監(jiān)測(cè)系統(tǒng)多個(gè)客戶端同時(shí)發(fā)起連接和上傳數(shù)據(jù)造成的服務(wù)器壓力過(guò)大問(wèn)題,文中通過(guò)監(jiān)測(cè)客戶端與服務(wù)器之間的連接時(shí)間點(diǎn),在發(fā)送數(shù)據(jù)時(shí)順延時(shí)間差△T,巧妙地解決了該問(wèn)題。實(shí)際項(xiàng)目運(yùn)行結(jié)果表明,該系統(tǒng)運(yùn)行可靠穩(wěn)定,應(yīng)用前景良好。