基于S3C2410的嵌入式網關的設計與研究
時間:2008-05-14 10:32:00來源:ronggang
導語:?本文設計了一種基于嵌入式處理器s3c2410及linux操作系統的串行設備與以太網通信的嵌入式網關系統
1 引言
隨著通信網絡技術和集成電路設計的高速發展,以tcp/ip網絡傳輸通信協議為代表,成熟度較高的開放式網絡通信技術向各種自動化系統進行滲透,連接并控制所有設備。
而在工業控制和各種通訊設備中,更多的卻是符合rs-232標準的串行口設備。要將串行口的數據轉發到網絡上以實現數據的遠程傳輸,就必須使用網關系統。網關又被稱為網間協議變換器,用于連接采用不同通信協議的網絡,實現網絡之間的數據傳輸。本文提出了一種基于嵌入式系統來實現串口和以太網口之間的數據傳輸的設計方案。
本文以32位嵌入式微處理器s3c241o為核心,通過移植嵌入式操作系統linux,并在linux上開發相應的驅動程序和應用程序來構建一個方便、實用的網關。
2 嵌入式網關的結構化設計
本網關主要實現串口和以太網口之間的數據傳輸。其總體結構可簡化為硬件層和軟件層兩部分。硬件層由高性能的微處理器和多個功能模塊組成,軟件層由嵌入式操作系統及應用軟件構成.
2.1 硬件設計
本系統采用結構化設計,由串行口模塊,協議轉換模塊和以太網接口模塊等三部分組成。串口的數據以報文的格式發送到以s3c2410為核心的協議轉換模塊中,協議轉換模塊完成對該報文的接收和翻譯,并通過以太網接口模塊轉發到internet上,最終實現串口設備到以太網的協議轉換。
各模塊基本組成描述如下:
?。?) 微處理器mcu
基于arm92ot內核的s3c241o微處理器是一個多用途的通用芯片,它內部集成了微處理器和常用外圍組件,特別適用于手持設備;
?。?) 1o/1oom以太網接口
選用realtek公司生產的rtl82oi芯片作為以太網的物理層接口控制芯片。再通過rj45就可連接到以太網;
?。?) flash存儲器
采用一片hy29lv16o構建flash存儲器系統,其存儲容量為2mb;
(4) sdram存儲器
選用兩片hynix公司的hy57v64162o芯片并聯構建sdram存儲器系統;
(5) jtag接口
可對芯片內部的所有部件進行訪問,通過該接口可對系統進行調試,編程等;
?。?) 串行接口
s3c241o自身就帶有兩個uart控制器,我們將它們與max232相連進行電平轉換,就可以得到兩個標準rs-232串行接口;
(7) i/o接口
主要包括鍵盤控制模塊和液晶顯示模塊等。
2.2 軟件設計
網關的軟件體系結構設計分為3個層次:
?。?) linux內核:提供文件系統管理、中斷和中斷處理、系統初始化、網絡協議棧等;
?。?) 硬件驅動層:包括驅動串口、以太網等;
?。?) 應用程序:如串口通信程序、網絡服務程序等。
● 建立linux開發環境。基于linux操作系統的應用開發環境由s3c2410的開發板和宿主pc機所構成。目標板所用到的操作系統的內核編譯、應用程序的開發和調試由宿主pc機來完成。雙方通過串口和以太網接口建立連接關系。
首先,在宿主機上安裝linux操作系統,然后從網上下載工具鏈如:arm-elf-gcc-2.95.3-2.i386.rpm將它復制到宿主機上的任一目錄下,鍵入安裝命令,將交叉編譯器安裝到宿主機,建立起交叉開發環境.就可以用交叉編譯器arm-elf-gcc編譯操作系統內核和用戶應用程序了。
● 設備驅動程序。設備驅動程序是內核和硬件之間的接口。它是一組數據結構和函數的集合,其中以init_module和cleanup_module這兩個函數和file_operations,inode,file這三個數據結構最重要,它們都在linux/fs.h中定義。這些數據結構和函數通過定義的接口控制一個或多個設備。設備驅動程序位于內核的最底層,直接與硬件進行交互。內核提供統一的系統調用,用戶程序通過這些標準系統調用來訪問硬件設備。
本設計中需要開發的硬件驅動有:以太網卡控制器,串口,lcd,小鍵盤等驅動程序。為linux內核編寫驅動要做的只是為相應的設備編寫幾個基本函數并vfs注冊即可。一般都是在一個現成的驅動程序的基礎上針對特殊的硬件設備作相應的改動。驅動編好以后,就為上層的應用程序提供了接口函數,然后開始編寫針對該設備的應用程序。最后重新編譯內核,把linux的二進制文件燒進flash存儲器,就可以使用這些外部設備了。
● 應用程序設計。本網關的主要功能就是實現串口協議和網絡協議的轉換。由于移植了linux操作系統,我們只需在linux操作系統上編寫串口應用程序和網絡應用程序就可以實現網關的設計要求。應用程序設計框圖如圖3所示。主要包括三個應用程序:linux下的串口編程、socket編程以及進程間通信。
2.3 linux下的串口編程
串口是通信應用中最簡單也是最常用的接口。在linux下,串口被當作文件對待,每個串口都被賦予了一個文件描述符。在linux中打開和預置一個串行設備的基本步驟:
?。?) 打開串口
在 linux 下串口文件是位于/dev下的,串口一為/dev/ttys0,串口二為/dev/ttys1。打開串口是通過使用標準的文件打開函數open操作。
?。?) 設置串口
設置串口包括波特率設置,效驗位和停止位設置,它主要是設置struct termios結構體各成員c_ illag, c_ oflag, c_ cflag、c_1nag的值。設置這個結構體比較復雜,下面是設置波特率的函數:
void set_speed(int fd, int speed){
//fd為打開串口的文件句柄,speed為串口速率
int i;
int status;
struct termios opt;
tcgetattr(fd, &opt);
//使用tcgetattr獲取當前設備方式
for (i= 0; i
if(speed == name_arr[i]) {
tcflush(fd, tcioflush);
cfsetispeed(&opt, speed_arr[ i ]);
//設置波特率,speed_arr[ i ]為波特率表某值
cfsetospeed(&opt, speed_arr[ i ]);
status = tcsetattr(fd1, tcsanow, &opt);
//使用tcsetattr設置設備工作方式
if(status != 0) {
perror("tcsetattr fd1");
return;
}
tcflush(fd,tcioflush);
}
?。?
?。?
?。?) 讀寫串口
設置好串口之后,把串口當作文件,使用read和write讀寫串口終端。函數原型為write(fd,buffer,length)和read(fd,buffer,length)。
?。?) 關閉串口
輸入輸出處理完畢,用close關閉串口。關閉串口就是關閉文件,即close(fd)。
2.4 linux下的socket編程
socket接口是tcp/ip網絡的api,它是建立在傳輸層協議(主要是tcp和udp)上的一種套接字規范。socket接口定義了許多函數或例程,程序員可以用它們來開發tcp/ip網絡上的應用程序。網絡的socket數據傳輸是一種特殊的i/o,socket也是一種文件描述符。socket具有一個類似于打開文件的函數調用socket(),該函數返回一個整型的socket描述符,隨后的連接建立、數據傳輸等操作都是通過該socket實現的。常用的socket類型有兩種:流式socket(sock_stream)和數據報式socket(sock_dgram)。流式是一種面向連接的socket,針對于面向連接的tcp服務應用;數據報式是一種無連接的socket,對應于無連接的udp服務應用。本方案采用流式socket,因為它提供一種可靠的面向連接的數據傳輸辦法,有自己的檢錯和糾錯機制,并且不管是對單個的數據報,還是對于數據包,它都提供了一種流式數據傳輸方式。
3 進程之間通信
在linux中,每一個進程都有它的獨立的運行空間,進程之間要實現通信就要用到系統提供的通信機制。在linux中用來進行進程間通信與同步的機制有:共享內存、信號量、消息隊列、管道、有名管道、socket等等。在本系統中,用到的是共享內存和信號量。在兩個進程間通信時用到的是共享內存,實現對它的互斥訪問用的是信號量。共享內存允許兩個或更多的進程共享一塊內存。在linux任務中通過/dev/mem設備在這段內存中尋址,進程也通過讀取這段內存的數據獲得信息。共享內存從理論上講,應該是兩個進程之間最快速的通信方式,因為它將信息直接的映射入內存省去了其它ipg方法的中間步驟。使用共享內存時,同步問題尤其重要。"信號量"就是為解決這種問題而引入的。信號量能夠讓程序員實現一種對任意事件的鎖定機制。
4 結束語
本文設計了一種基于嵌入式處理器s3c2410及linux操作系統的串行設備與以太網通信的嵌入式網關系統。本網關可實現以太網與串行設備的通信,通過改進可以滿足與更多類型的串行設備的通信。隨著以太網的發展和嵌入式系統設計被人們越來越廣泛的關注,這種設計方案將會在工業控制、樓宇自動化、智能家居等領域得到越來越廣泛的應用,具有廣闊的應用前景。
標簽:
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。