基於精簡TCP/IP協議棧的信息家電網路伺服器

admin @ 2014-03-19 , reply:0

名稱:基於精簡TCP/IP協議棧的信息家電網路伺服器
引言
S1C33209是EPSON公司推出的RISC結構的32位高性能CMOS微處理器,具有高速、低功耗、低電壓操作、精簡指令集等特點,提供乘與累加功能,既可用於辦公設備,也特別適用於需要高級數據處理的便攜設備,可以進行高速運算、靈活的I/O口控制和高效的數據操作。S1C33209具有8KB的內部RAM,其運算速率可達60MHz,加上優化的多數為單時鐘周期的指令集,使S1C33209吞吐量大為提高。S1C33209比常規MCU有更快的運算速度及可靠的性能、可重複編程的結構,使得精簡的TCP/IP能夠在其中可靠運行。

1硬體平台結構及設計
信息家電遠程訪問時,通信數據量不大,10M乙太網的通信速率即可滿足要求;其次信息家電對實時性的要求不高,可定位在秒級。
在這種情況下,構造了家電網路硬體平台伺服器S1C-WebServer,其結構如圖1所示。S1C33-WebServer主要由三部分組成,即S1C33209微處理器、RTL8019AS全雙工乙太網控制器(RealTek公司出品,100腳的TQFP封裝,最大速率10Mbps,自帶16KB的SRAM,工作在Ethernet II和IEEE802.3、10Base5、10Base2、10BasetT下,全雙工,支持8位與16位數據匯流排,與NE2000兼容)、可擦寫Flash(採用Intel的E28F320,容量為4MB)。考慮到Flash的擦寫在程序調試中不太方便,所以為S1C33209外圍擴展512KB的SDRAM。在S1C33209中,運行用戶程序和S1C33-Stack。在Flash中,存放S1C-WebServer的各種Web資源信息,綜可處理Web頁面、圖像文件等,與PC機上WebServer中的硬碟可以存儲大量的不同頁面。Flash的容量決定了WebServer的資源文件的大校RTL9019AS是Ethernet控制器,負責S1C33209與Ethernet的數據傳遞。在信息家電已具備RS232或相關標準介面的條件下,使用家庭自動化匯流排HAB(Home Automation Bus)作為S1C33-WebServer與家庭網路協議SHNP(Simple Home Networks Protocol)。家電通過RS232介面與S1C33-WebServer連接,經由EEthernet接入Internet。

經過分析,S1C33209與RTL8019AS讀寫時序是兼容的,而且MCU的讀寫時延比RTL8019AS小得多。MCU與RTL8019AS的連接如圖2所示。RTL8019AS的工作電壓為5V,而S1C33209的工作電壓為3.3V,所以RTL8019AS的數據線輸出需要電平的轉換。選用2個8位(採用16位數據匯流排)的具有雙向數據傳輸功能的74HC245來完成,由於S1C33209的輸出電平符合RTL8019AS輸入電平的要求,所以地址線可以直接相連,而不需電平轉換,RTL8019AD中斷信號(INT0)為高電平有效,在S1C33209中選用埠中斷輸入的K60埠與之相連。由於S1C33209的中斷有效方式(高、低電平或脈衝)可以根據對寄存器的設置調節),所以不用對INT0作反向或電平轉換。
2精簡TCP/IP協議棧的實現
構建的S1C33-Stack運行在以S1C33209嵌入式CPU為基礎的硬體平台上,是一組可配置的多種Internet協議的組成。這些協議按照分層協議棧的方式組織,包括應用層的HTTP、DHCP、SMTP,傳輸層的TCP、UDP,網路層的IP/ICMP、ARP,通過鏈路層和物理層(如Ethernet)進行數據的交互。S1C33-Stack的結構模型如圖3所示。S1C33-Stack利用S1C33的高速處理能力處理TCP/IP數據包,避免了在有限容量的RAM中緩存大量數據,使得控制器可以處理比內部RAM匯流排更多的數據包。利用嵌入的S1C33-Stack,Webserver能通過Hypertext Transfer Protocol(HTTP)與任何瀏覽器通信,能夠提供各種類型的資源,如HTML、圖片文件等。這些資源可以使用一種特殊的文件系統URI,被存放在容量為4MB的Flash中。這種文件系統可包含任意多的目錄,對URL的長度也沒有限制。
考慮到嵌入式系統的可用資源有限,在此採用經過裁減的TCP/IP協議棧—uIP。uIP協議主要包括TCP/IP協議組中的四個基本的協議:ARP、IP、ICMP、TCP。鏈路層協議,如PPP,則作為設備驅動在uIP底層實現。應用層協議,如HTTP、FTP、SMTP則作為應用程序在uIP上層實現。
(1)地址解析協議ARP
該協議將IP地址映射成乙太網MAC地址。在uIP中,ARP的執行依靠維持一張表來完成IP地址和MAC的地址的映射。當有一個IP數據包要發送到乙太網上時,從ARP表中查詢相應的MAC地址。如果在ARP表中找不到IP地址則送出相應的ARP請求。當目的主機收到ARP請求報文後,發送ARP REPLY報文將請求的MAC地址送出。當收到ARP REPLY后,ARP表被更新。每隔10s,ARP表就被新新一次,舊的ARP表項將被刪除。每個ARP表項的生存周期是20min。
(2)網間協議IP
在uIP中,IP層的代碼有兩個功能:驗證到來的IP報文報頭的正確性,並且對TCP和ICMP報文實行分流。因為不考慮IP的分片和重組,uIP中IP層的代碼非常的精簡。
(3)網間報文控制協議ICMP
在uIP中,僅有一種類型的ICMP信息被實現:ICMP ECHO主要用於應用程序ping,檢查網路是否連通。在uIP中,ICMP ECHO通常以一種很簡單的方式進行處理;將ICMP類型由「ECHO」改為「REPLY」,同時調整ICMP校驗,交換髮送方和接收方的IP地址。
(4)傳送控制協議TCP
為了減少對內存的使用,在uIP中,TCP並不使用滑動窗口來接收和發送數據,到達的TCP報文並不進行緩衝而是立刻交給應用程序處理。但是應用程序本身可以對要發送的程序本身可以對要發送的數據進行緩衝,因為每次連接中通常有若干的TCP報文要發送。uIP網路通信模塊結構如圖4所示。
網路通信需要要底層RTL8019AS驅動程序的支持,參考RTL8019AS與S1C33209的資料說明文檔,編寫出針對此系統的RTL8019AS驅動。
uIP並不緩存到達的數據包,當網路上有數據包(在這裡專指出太幀)到達網卡時,網卡驅動程序將暫存在網卡緩存中的數據包,一次一個的以DMA形式傳送到目標板上的RAM中。這時將會有一段代碼將到達目標板RAM中的數據包複製到全局數組uip_buf[]中,uIP協議棧程序隨後對uip_buf[]中的數據進行操作。
當上層應用程序或協議棧程序產生了向網路上發送的數據包時,也將數據包放入uip_buf[]。然後調用網卡驅動程序,將uip_buf[]中的數據讀到網卡的緩存中,隨後發送到網路中。
在此要說明一下協議棧與網卡驅動程序、應用程序之間的同步機制問題。在系統初始化的時候,通過操作系統提供的系統調用vcre_tsk()創建三個任務:任務一(task1),uIP協議棧;任務二(task2),家電*程序;任務三(idle_task),空閑任務。而網卡驅動程序則作為硬體中斷,由「檢測到網路上傳過來數據包」事件激發。
整個協議棧程序流程圖如圖5所示。
任務一的優先順序最高,任務二次之,任務三的優先順序最低。當系統開始運行時,任務一首先進入RUN狀態,在任務一中加入系統調用wai_flg(),由於沒有網路請求,任務一隨後進入WAIT狀態。此時任務二進入RUN狀態。當網路上有數據包到達,網卡驅動程序作為硬體中斷開始執行。在退出中斷前,通過系統調用set_flg(),將任務一期望的標誌位置位。當中斷返回后,由於任務一的等待條件已經滿足,任務一的優先順序又高於任務二,因此任務一進入RUN狀態,即uIP協議開始處理數據。如果網路上一直有數據包到達,則任務一和中斷程序不斷的切換。當網路任務完成,返回到任務二的斷點處繼續向下執行。
由於uIP不緩存網路數據,因此在任務一執行的過程中,即uip_buf[]正在被操作時,將關閉所有中斷。這樣可以避免數據包被破壞,缺點是實時性差了一些,但是滿足本系統要求。
3操作系統
本系統使用的操作系統是由EPSON公司提供的ROS33V31。ROS33是為S1C33系列MCU提供的一種嵌入式實時操作系統,符合uITRON 3.0標準。使用ROS33可以迅速、有效地開發針對印表機、PDA以及各類控制設備的嵌入式應用程序。
ROS33具有以下特點:
*支持uITRON 3.0標準——符合該標準的S級*最大任務數為255,採用優先順序調度機制,支持9種不同的優先順序,提供信號燈、郵箱、消息緩衝等多種通信機制:
*內核優先並緊湊——最小可為1.7K;
*響應快——最快調度響應時間為7.8μS(CPU主頻為33MHz,下同),最大中斷屏蔽時間為4.3μs;
*高級語言支持——除彙編語言外,還支持基於ANSI標準的C語言編程。
註釋:μITRON將系統功能分成四級。R級(必要級)只提供包括實時、多任務OS所需的基本系統調用;S級(標準級)提供所有標準的系統調用;E級(擴展級)包括附加的和擴展的系統功能;C級(CPU依賴級)的系統功能依賴於具體的CPU和系統實現方式。
ROS33基本內核按功能劃分為6大部分:
*任務管理——負責系統中任務狀態的變遷;
*任務相關的同步管理——通過睡眠/喚醒、掛起/解掛等操作,處理相關任務及任務之間的同步關係;
*同步與通信——通過信號燈、事件、郵箱等通信機制,實現獨立任務之間的同步與通信;
*系統管理——對系統環境的管理;
*時鐘管理——日曆時鐘、定時器、定時任務等的管理;
*中斷管理——開/關中斷。
圖6給出了ROS33內核的概念模型。
4 Web伺服器及上層應用程序框架
WEB伺服器所採用的方式稱為uip_connect,比通常在設計中所使用的Socket套接字更適合於嵌入式系統下面即是WEB伺服器的大體框架。
#include<uip.h>
void http_listen_init(void)
uip_listen(80);
//http listen初始化
void listen_init(void)
http_listen_init();
void application(void)
if(uip_connected()) //如果當前的連接狀態為connected
switch (uip_conn->lport)
case htons(80):
httpd; //如果80 PORT有數據到達,則調用HTTP處理HTML文件的傳送

首先,伺服器與客戶機建立連接,再通過偵聽埠80,判斷是否有客戶請求到達,若有則將調用應用程序httpd進行相應處理,否則,繼續偵聽。Httpd是用於處理HTTP請求的應用程序,具體設計在協議棧uIP中有描述。uip.h是協議uIP的一個頭文件。
在應用軟體上實現簡單WEB伺服器功能,其主要由兩個模塊構成:一是用戶登陸模塊;二是家電*模塊。用戶登陸模塊需要解決用戶的合法性檢查,即接收用戶輸入的用戶名和密碼,進行校驗,合法則進入家單*頁面,非法則發出警告頁面。家電*模塊針對各家電的硬體情況,收集信息家電的狀態碼,並通過網頁形式顯示。
在兩個模塊中,有一部分相似的處理,即對輸入的數據進行解析。現在定義數組htmlinputs來存放解析后的信息。對錶單輸入的數據進行解析后,將其name值和value值分別存放在htmlinput_struct.name和htmlinput_struct.value里,便於以後的處理。變數htmlinputcount存放表單里輸入變數的個數。定義如下:
struct htmlinput_struct htmlinputs[100];
int htmlinputcount=0;
除此外,定義函數get_inputs()和translate()對輸入的數據進行處理。
Int get_inputs();//將從表單輸入的數據分別裝到對應的name/value數據隊中
Void translate(char*sourcestr);//解讀編碼URL字元
具體程序代碼在此就不再多述。
整個上層應用程序的流程圖如圖7所示。

5小結
乙太網作為介面,以S1C33系列微處理器為硬體平台,利用軟體化的精簡嵌入式TCP/IP,能夠實現HTTP服務。當然在系統成熟的條件下,還可以考慮把乙太網介面替換為無線網路介面。本文為信息家電網路接入Internet提供了一種無需額外的PC或網關設備的解決方案。這種低成本、高性能的方案,具有可靠、靈活的特點,適用於通信速率不太、允許時延大於1s且需要連接Internet的家庭自動化設備。此外用戶還可以根據需要,按照此方法,構造自己的網路伺服器,可為普通的電氣設備或系統如公共服務設備、家庭醫療保健設備、工業自動化系統等,賦予接入Internet的能力。


[admin via 研發互助社區 ] 基於精簡TCP/IP協議棧的信息家電網路伺服器已經有3350次圍觀

http://cocdig.com/docs/show-post-40794.html