基于精簡(jiǎn)TCP/IP協(xié)議棧的信息家電網(wǎng)絡(luò )服務(wù)器
關(guān)鍵詞:SIC33209 嵌入式系統 TCP/IP協(xié)議棧 網(wǎng)絡(luò )服務(wù)器 信息家電 Internet
引言
S1C33209是EPSON公司推出的RISC結構的32位高性能CMOS微處理器,具有高速、低功耗、低電壓操作、精簡(jiǎn)指令集等特點(diǎn),提供乘與累加功能,既可用于辦公設備,也特別適用于需要高級數據處理的便攜設備,可以進(jìn)行高速運算、靈活的I/O口控制和高效的數據操作。S1C33209具有8KB的內部RAM,其運算速率可達60MHz,加上優(yōu)化的多數為單時(shí)鐘周期的指令集,使S1C33209吞吐量大為提高。S1C33209比常規MCU有更快的運算速度及可靠的性能、可重復編程的結構,使得精簡(jiǎn)的TCP/IP能夠在其中可靠運行。
1 硬件平臺結構及設計
信息家電遠程訪(fǎng)問(wèn)時(shí),通信數據量不大,10M以太網(wǎng)的通信速率即可滿(mǎn)足要求;其次信息家電對實(shí)時(shí)性的要求不高,可定位在秒級。
在這種情況下,構造了家電網(wǎng)絡(luò )硬件平臺服務(wù)器S1C-WebServer,其結構如圖1所示。S1C33-WebServer主要由三部分組成,即S1C33209微處理器、RTL8019AS全雙工以太網(wǎng)控制器(RealTek公司出品,100腳的TQFP封裝,最大速率10Mbps,自帶16KB的SRAM,工作在Ethernet II和IEEE802.3、10Base5、10Base2、10BasetT下,全雙工,支持8位與16位數據總線(xiàn),與NE2000兼容)、可擦寫(xiě)Flash(采用Intel的E28F320,容量為4MB)??紤]到Flash的擦寫(xiě)在程序調試中不太方便,所以為S1C33209外圍擴展512KB的SDRAM。在S1C33209中,運行用戶(hù)程序和S1C33-Stack。在Flash中,存放S1C-WebServer的各種Web資源信息,綜可處理Web頁(yè)面、圖像文件等,與PC機上WebServer中的硬盤(pán)可以存儲大量的不同頁(yè)面。Flash的容量決定了WebServer的資源文件的大小。RTL9019AS是Ethernet控制器,負責S1C33209與Ethernet的數據傳遞。在信息家電已具備RS232或相關(guān)標準接口的條件下,使用家庭自動(dòng)化總線(xiàn)HAB(Home Automation Bus)作為S1C33-WebServer與家庭網(wǎng)絡(luò )協(xié)議SHNP(Simple Home Networks Protocol)。家電通過(guò)RS232接口與S1C33-WebServer連接,經(jīng)由EEthernet接入Internet。
經(jīng)過(guò)分析,S1C33209與RTL8019AS讀寫(xiě)時(shí)序是兼容的,而且MCU的讀寫(xiě)時(shí)延比RTL8019AS小得多。MCU與RTL8019AS的連接如圖2所示。RTL8019AS的工作電壓為5V,而S1C33209的工作電壓為3.3V,所以RTL8019AS的數據線(xiàn)輸出需要電平的轉換。選用2個(gè)8位(采用16位數據總線(xiàn))的具有雙向數據傳輸功能的74HC245來(lái)完成,由于S1C33209的輸出電平符合RTL8019AS輸入電平的要求,所以地址線(xiàn)可以直接相連,而不需電平轉換,RTL8019AD中斷信號(INT0)為高電平有效,在S1C33209中選用端口中斷輸入的K60端口與之相連。由于S1C33209的中斷有效方式(高、低電平或脈沖)可以根據對寄存器的設置調節),所以不用對INT0作反向或電平轉換。
2 精簡(jiǎn)TCP/IP協(xié)議棧的實(shí)現
構建的S1C33-Stack運行在以S1C33209嵌入式CPU為基礎的硬件平臺上,是一組可配置的多種Internet協(xié)議的組成。這些協(xié)議按照分層協(xié)議棧的方式組織,包括應用層的HTTP、DHCP、SMTP,傳輸層的TCP、UDP,網(wǎng)絡(luò )層的IP/ICMP、ARP,通過(guò)鏈路層和物理層(如Ethernet)進(jìn)行數據的交互。S1C33-Stack的結構模型如圖3所示。S1C33-Stack利用S1C33的高速處理能力處理TCP/IP數據包,避免了在有限容量的RAM中緩存大量數據,使得控制器可以處理比內部RAM總線(xiàn)更多的數據包。利用嵌入的S1C33-Stack,Webserver能通過(guò)Hypertext Transfer Protocol(HTTP)與任何瀏覽器通信,能夠提供各種類(lèi)型的資源,如HTML、圖片文件等。這些資源可以使用一種特殊的文件系統URI,被存放在容量為4MB的Flash中。這種文件系統可包含任意多的目錄,對URL的長(cháng)度也沒(méi)有限制。
(1)地址解析協(xié)議ARP
該協(xié)議將IP地址映射成以太網(wǎng)MAC地址。在uIP中,ARP的執行依靠維持一張表來(lái)完成IP地址和MAC的地址的映射。當有一個(gè)IP數據包要發(fā)送到以太網(wǎng)上時(shí),從ARP表中查詢(xún)相應的MAC地址。如果在A(yíng)RP表中找不到IP地址則送出相應的ARP請求。當目的主機收到ARP請求報文后,發(fā)送ARP REPLY報文將請求的MAC地址送出。當收到ARP REPLY后,ARP表被更新。每隔10s,ARP表就被新新一次,舊的ARP表項將被刪除。每個(gè)ARP表項的生存周期是20min。
(2)網(wǎng)間協(xié)議IP
在uIP中,IP層的代碼有兩個(gè)功能:驗證到來(lái)的IP報文報頭的正確性,并且對TCP和ICMP報文實(shí)行分流。因為不考慮IP的分片和重組,uIP中IP層的代碼非常的精簡(jiǎn)。
(3)網(wǎng)間報文控制協(xié)議ICMP
在uIP中,僅有一種類(lèi)型的ICMP信息被實(shí)現:ICMP ECHO主要用于應用程序ping,檢查網(wǎng)絡(luò )是否連通。在uIP中,ICMP ECHO通常以一種很簡(jiǎn)單的方式進(jìn)行處理;將ICMP類(lèi)型由“ECHO”改為“REPLY”,同時(shí)調整ICMP校驗,交換發(fā)送方和接收方的IP地址。
(4)傳送控制協(xié)議TCP
為了減少對內存的使用,在uIP中,TCP并不使用滑動(dòng)窗口來(lái)接收和發(fā)送數據,到達的TCP報文并不進(jìn)行緩沖而是立刻交給應用程序處理。但是應用程序本身可以對要發(fā)送的程序本身可以對要發(fā)送的數據進(jìn)行緩沖,因為每次連接中通常有若干的TCP報文要發(fā)送。uIP網(wǎng)絡(luò )通信模塊結構如圖4所示。
網(wǎng)絡(luò )通信需要要底層RTL8019AS驅動(dòng)程序的支持,參考RTL8019AS與S1C33209的資料說(shuō)明文檔,編寫(xiě)出針對此系統的RTL8019AS驅動(dòng)。
uIP并不緩存到達的數據包,當網(wǎng)絡(luò )上有數據包(在這里專(zhuān)指出太幀)到達網(wǎng)卡時(shí),網(wǎng)卡驅動(dòng)程序將暫存在網(wǎng)卡緩存中的數據包,一次一個(gè)的以DMA形式傳送到目標板上的RAM中。這時(shí)將會(huì )有一段代碼將到達目標板RAM中的數據包復制到全局數組uip_buf[]中,uIP協(xié)議棧程序隨后對uip_buf[]中的數據進(jìn)行操作。
當上層應用程序或協(xié)議棧程序產(chǎn)生了向網(wǎng)絡(luò )上發(fā)送的數據包時(shí),也將數據包放入uip_buf[]。然后調用網(wǎng)卡驅動(dòng)程序,將uip_buf[]中的數據讀到網(wǎng)卡的緩存中,隨后發(fā)送到網(wǎng)絡(luò )中。
在此要說(shuō)明一下協(xié)議棧與網(wǎng)卡驅動(dòng)程序、應用程序之間的同步機制問(wèn)題。在系統初始化的時(shí)候,通過(guò)操作系統提供的系統調用vcre_tsk()創(chuàng )建三個(gè)任務(wù):任務(wù)一(task1),uIP協(xié)議棧;任務(wù)二(task2),家電監控程序;任務(wù)三(idle_task),空閑任務(wù)。而網(wǎng)卡驅動(dòng)程序則作為硬件中斷,由“檢測到網(wǎng)絡(luò )上傳過(guò)來(lái)數據包”事件激發(fā)。
整個(gè)協(xié)議棧程序流程圖如圖5所示。
任務(wù)一的優(yōu)先級最高,任務(wù)二次之,任務(wù)三的優(yōu)先級最低。當系統開(kāi)始運行時(shí),任務(wù)一首先進(jìn)入RUN狀態(tài),在任務(wù)一中加入系統調用wai_flg(),由于沒(méi)有網(wǎng)絡(luò )請求,任務(wù)一隨后進(jìn)入WAIT狀態(tài)。此時(shí)任務(wù)二進(jìn)入RUN狀態(tài)。當網(wǎng)絡(luò )上有數據包到達,網(wǎng)卡驅動(dòng)程序作為硬件中斷開(kāi)始執行。在退出中斷前,通過(guò)系統調用set_flg(),將任務(wù)一期望的標志位置位。當中斷返回后,由于任務(wù)一的等待條件已經(jīng)滿(mǎn)足,任務(wù)一的優(yōu)先級又高于任務(wù)二,因此任務(wù)一進(jìn)入RUN狀態(tài),即uIP協(xié)議開(kāi)始處理數據。如果網(wǎng)絡(luò )上一直有數據包到達,則任務(wù)一和中斷程序不斷的切換。當網(wǎng)絡(luò )任務(wù)完成,返回到任務(wù)二的斷點(diǎn)處繼續向下執行。
由于uIP不緩存網(wǎng)絡(luò )數據,因此在任務(wù)一執行的過(guò)程中,即uip_buf[]正在被操作時(shí),將關(guān)閉所有中斷。這樣可以避免數據包被破壞,缺點(diǎn)是實(shí)時(shí)性差了一些,但是滿(mǎn)足本系統要求。
3 操作系統
本系統使用的操作系統是由EPSON公司提供的ROS33V31。ROS33是為S1C33系列MCU提供的一種嵌入式實(shí)時(shí)操作系統,符合uITRON 3.0標準。使用ROS33可以迅速、有效地開(kāi)發(fā)針對打印機、PDA以及各類(lèi)控制設備的嵌入式應用程序。
ROS33具有以下特點(diǎn):
*支持uITRON 3.0標準――符合該標準的S級*最大任務(wù)數為255,采用優(yōu)先級調度機制,支持9種不同的優(yōu)先級,提供信號燈、郵箱、消息緩沖等多種通信機制:
*內核優(yōu)先并緊湊――最小可為1.7K;
*響應快――最快調度響應時(shí)間為7.8μS(CPU主頻為33MHz,下同),最大中斷屏蔽時(shí)間為4.3μs ;
*高級語(yǔ)言支持――除匯編語(yǔ)言外,還支持基于ANSI標準的C語(yǔ)言編程。
注釋?zhuān)害蘄TRON將系統功能分成四級。R級(必要級)只提供包括實(shí)時(shí)、多任務(wù)OS所需的基本系統調用;S級(標準級)提供所有標準的系統調用;E級(擴展級)包括附加的和擴展的系統功能;C級(CPU依賴(lài)級)的系統功能依賴(lài)于具體的CPU和系統實(shí)現方式。
ROS33基本內核按功能劃分為6大部分:
*任務(wù)管理――負責系統中任務(wù)狀態(tài)的變遷;
*任務(wù)相關(guān)的同步管理――通過(guò)睡眠/喚醒、掛起/解掛等操作,處理相關(guān)任務(wù)及任務(wù)之間的同步關(guān)系;
*同步與通信――通過(guò)信號燈、事件、郵箱等通信機制,實(shí)現獨立任務(wù)之間的同步與通信;
*系統管理――對系統環(huán)境的管理;
*時(shí)鐘管理――日歷時(shí)鐘、定時(shí)器、定時(shí)任務(wù)等的管理;
*中斷管理――開(kāi)/關(guān)中斷。
圖6給出了ROS33內核的概念模型。
4 Web服務(wù)器及上層應用程序框架
WEB服務(wù)器所采用的方式稱(chēng)為uip_connect,比通常在設計中所使用的Socket套接字更適合于嵌入式系統下面即是WEB服務(wù)器的大體框架。
#includeuip.h>
void http_listen_init(void){
uip_listen(80);
} //http listen初始化
void listen_init(void){
http_listen_init();
}
void application(void){
if(uip_connected()) //如果當前的連接狀態(tài)為connected
switch (uip_conn->lport){
case htons(80):
httpd; //如果80 PORT有數據到達,則調用HTTP處理HTML文件的傳送
}
}
在應用軟件上實(shí)現簡(jiǎn)單WEB服務(wù)器功能,其主要由兩個(gè)模塊構成:一是用戶(hù)登陸模塊;二是家電監控模塊。用戶(hù)登陸模塊需要解決用戶(hù)的合法性檢查,即接收用戶(hù)輸入的用戶(hù)名和密碼,進(jìn)行校驗,合法則進(jìn)入家單監控頁(yè)面,非法則發(fā)出警告頁(yè)面。家電監控模塊針對各家電的硬件情況,收集信息家電的狀態(tài)碼,并通過(guò)網(wǎng)頁(yè)形式顯示。
在兩個(gè)模塊中,有一部分相似的處理,即對輸入的數據進(jìn)行解析?,F在定義數組htmlinputs來(lái)存放解析后的信息。對表單輸入的數據進(jìn)行解析后,將其name值和value值分別存放在htmlinput_struct.name和htmlinput_struct.value里,便于以后的處理。變量htmlinputcount存放表單里輸入變量的個(gè)數。定義如下:
struct htmlinput_struct htmlinputs[100];
int htmlinputcount=0;
除此外,定義函數get_inputs()和translate()對輸入的數據進(jìn)行處理。
Int get_inputs();//將從表單輸入的數據分別裝到對應的name/value數據隊中
Void translate(char*sourcestr);//解讀編碼URL字符
具體程序代碼在此就不再多述。
整個(gè)上層應用程序的流程圖如圖7所示。
5 小結
以太網(wǎng)作為接口,以S1C33系列微處理器為硬件平臺,利用軟件化的精簡(jiǎn)嵌入式TCP/IP,能夠實(shí)現HTTP服務(wù)。當然在系統成熟的條件下,還可以考慮把以太網(wǎng)接口替換為無(wú)線(xiàn)網(wǎng)絡(luò )接口。本文為信息家電網(wǎng)絡(luò )接入Internet提供了一種無(wú)需額外的PC或網(wǎng)關(guān)設備的解決方案。這種低成本、高性能的方案,具有可靠、靈活的特點(diǎn),適用于通信速率不太、允許時(shí)延大于1s且需要連接Internet的家庭自動(dòng)化設備。此外用戶(hù)還可以根據需要,按照此方法,構造自己的網(wǎng)絡(luò )服務(wù)器,可為普通的電氣設備或系統如公共服務(wù)設備、家庭醫療保健設備、工業(yè)自動(dòng)化系統等,賦予接入Internet的能力。
tcp/ip相關(guān)文章:tcp/ip是什么
評論