技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于S3C2410的嵌入式網(wǎng)關(guān)的設(shè)計(jì)與研究

基于S3C2410的嵌入式網(wǎng)關(guān)的設(shè)計(jì)與研究

時(shí)間:2008-05-14 10:32:00來(lái)源:ronggang

導(dǎo)語(yǔ):?本文設(shè)計(jì)了一種基于嵌入式處理器s3c2410及l(fā)inux操作系統(tǒng)的串行設(shè)備與以太網(wǎng)通信的嵌入式網(wǎng)關(guān)系統(tǒng)
1 引言   隨著通信網(wǎng)絡(luò)技術(shù)和集成電路設(shè)計(jì)的高速發(fā)展,以tcp/ip網(wǎng)絡(luò)傳輸通信協(xié)議為代表,成熟度較高的開(kāi)放式網(wǎng)絡(luò)通信技術(shù)向各種自動(dòng)化系統(tǒng)進(jìn)行滲透,連接并控制所有設(shè)備。   而在工業(yè)控制和各種通訊設(shè)備中,更多的卻是符合rs-232標(biāo)準(zhǔn)的串行口設(shè)備。要將串行口的數(shù)據(jù)轉(zhuǎn)發(fā)到網(wǎng)絡(luò)上以實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)程傳輸,就必須使用網(wǎng)關(guān)系統(tǒng)。網(wǎng)關(guān)又被稱(chēng)為網(wǎng)間協(xié)議變換器,用于連接采用不同通信協(xié)議的網(wǎng)絡(luò),實(shí)現(xiàn)網(wǎng)絡(luò)之間的數(shù)據(jù)傳輸。本文提出了一種基于嵌入式系統(tǒng)來(lái)實(shí)現(xiàn)串口和以太網(wǎng)口之間的數(shù)據(jù)傳輸?shù)脑O(shè)計(jì)方案。   本文以32位嵌入式微處理器s3c241o為核心,通過(guò)移植嵌入式操作系統(tǒng)linux,并在linux上開(kāi)發(fā)相應(yīng)的驅(qū)動(dòng)程序和應(yīng)用程序來(lái)構(gòu)建一個(gè)方便、實(shí)用的網(wǎng)關(guān)。 2 嵌入式網(wǎng)關(guān)的結(jié)構(gòu)化設(shè)計(jì)   本網(wǎng)關(guān)主要實(shí)現(xiàn)串口和以太網(wǎng)口之間的數(shù)據(jù)傳輸。其總體結(jié)構(gòu)可簡(jiǎn)化為硬件層和軟件層兩部分。硬件層由高性能的微處理器和多個(gè)功能模塊組成,軟件層由嵌入式操作系統(tǒng)及應(yīng)用軟件構(gòu)成.   2.1 硬件設(shè)計(jì)   本系統(tǒng)采用結(jié)構(gòu)化設(shè)計(jì),由串行口模塊,協(xié)議轉(zhuǎn)換模塊和以太網(wǎng)接口模塊等三部分組成。串口的數(shù)據(jù)以報(bào)文的格式發(fā)送到以s3c2410為核心的協(xié)議轉(zhuǎn)換模塊中,協(xié)議轉(zhuǎn)換模塊完成對(duì)該報(bào)文的接收和翻譯,并通過(guò)以太網(wǎng)接口模塊轉(zhuǎn)發(fā)到internet上,最終實(shí)現(xiàn)串口設(shè)備到以太網(wǎng)的協(xié)議轉(zhuǎn)換。   各模塊基本組成描述如下:   (1) 微處理器mcu   基于arm92ot內(nèi)核的s3c241o微處理器是一個(gè)多用途的通用芯片,它內(nèi)部集成了微處理器和常用外圍組件,特別適用于手持設(shè)備;  ?。?) 1o/1oom以太網(wǎng)接口   選用realtek公司生產(chǎn)的rtl82oi芯片作為以太網(wǎng)的物理層接口控制芯片。再通過(guò)rj45就可連接到以太網(wǎng);  ?。?) flash存儲(chǔ)器   采用一片hy29lv16o構(gòu)建flash存儲(chǔ)器系統(tǒng),其存儲(chǔ)容量為2mb;  ?。?) sdram存儲(chǔ)器   選用兩片hynix公司的hy57v64162o芯片并聯(lián)構(gòu)建sdram存儲(chǔ)器系統(tǒng);  ?。?) jtag接口   可對(duì)芯片內(nèi)部的所有部件進(jìn)行訪問(wèn),通過(guò)該接口可對(duì)系統(tǒng)進(jìn)行調(diào)試,編程等;  ?。?) 串行接口   s3c241o自身就帶有兩個(gè)uart控制器,我們將它們與max232相連進(jìn)行電平轉(zhuǎn)換,就可以得到兩個(gè)標(biāo)準(zhǔn)rs-232串行接口;  ?。?) i/o接口   主要包括鍵盤(pán)控制模塊和液晶顯示模塊等。   2.2 軟件設(shè)計(jì)   網(wǎng)關(guān)的軟件體系結(jié)構(gòu)設(shè)計(jì)分為3個(gè)層次:  ?。?) linux內(nèi)核:提供文件系統(tǒng)管理、中斷和中斷處理、系統(tǒng)初始化、網(wǎng)絡(luò)協(xié)議棧等;  ?。?) 硬件驅(qū)動(dòng)層:包括驅(qū)動(dòng)串口、以太網(wǎng)等;  ?。?) 應(yīng)用程序:如串口通信程序、網(wǎng)絡(luò)服務(wù)程序等。   ● 建立linux開(kāi)發(fā)環(huán)境?;趌inux操作系統(tǒng)的應(yīng)用開(kāi)發(fā)環(huán)境由s3c2410的開(kāi)發(fā)板和宿主pc機(jī)所構(gòu)成。目標(biāo)板所用到的操作系統(tǒng)的內(nèi)核編譯、應(yīng)用程序的開(kāi)發(fā)和調(diào)試由宿主pc機(jī)來(lái)完成。雙方通過(guò)串口和以太網(wǎng)接口建立連接關(guān)系。   首先,在宿主機(jī)上安裝linux操作系統(tǒng),然后從網(wǎng)上下載工具鏈如:arm-elf-gcc-2.95.3-2.i386.rpm將它復(fù)制到宿主機(jī)上的任一目錄下,鍵入安裝命令,將交叉編譯器安裝到宿主機(jī),建立起交叉開(kāi)發(fā)環(huán)境.就可以用交叉編譯器arm-elf-gcc編譯操作系統(tǒng)內(nèi)核和用戶(hù)應(yīng)用程序了。   ● 設(shè)備驅(qū)動(dòng)程序。設(shè)備驅(qū)動(dòng)程序是內(nèi)核和硬件之間的接口。它是一組數(shù)據(jù)結(jié)構(gòu)和函數(shù)的集合,其中以init_module和cleanup_module這兩個(gè)函數(shù)和file_operations,inode,file這三個(gè)數(shù)據(jù)結(jié)構(gòu)最重要,它們都在linux/fs.h中定義。這些數(shù)據(jù)結(jié)構(gòu)和函數(shù)通過(guò)定義的接口控制一個(gè)或多個(gè)設(shè)備。設(shè)備驅(qū)動(dòng)程序位于內(nèi)核的最底層,直接與硬件進(jìn)行交互。內(nèi)核提供統(tǒng)一的系統(tǒng)調(diào)用,用戶(hù)程序通過(guò)這些標(biāo)準(zhǔn)系統(tǒng)調(diào)用來(lái)訪問(wèn)硬件設(shè)備。   本設(shè)計(jì)中需要開(kāi)發(fā)的硬件驅(qū)動(dòng)有:以太網(wǎng)卡控制器,串口,lcd,小鍵盤(pán)等驅(qū)動(dòng)程序。為linux內(nèi)核編寫(xiě)驅(qū)動(dòng)要做的只是為相應(yīng)的設(shè)備編寫(xiě)幾個(gè)基本函數(shù)并vfs注冊(cè)即可。一般都是在一個(gè)現(xiàn)成的驅(qū)動(dòng)程序的基礎(chǔ)上針對(duì)特殊的硬件設(shè)備作相應(yīng)的改動(dòng)。驅(qū)動(dòng)編好以后,就為上層的應(yīng)用程序提供了接口函數(shù),然后開(kāi)始編寫(xiě)針對(duì)該設(shè)備的應(yīng)用程序。最后重新編譯內(nèi)核,把linux的二進(jìn)制文件燒進(jìn)flash存儲(chǔ)器,就可以使用這些外部設(shè)備了。   ● 應(yīng)用程序設(shè)計(jì)。本網(wǎng)關(guān)的主要功能就是實(shí)現(xiàn)串口協(xié)議和網(wǎng)絡(luò)協(xié)議的轉(zhuǎn)換。由于移植了linux操作系統(tǒng),我們只需在linux操作系統(tǒng)上編寫(xiě)串口應(yīng)用程序和網(wǎng)絡(luò)應(yīng)用程序就可以實(shí)現(xiàn)網(wǎng)關(guān)的設(shè)計(jì)要求。應(yīng)用程序設(shè)計(jì)框圖如圖3所示。主要包括三個(gè)應(yīng)用程序:linux下的串口編程、socket編程以及進(jìn)程間通信。   2.3 linux下的串口編程   串口是通信應(yīng)用中最簡(jiǎn)單也是最常用的接口。在linux下,串口被當(dāng)作文件對(duì)待,每個(gè)串口都被賦予了一個(gè)文件描述符。在linux中打開(kāi)和預(yù)置一個(gè)串行設(shè)備的基本步驟:  ?。?) 打開(kāi)串口   在 linux 下串口文件是位于/dev下的,串口一為/dev/ttys0,串口二為/dev/ttys1。打開(kāi)串口是通過(guò)使用標(biāo)準(zhǔn)的文件打開(kāi)函數(shù)open操作。  ?。?) 設(shè)置串口   設(shè)置串口包括波特率設(shè)置,效驗(yàn)位和停止位設(shè)置,它主要是設(shè)置struct termios結(jié)構(gòu)體各成員c_ illag, c_ oflag, c_ cflag、c_1nag的值。設(shè)置這個(gè)結(jié)構(gòu)體比較復(fù)雜,下面是設(shè)置波特率的函數(shù):   void set_speed(int fd, int speed){   //fd為打開(kāi)串口的文件句柄,speed為串口速率   int i;   int status;   struct termios opt;   tcgetattr(fd, &opt);   //使用tcgetattr獲取當(dāng)前設(shè)備方式   for (i= 0; i   if(speed == name_arr[i]) {   tcflush(fd, tcioflush);   cfsetispeed(&opt, speed_arr[ i ]);   //設(shè)置波特率,speed_arr[ i ]為波特率表某值   cfsetospeed(&opt, speed_arr[ i ]);   status = tcsetattr(fd1, tcsanow, &opt);   //使用tcsetattr設(shè)置設(shè)備工作方式   if(status != 0) {   perror("tcsetattr fd1");   return;   }   tcflush(fd,tcioflush);  ?。?   }  ?。?   (3) 讀寫(xiě)串口   設(shè)置好串口之后,把串口當(dāng)作文件,使用read和write讀寫(xiě)串口終端。函數(shù)原型為write(fd,buffer,length)和read(fd,buffer,length)。  ?。?) 關(guān)閉串口   輸入輸出處理完畢,用close關(guān)閉串口。關(guān)閉串口就是關(guān)閉文件,即close(fd)。   2.4 linux下的socket編程   socket接口是tcp/ip網(wǎng)絡(luò)的api,它是建立在傳輸層協(xié)議(主要是tcp和udp)上的一種套接字規(guī)范。socket接口定義了許多函數(shù)或例程,程序員可以用它們來(lái)開(kāi)發(fā)tcp/ip網(wǎng)絡(luò)上的應(yīng)用程序。網(wǎng)絡(luò)的socket數(shù)據(jù)傳輸是一種特殊的i/o,socket也是一種文件描述符。socket具有一個(gè)類(lèi)似于打開(kāi)文件的函數(shù)調(diào)用socket(),該函數(shù)返回一個(gè)整型的socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^(guò)該socket實(shí)現(xiàn)的。常用的socket類(lèi)型有兩種:流式socket(sock_stream)和數(shù)據(jù)報(bào)式socket(sock_dgram)。流式是一種面向連接的socket,針對(duì)于面向連接的tcp服務(wù)應(yīng)用;數(shù)據(jù)報(bào)式是一種無(wú)連接的socket,對(duì)應(yīng)于無(wú)連接的udp服務(wù)應(yīng)用。本方案采用流式socket,因?yàn)樗峁┮环N可靠的面向連接的數(shù)據(jù)傳輸辦法,有自己的檢錯(cuò)和糾錯(cuò)機(jī)制,并且不管是對(duì)單個(gè)的數(shù)據(jù)報(bào),還是對(duì)于數(shù)據(jù)包,它都提供了一種流式數(shù)據(jù)傳輸方式。 3 進(jìn)程之間通信   在linux中,每一個(gè)進(jìn)程都有它的獨(dú)立的運(yùn)行空間,進(jìn)程之間要實(shí)現(xiàn)通信就要用到系統(tǒng)提供的通信機(jī)制。在linux中用來(lái)進(jìn)行進(jìn)程間通信與同步的機(jī)制有:共享內(nèi)存、信號(hào)量、消息隊(duì)列、管道、有名管道、socket等等。在本系統(tǒng)中,用到的是共享內(nèi)存和信號(hào)量。在兩個(gè)進(jìn)程間通信時(shí)用到的是共享內(nèi)存,實(shí)現(xiàn)對(duì)它的互斥訪問(wèn)用的是信號(hào)量。共享內(nèi)存允許兩個(gè)或更多的進(jìn)程共享一塊內(nèi)存。在linux任務(wù)中通過(guò)/dev/mem設(shè)備在這段內(nèi)存中尋址,進(jìn)程也通過(guò)讀取這段內(nèi)存的數(shù)據(jù)獲得信息。共享內(nèi)存從理論上講,應(yīng)該是兩個(gè)進(jìn)程之間最快速的通信方式,因?yàn)樗鼘⑿畔⒅苯拥挠成淙雰?nèi)存省去了其它ipg方法的中間步驟。使用共享內(nèi)存時(shí),同步問(wèn)題尤其重要。"信號(hào)量"就是為解決這種問(wèn)題而引入的。信號(hào)量能夠讓程序員實(shí)現(xiàn)一種對(duì)任意事件的鎖定機(jī)制。 4 結(jié)束語(yǔ)   本文設(shè)計(jì)了一種基于嵌入式處理器s3c2410及l(fā)inux操作系統(tǒng)的串行設(shè)備與以太網(wǎng)通信的嵌入式網(wǎng)關(guān)系統(tǒng)。本網(wǎng)關(guān)可實(shí)現(xiàn)以太網(wǎng)與串行設(shè)備的通信,通過(guò)改進(jìn)可以滿(mǎn)足與更多類(lèi)型的串行設(shè)備的通信。隨著以太網(wǎng)的發(fā)展和嵌入式系統(tǒng)設(shè)計(jì)被人們?cè)絹?lái)越廣泛的關(guān)注,這種設(shè)計(jì)方案將會(huì)在工業(yè)控制、樓宇自動(dòng)化、智能家居等領(lǐng)域得到越來(lái)越廣泛的應(yīng)用,具有廣闊的應(yīng)用前景。

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:淺談變頻器容量的選擇

下一篇:微能WIN-V63矢量控制變頻器在...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見(jiàn)反饋|sitemap

傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢(xún)采購(gòu)咨詢(xún)媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書(shū) | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)