時間:2008-07-22 08:52:00來源:ronggang
摘 要:本文分析了嵌入式Internet的一個主要問題,介紹了嵌入式網關的兩種典型設計方案,設計了一個整合了內、外網通信的新型嵌入式網關,在介紹網關硬件結構的基礎上,圍繞網關的軟件構架,討論了嵌入式網關的各軟件模塊實現方法。
關鍵詞:嵌入式網關;多路通信接口;嵌入式Internet;μCLinux
嵌入式Internet技術的出現,使得嵌入式系統與Internet之間可以實現資源共享、信息通信和狀態測控等功能。目前,該技術的主要問題之一就是Internet上面的各種通信協議對于計算機存儲器、運算速度等的要求比較高,而測控領域中大量存在的8位和16位MCU系統是無法處理這些的。要解決這個問題,一個可行的方法就是利用在嵌入式領域比較常用的總線,如RS485、RS232、CAN總線等,將這些處理能力較低的嵌入式設備連接起來,接入到網關所提供的通信接口上,由網關來實現協議棧和協議轉換,從而就將8位/16位的嵌入式設備接入到互聯網。
1. 嵌入式網關的典型設計方案
網關又被稱為網間協議變換器,用于連接采用不同通信協議的網絡,實現網絡之間的數據傳輸。當一個報文要求從一個網段發送到另一個網段時,網關需要完成對該報文的接收、翻譯與轉發工作[1]。就目前已應用到嵌入式系統中的網關來說,主要有以下兩種:
1.1 利用PC機來實現的網關
利用PC機的豐富資源和較強的處理能力,在其上構建WEB服務器,實現和Internet客戶端的通信,而8位/16位MCU設備連接到PC總線的擴展接口或特定的板卡上,通過通信程序實現與PC機通信,進而利用PC機這一網關接入互聯網。這種方式實現相對容易,靈活性較好,但成本較高,設備的可靠性和環境適應性都比較差。
1.2 利用32位嵌入式系統實現的網關
它以32位嵌入式系統為硬件基礎,體積小、成本低,設備的可靠性和環境適應性較好。按實現TCP/IP協議棧方法的不同,可將這種嵌入式網關分為以下兩個設計方案。
(1)基于軟件來實現TCP/IP協議棧[2]
這一方案通常有兩種實現方法,第一種是嵌入式操作系統帶有TCP/IP協議棧。網關運行在嵌入式操作系統之上,可以利用嵌入式操作系統的強大功能,按用戶需求實現很多復雜的功能。第二種方法則單獨采用TCP/IP協議棧軟件模塊,不使用嵌入式操作系統,所構建的系統只占用很小的存儲空間,但是如果要實現復雜的功能,則編程的復雜性較大。 (2)直接利用TCP/IP協議棧芯片[2]
在這種方案中,將集成有TCP/IP協議棧的芯片直接使用在嵌入式網關中,使得設計簡單,但增加了一個芯片,也就增加了制造成本,開發時需要熟悉TCP/IP協議棧芯片的接口。
2. 嵌入式網關的硬件結構
網關的硬件結構如圖1所示,其中處理器使用基于ARM7TDMI的SAMSUNG S3C44B0X,它是16/32位RISC處理器,工作在66MHz,內置有豐富的片內外設,常用于手持設備和網絡設備當中。系統內存使用4M×16bit 的HY57V65160b SDRAM,存儲器使用1M×16bit的SST39VF160 Flash。網關的以太網控制器采用RTL8019AS,它支持IEEE802.3,支持8/16位數據總線,內置16KB SRAM,支持全雙工方式,收發可同時達到10Mbps。網關提供多路本地通信接口,其中RS232接口利用S3C44B0X的UART0口實現,使用MAX3221E實現電平隔離和轉換。RS485接口使用S3C44B0X的UART1口實現,外接MAX485完成TTL電平與RS485電平的轉換和數據收發。CAN總線接口采用總線連接方式,使用PHILIPS公司的CAN控制器SJA1000T,它兼容基本CAN模式(BasicCAN)和增強CAN模式(PeliCAN),符合CAN2.0B協議,具有完成CAN通信協議所要求的全部特性,其外接TJA1040T作為CAN總線接口的收發器。此外,系統還預留了可用于擴展的其他通信接口。
圖1 嵌入式網關硬件結構
圖2嵌入式網關的軟件構架
3. 嵌入式網關的軟件設計
3.1 軟件構架
本文所設計的嵌入式網關運行在嵌入式操作系統μCLinux之上,對外以WEB服務器與Intertent客戶端交互;對內則按總線標準的不同,通過多個通信接口與多個不同類型的集散式子網相連,如圖2所示。網關將內網中的各通信子網以及外網的Internet都看成是等同的網絡,在轉發數據時屏蔽網絡之間的差異,將來自不同網絡的數據都轉換為統一格式的轉發數據包,并采用基于優先級的調度機制來完成轉發。這樣便將內網和外網的通信整合在一起,實現各種子網通信協議與TCP/IP協議的轉換,以及各種子網通信協議相互之間的轉換。
當WEB服務器接收到來自Internet客戶端的請求時,如果是請求靜態網頁,則將網頁傳給客戶端(對應于圖2中的①,下同);如果是要與本地子網的終端設備通信,服務器便將通信數據發往Internet接口模塊(②),由其完成對數據的解析,并封裝成轉發數據包,發往接收子模塊(③);相反,當Internet接口模塊收到來自發送子模塊的數據包時(④),則解析該數據包后生成動態網頁,發往WEB服務器(②),服務器再將其發到客戶端(①)。
當本地子網的某個終端設備要與別的設備通信,或者要將響應數據包發往Internet客戶端時,按照一定的調度機制,將數據從終端設備發往內網通信模塊(⑤),由該模塊將數據轉換為網關內部的轉發數據包后,發往接收子模塊(⑥)。與此相對,如果內網通信模塊收到發送子模塊發來的數據包(⑦),則根據該數據包的目的地址,選擇相應的子網,將數據包轉換為符合該子網的通信協議下的數據,再發往目的設備(⑤)。
接收子模塊在接收到來自Internet(③)或本地子網(⑥)的數據包后,將這些格式統一的數據包按照優先級高低插入數據隊列中(⑧)。當基于優先級的隊列中有數據包的時候,發送子模塊便從中取出數據包(⑨),發往目的子網(④⑦)。
3.2 嵌入式操作系統μCLinux的移植以及Boa服務器的配置
μClinux是一個完全符合GNU/GPL(通用公共許可證)的項目,其代碼完全開放,專門針對沒有MMU的MPU,通過對標準Linux內核的改動,針對嵌入式系統進行小型化處理,形成了一個高度優化的、代碼緊湊的嵌入式Linux。將μClinux應用到網關中,可以利用其完備的網絡功能,減小開發的難度,縮短開發時間。使用μClinux,第一步要做的就是根據網關的硬件平臺移植μClinux,首先要在PC上安裝Linux操作系統,下載uClinux源代碼壓縮包并解壓,下載并安裝交叉編譯工具,建立交叉編譯環境;其次根據不同的硬件系統修改源代碼,編寫或修改一些特殊硬件的驅動程序;然后配置內核,生成可在RAM中運行的內核文件;最后燒寫到硬件系統的Flash存儲器中,加電運行。
μClinux中常用的WEB服務器有:Boa、thttpd、httpd,網關可選擇支持認證、支持CGI、非常適合于嵌入式系統的Boa WEB 服務器[3]。Boa是一個單任務的HTTP服務器,它不為每個訪問的連接單獨開啟一個進程,也不會為多個連接而開啟多個自身的拷貝,對所有活動的HTTP連接都在內部進行處理,而只為每個CGI連接啟動新的進程,因此Boa在同等硬件條件下速度更快。使用Boa WEB服務器,需要對其運行環境、參數等進行設置,如設置偵聽端口為80,設置服務器的文件根目錄DocumentRoot,設置CGI文件的存放目錄等。
3.3 Internet接口模塊的設計
Internet接口模塊實質上是一個CGI[3] (公共網關接口協議Common Gateway Interface)程序,CGI是對HTTP協議的補充,是一個用于定義WEB服務器與外部程序之間通信方式的標準,定義了建立互操作中雙方必須遵守的規則集。CGI技術較為成熟,相關文獻也較多,故本文不做詳細論述,而是重點介紹一下Internet模塊的實現算法,其流程圖如圖3所示。
圖3 Internet接口模塊流程圖
Internet客戶端可用“GET”或“POST”方式提交數據到WEB服務器上,WEB服務器會將本次所用的提交方式保存到環境變量REQUEST_METHOD中。如果是“GET”方式,則服務器將有效數據保存到環境變量QUERY_STRING中,Internet模塊可直接讀取這一環境變量來獲得有效數據;如果是“POST”方式,則服務器將有效數據的長度保存到環境變量CONTENT_LENGTH中,則Internet模塊就可在這一數據長度的控制下從標準輸入讀入有效數據。在獲得了有效數據之后,Internet模塊解析它們,生成轉發數據包,發往轉發模塊。到此數據接收完畢,進程掛起自身,等待信號量InternetRec有效。當InternetRec有效時,說明有來自內網的反饋數據包到來,則進程被喚醒,接收反饋數據包,在判斷目的地址無誤后,根據數據包數據生成動態網頁,交予WEB服務器發送到客戶端。
3.4 轉發數據包的設計
轉發模塊完成網關內部的數據包轉發功能,它維護了一個基于優先級的數據隊列(見圖2),該隊列屬于臨界資源,由接收子模塊和發送子模塊互斥使用。轉發數據包的結構應有一定的通用性,具有兼容各種通信子網或Internet數據的能力,可用下面的數據結構來定義:
struct DataProtocol{
int CommType;
struct Addr_t DstAddr;
struct Addr_t SrcAddr;
int Prio;
struct DataStruct *DataHead;
int DataLengh;
struct DataProtocol *pDProtc; };
(1)int CommType; 定義通信的類型。用來指明當前所傳送的數據包的類型,即DATATYPE(有效數據包)和ERRORTYPE(錯誤信息包)。DATATYPE是指本數據包的數據域中的是有效的數據;而ERRORTYPE是指數據域中攜帶的是出錯信息。網關在處理數據包的時候,就可以先判斷數據包的類型,再采用相應的處理流程,這樣便提高了處理的效率。
(2)struct Addr_t DstAddr; 通信的目的地址。用以指明數據發往的目的地址,其數據類型定義如下:
struct Addr_t{
unsigned char SubNet; //指明是何種網絡(本地子網或Internet)
unsigned char DevAddr; }; //指明子網內的終端設備地址
說明:由于網關所使用的Boa WEB服務器是單任務的,一次僅處理一個Internet連接,故當SubNet為Internet時,DevAddr應為零。
(3)struct Addr_t SrcAddr; 通信的源地址,用以指明數據的源地址。
(4)int Prio; 數據包優先級。對來自不同通信子網以及不同設備的數據包,根據通信的實時性要求不同,定義不同的數據包優先級。在轉發模塊中,優先級高的數據包被插入到隊列的頭部,優先被轉發到目的網絡。在指定具體的數據包優先級時,采用Prio數值越小優先級越高的方式,且規定與Internet相關的數據包較內網間傳遞的數據包有更高的優先級。
(5)struct DataStruct *DataHead; 存儲有效數據的鏈表隊列的頭指針。該鏈表就是數據包的數據域部分,其數據類型定義如下:
struct DataStruct{
char *Name;
char *Value;
struct DataStruct *pDStruct; };
*Name保存數據或操作的類型,可為 “INFO”(說明信息)、“READ”(讀數據)、“WRITE”(寫數據)、“CONTROL”(發送控制指令);
*Value的格式為:操作名稱或對象 [參數1] [參數2] …… [參數n]
其中,操作名稱或對象和參數內都不能有空格,參數之間用空格分開,參數數量可為零。
比如要啟動某個設備,只需傳送如下數據:Name->CONTROL,Value->START;要讀取設備溫度值,只需傳送:Name->READ,Value->TEMPERATURE。數據包僅是保存了有效數據的ASCII碼,嵌入式網關只完成將這些ASCII碼從發送端傳送到接收端,實現路由功能和中間協議轉換功能,這些ASCII碼所表示的具體含義由發送端和接收端的應用層來規定,這樣便實現了一種與具體數據意義無關的通用數據傳送通道。
(6)int DataLengh; 指明有效數據中,“Name”、“Value”對的數目。
(7)struct DataProtocol *pDProtc; 指向下一個數據包的指針。在基于優先級的數據隊列中,各數據包利用該指針,采用鏈表的形式加以組織,這樣有利于數據的插入和刪除。
3.5 內網通信模塊及設備通信模塊的設計
內網通信模塊由調度子模塊和若干子網接口子模塊組成,其中前者較為簡單,主要是完成轉發模塊和各子網接口子模塊之間的數據包分發及收集功能;而后者就較為復雜了,涉及到各種網絡的通信協議和數據格式,它與終端設備的通信模塊形成一個基于該子網通信協議的通信系統,限于篇幅,本文不可能盡述,僅以RS232為例作一個簡單介紹。
RS232標準僅定義了ISO/OSI基本參考模型中物理層規格和鏈路層硬件接口規格,要實現集散式的RS232子網的通信,需要一個網絡層來進行終端設備的地址路由。此外,還要在鏈路層的軟件層面上,設計一個數據幀格式,用于封裝所傳輸的數據。在具體的實現上,就體現在轉發數據包和RS232數據幀格式間的解析和轉換封裝上。
終端設備要接入嵌入式網關,在硬件上必須提供一個通信接口,如RS232接口、RS485接口或CAN接口等。在軟件上則必須有一個通信模塊,主要完成:從網關接收數據,經解析后提交給上層應用程序;從上層應用接收需發送的數據,對其封裝,再發送到網關。應用程序按照應用層的協議規則分析接收到的有效數據,做出相應的操作或響應。
4. 結束語
本文在分析典型的嵌入式網關設計方案的基礎上,提出了一種具有多通信接口的整合內、外網通信的嵌入式網關,適用于將8/16位嵌入式設備接入互聯網的應用場合,該方案可以根據應用需求對各接口應用模塊進行擴展和裁剪。在具體應用中,還需要增強和改進網關的安全性,進一步研究將更多的本地通信子網加入到網關中,從而增強網關的適用性。
本文作者創新點:設計了一個整合內外網通信、能為8/16位MCU系統接入互聯網提供多個通信接口的嵌入式網關,詳細討論了網關軟件模塊的實現和轉發數據包的格式。
參考文獻:
[1] 孟軍英,劉教民,王震洲. 基于ARM微處理器的CAN/以太網嵌入式網關[J]. 河北工業大學學報. 2005年8月. 第34卷增刊. 115-117.
[2] 趙國安,高航,張有成. 由W3100A構成嵌入式網關的家庭智能系統[J]. 單片機與嵌入式系統應用. 2003年第4期:51-53.
[3] 王羲,任琦梅.基于44B0平臺的uC-Linux Web服務器實現方法研究[J].微計算機信息, 2005, 3-1:76-77
標簽:
上一篇:基于神經網絡的機器人的逆運...
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-05-19
2025-04-30
2025-04-11
2025-04-08
2025-03-31
2025-03-26