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