汪海兵, 董天寶
(國(guó)防科技大學(xué) 電子對(duì)抗學(xué)院, 安徽 合肥 230037)
第四次工業(yè)革命以互聯(lián)網(wǎng)為核心,使傳統(tǒng)行業(yè)與互聯(lián)網(wǎng)緊密結(jié)合,推進(jìn)工業(yè)系統(tǒng)實(shí)現(xiàn)智能化。工業(yè)領(lǐng)域低成本高可靠性地接入互聯(lián)網(wǎng)?目前有基于通用個(gè)人電腦、基于ARM9嵌入式系統(tǒng)和基于ARM7單片機(jī)小系統(tǒng)三種方案,其中基于單片機(jī)的小系統(tǒng)以其低復(fù)雜度、高可靠性和低成本、低功耗等優(yōu)點(diǎn)成為入網(wǎng)的最佳選擇。聯(lián)網(wǎng)通信協(xié)議有UDP、TCP和HTTP三種,HTTP協(xié)議通過(guò)IE瀏覽器即可通信,不需要開(kāi)發(fā)上位機(jī)軟件,更靈活。
目前基于單片機(jī)的入網(wǎng)方案大部分基于專用網(wǎng)絡(luò)協(xié)議芯片[1-4]只實(shí)現(xiàn)以太網(wǎng)MAC層和物理層(PHY),單片機(jī)需要實(shí)現(xiàn)TCP/IP軟件協(xié)議棧,一般配合UCOSII操作系統(tǒng)才能完成網(wǎng)絡(luò)調(diào)度,代碼量大,復(fù)雜度高,影響系統(tǒng)的穩(wěn)定性。
本文提出基于wiznet公司全硬件協(xié)議棧W5200芯片[5]2和STM32F103RET單片機(jī)[6-7]的嵌入式HTTP服務(wù)器設(shè)計(jì)方案。W5200芯片是業(yè)界首款實(shí)現(xiàn)TCP/IP全硬件協(xié)議棧的網(wǎng)絡(luò)控制器,不僅實(shí)現(xiàn)了以太網(wǎng)MAC層和PHY層,還以硬件方式支持TCP、UDP、ICMP、ARP、IGMP和PPPOE等協(xié)議,單片機(jī)通過(guò)SPI接口配置W5200的工作參數(shù),控制W5200的工作狀態(tài)機(jī)跳轉(zhuǎn),即可實(shí)現(xiàn)網(wǎng)絡(luò)通信,而不必實(shí)現(xiàn)TCP/IP軟件協(xié)議棧。
嵌入式HTTP服務(wù)器的總體設(shè)計(jì)如圖1所示。STM32單片機(jī)內(nèi)置一個(gè)小型網(wǎng)站,在IE瀏覽器中輸入服務(wù)器的IP地址即可打開(kāi)登錄網(wǎng)頁(yè),輸入正確的用戶名和密碼進(jìn)入操作界面,對(duì)入網(wǎng)設(shè)備進(jìn)行遠(yuǎn)程讀寫數(shù)據(jù)操作,從而實(shí)現(xiàn)入網(wǎng)設(shè)備接入互聯(lián)網(wǎng)的功能。
圖1 嵌入式HTTP服務(wù)器總體方案
網(wǎng)絡(luò)芯片采用wiznet公司的W5200芯片,主控單片機(jī)采用意法半導(dǎo)體公司STM32F103RET芯片,板上存儲(chǔ)器采用W25X64芯片,可用于存儲(chǔ)采集的數(shù)據(jù)與系統(tǒng)運(yùn)行日志。W5200電路連接如圖2所示,與單片機(jī)連接關(guān)系如表1所示。其他電路設(shè)計(jì)可以參考器件手冊(cè)。
圖2 W5200硬件設(shè)計(jì)
TCP/IP協(xié)議棧具有層次結(jié)構(gòu),分層如圖3所示。HTTP服務(wù)器協(xié)議從邏輯角度看屬于應(yīng)用層,傳輸協(xié)議采用HTTP超文本協(xié)議,在數(shù)據(jù)包組織上,HTTP數(shù)據(jù)位于傳輸層TCP幀的數(shù)據(jù)區(qū)內(nèi),而TCP幀位于網(wǎng)絡(luò)層IP幀的數(shù)據(jù)區(qū)內(nèi),IP幀位于鏈路層MAC幀的數(shù)據(jù)區(qū)內(nèi)。要獲取HTTP數(shù)據(jù)包,必須實(shí)現(xiàn)鏈路層、網(wǎng)絡(luò)層和傳輸層的網(wǎng)絡(luò)協(xié)議,這在本方案中全部由具有硬件協(xié)議棧的網(wǎng)絡(luò)芯片W5200在單片機(jī)的控制下自動(dòng)完成,并將提取的應(yīng)用層HTTP數(shù)據(jù)包發(fā)送給單片機(jī)處理。單片機(jī)只需要實(shí)現(xiàn)應(yīng)用層的HTTP數(shù)據(jù)包協(xié)議,這大大減輕了單片機(jī)的代碼量,提高了系統(tǒng)穩(wěn)定性[5]3。
表1 W5200與單片機(jī)STM32F103RET連接對(duì)應(yīng)關(guān)系
圖3 TCP/IP協(xié)議棧分層與實(shí)現(xiàn)方式
由2.1節(jié)可知,網(wǎng)絡(luò)芯片W5200需要在單片機(jī)的控制下才能正確工作,具體是指單片機(jī)要通過(guò)SPI接口將網(wǎng)絡(luò)參數(shù)寫入W5200的相關(guān)寄存器,并將工作模式設(shè)置為TCPServer模式[5]33。有關(guān)寄存器地址[5]10如表2所示,據(jù)此開(kāi)啟TCP服務(wù)后,單片機(jī)需要實(shí)時(shí)監(jiān)測(cè)W5200套接字的狀態(tài),并控制其按照?qǐng)D4所示跳轉(zhuǎn)[5]25。注意這個(gè)循環(huán)需要實(shí)時(shí)監(jiān)測(cè)的,即放在主程序的while(1)循環(huán)內(nèi)部執(zhí)行。圖4中的函數(shù)“Proc_http_frame()”是HTTP協(xié)議實(shí)現(xiàn)函數(shù),將在下節(jié)具體分析。
圖4 W5200的TCP服務(wù)器套接字狀態(tài)機(jī)跳轉(zhuǎn)
完成2.2節(jié)W5200驅(qū)動(dòng)程序開(kāi)發(fā)后,單片機(jī)就可以與遠(yuǎn)程IE瀏覽器之間收發(fā)HTTP超文本數(shù)據(jù)包了,相關(guān)功能封裝在圖5中的函數(shù)“Proc_http_frame()”中。
表2 W5200驅(qū)動(dòng)程序相關(guān)寄存器地址
本文設(shè)計(jì)的嵌入式HTTP服務(wù)器內(nèi)置一個(gè)小型網(wǎng)站,網(wǎng)頁(yè)使用Adobe DreamweaverCS6進(jìn)行制作,交互方式主要是通過(guò)公共網(wǎng)關(guān)接口(Common Gateway Interface,CGI)來(lái)完成。CGI 是外部應(yīng)用程序與HTTP服務(wù)器之間傳遞信息的接口標(biāo)準(zhǔn),允許HTTP服務(wù)器執(zhí)行外部程序,并將它們的輸出發(fā)送給HTTP瀏覽器。絕大多數(shù)的 CGI 程序被用來(lái)解釋處理來(lái)自表單的輸入信息,并在服務(wù)器產(chǎn)生相應(yīng)的處理,或?qū)⑾鄳?yīng)的信息反饋給瀏覽器[8]。
以登錄界面為例,在Dreamweaver中設(shè)置如下:登錄按鈕事件屬性"LOGIN.CGI" ,方法屬性"post",用戶名編輯框名稱為“username”,密碼編輯框名稱為“password”。在IE瀏覽器中輸入正確的用戶名和密碼后,點(diǎn)擊登錄按鈕,單片機(jī)端收到HTTP請(qǐng)求數(shù)據(jù)包含有“POST /LOGIN.CGI HTTP/1.1” 關(guān)鍵字,后續(xù)報(bào)文包含具體的用戶名、登錄密碼和按鈕信息:“path=/username=admin&password=admin&button=%E7%99%BB%E5%BD%95”,據(jù)此判斷事件為用戶登錄請(qǐng)求,搜索用戶名和密碼信息,判斷是否允許登錄,密碼錯(cuò)誤,則根據(jù)HTTP超文本協(xié)議,生成登錄錯(cuò)誤網(wǎng)頁(yè)的超文本數(shù)據(jù)包,使用TCPSend()函數(shù)發(fā)送給上位機(jī),上位機(jī)的IE瀏覽器收到數(shù)據(jù)包后,顯示如圖5所示。
圖5 單片機(jī)回傳的登錄錯(cuò)誤超文本數(shù)據(jù)包在上位機(jī)IE瀏覽器顯示效果
另外本文還設(shè)計(jì)了修改登錄密碼界面、遠(yuǎn)程輸出數(shù)據(jù)和遠(yuǎn)程讀取數(shù)據(jù)界面,具體效果見(jiàn)2.4小節(jié)。
由于網(wǎng)頁(yè)源文件不能直接放到 STM32 里面,所以要做一個(gè)轉(zhuǎn)換,本文使用“ROMFILEMaker.exe”工具將HTTP服務(wù)器的網(wǎng)頁(yè)源文件轉(zhuǎn)換成二進(jìn)制文件。首先點(diǎn)擊“Add Files”選擇所需網(wǎng)頁(yè)文件,然后點(diǎn)擊“Make Image”。該軟件可從http://www.wiznet.co.kr/en/ 網(wǎng)站下載。然后將該網(wǎng)頁(yè)文件拼接到單片機(jī)固件的后面,一起燒錄到STM32單片機(jī)內(nèi)部存儲(chǔ)器中,同時(shí)在單片機(jī)程序中記錄網(wǎng)頁(yè)存儲(chǔ)的起始字節(jié)地址,HTTP服務(wù)器程序在訪問(wèn)內(nèi)嵌的服務(wù)器網(wǎng)頁(yè)時(shí),就從該地址開(kāi)始搜索。
HTTP服務(wù)器硬件實(shí)物如圖6所示。遠(yuǎn)程讀取數(shù)據(jù)示例如圖7所示。
圖6 HTTP服務(wù)器實(shí)物
本文設(shè)計(jì)實(shí)現(xiàn)了基于硬件協(xié)議棧的單片機(jī)HTTP服務(wù)器,利用HTTP超文本協(xié)議中的CGI技術(shù)設(shè)計(jì)了交互式網(wǎng)頁(yè),并通過(guò)IE瀏覽器進(jìn)行了遠(yuǎn)程登錄和遠(yuǎn)程讀寫操作,取得了預(yù)期效果,為各種入網(wǎng)設(shè)備低成本、低復(fù)雜度和高可靠性地接入互聯(lián)網(wǎng)提供了一個(gè)通用的解決方案。
圖7 遠(yuǎn)程讀取數(shù)據(jù)