ARM9 的嵌入式多串口服務(wù)器設(shè)計(jì)_第1頁(yè)
ARM9 的嵌入式多串口服務(wù)器設(shè)計(jì)_第2頁(yè)
ARM9 的嵌入式多串口服務(wù)器設(shè)計(jì)_第3頁(yè)
ARM9 的嵌入式多串口服務(wù)器設(shè)計(jì)_第4頁(yè)
ARM9 的嵌入式多串口服務(wù)器設(shè)計(jì)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余2頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、【W(wǎng)ord版本下載可任意編輯】 ARM9 的嵌入式多串口服務(wù)器設(shè)計(jì) 隨著計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展和物聯(lián)網(wǎng)的興起,將智能儀器接入網(wǎng)絡(luò)已成為一種趨勢(shì),以實(shí)現(xiàn)數(shù)據(jù)的共享與遠(yuǎn)程管理。但是目前大多智能儀器使用的是異步串行通信接口RS-232C /485 /422,因此迫切需要一種能將異步串行通信協(xié)議轉(zhuǎn)換為以太網(wǎng)TCP /IP 協(xié)議的協(xié)議轉(zhuǎn)換器,使現(xiàn)有的串行通信設(shè)備方便地接入以太網(wǎng),而不需要改變?cè)袃x器設(shè)備的硬件。為此,筆者研究設(shè)計(jì)了基于ARM9微處理器和Linux 操作系統(tǒng)的嵌入式多串口服務(wù)器。 1 系統(tǒng)總體思路 采用以ARM920T 為內(nèi)核的S3C2440A 微處理器運(yùn)行Linux 操作系統(tǒng),使用100MBa

2、se-T 網(wǎng)絡(luò)在串行設(shè)備與遠(yuǎn)端主機(jī)之間有效地開(kāi)展傳輸數(shù)據(jù),這樣通過(guò)串口服務(wù)器使串行設(shè)備快速接入以太網(wǎng),利用以太網(wǎng)的TCP /IP 協(xié)議開(kāi)展串口數(shù)據(jù)包的傳輸。嵌入式串口服務(wù)器作為以太網(wǎng)數(shù)據(jù)與串口數(shù)據(jù)之間交互的中間橋梁,負(fù)責(zé)數(shù)據(jù)的雙向透明傳送。服務(wù)器端的主要任務(wù)是在ARM 處理器中實(shí)現(xiàn)RS-232C /485 /422 轉(zhuǎn)TCP /IP 協(xié)議網(wǎng)關(guān),完成對(duì)各端口的監(jiān)聽(tīng)和數(shù)據(jù)的雙向傳輸,當(dāng)端口有數(shù)據(jù)產(chǎn)生或客戶(hù)端有數(shù)據(jù)請(qǐng)求時(shí)啟動(dòng)獨(dú)立線(xiàn)程,保證實(shí)時(shí)而又不丟失地開(kāi)展數(shù)據(jù)傳輸?;谏鲜鲆笙到y(tǒng)必須具備: 一套對(duì)網(wǎng)絡(luò)支持良好的嵌入式操作系統(tǒng),并且可根據(jù)專(zhuān)用的硬件平臺(tái)開(kāi)展裁剪; 微處理器的運(yùn)行速度與處理數(shù)據(jù)的能力

3、,外圍芯片接口友好。 筆者選用Linux 作為實(shí)時(shí)操作系統(tǒng),并開(kāi)展移植與配置使其可以運(yùn)行在以ARM9 為的硬件平臺(tái)上。S3C2440A 自帶三路串行通信口,完夠滿(mǎn)足多串口服務(wù)器的設(shè)計(jì)要求,但考慮到網(wǎng)絡(luò)數(shù)據(jù)傳輸與串口數(shù)據(jù)傳輸速率不匹配,需要在硬件板卡上擴(kuò)展SDRAM 和NORFLASH,另外系統(tǒng)還需擴(kuò)展以太網(wǎng)控制器芯片。系統(tǒng)的總體設(shè)計(jì)框架如圖1 所示。 2 硬件電路 系統(tǒng)可同時(shí)獨(dú)立地與兩路串行端口通信,當(dāng)數(shù)據(jù)由以太網(wǎng)傳送給串口服務(wù)器時(shí)完成數(shù)據(jù)的存儲(chǔ)與數(shù)據(jù)格式的轉(zhuǎn)換與處理,為數(shù)據(jù)傳向指定的串行口做準(zhǔn)備。當(dāng)系統(tǒng)解包處理完成后,根據(jù)TCP /IP 協(xié)議的數(shù)據(jù)幀的幀頭信息就能獲得該數(shù)據(jù)包的發(fā)送目標(biāo)串口,

4、這樣就完成了從以太網(wǎng)到串行口數(shù)據(jù)的傳輸; 當(dāng)數(shù)據(jù)由串口設(shè)備傳送到串口服務(wù)器時(shí)完成數(shù)據(jù)的分析、處理與格式轉(zhuǎn)換,為數(shù)據(jù)傳向以太網(wǎng)口做準(zhǔn)備,當(dāng)數(shù)據(jù)打包結(jié)束后將其從以太網(wǎng)口發(fā)送出去,這樣就完成了串行口到以太網(wǎng)數(shù)據(jù)的傳輸。 2.1 S3C2440A 擴(kuò)展以太網(wǎng)模塊電路 DM9000AEP 是一款高集成度且成本較低的單片快速以太網(wǎng)媒體介質(zhì)訪問(wèn)層MAC 控制器,上有通用處理器接口,10M/100M 物理層和16KbyteSRAM,低功耗、高性能IO 管腳兼容3. 3 /5. 0V 電壓。DM9000AEP 合成了以太網(wǎng)MAC、物理層PHY 和MMU,內(nèi)置AUTOMDI2X 功能10 /100MPHY,芯片可

5、以根據(jù)處理器提供8 /16 /32bit 3 種連接方式實(shí)現(xiàn)以太網(wǎng)MAC 層和PHY 層) 的功能。 在如圖2 所示的電路中, IOR#管腳接處理器的LnOE 讀信號(hào)端, IOW#接處理器的LnWE 寫(xiě)信號(hào)端,CS#片選信號(hào)端接處理器的nGCS4 片選信號(hào),SD0 SD15 分別接處理器的數(shù)據(jù)總線(xiàn),中斷信號(hào)INT 接處理器的EINT18 管腳,RX +、RX -、TX + 和TX 分別是兩對(duì)差分收發(fā)信號(hào)線(xiàn)接帶有隔離變壓器的HR911105A 的RJ45 座連接,如圖3 所示。訪問(wèn)網(wǎng)卡以總線(xiàn)形式實(shí)現(xiàn),網(wǎng)卡的IO 基址為300H,片選信號(hào)接在了NGCS4 上,所以網(wǎng)卡IO 的基址為0 x20000

6、300H.由“DM9000 地址端口= 高位片選地址+ 300H + 0; DM9000 數(shù)據(jù)端口= 高位片選地址+ 300H + 4”可知,DM9000 端口的端口地址為020000300,DM9000 數(shù)據(jù)的端口地址為020000304.S3C2440 通過(guò)數(shù)據(jù)端口與地址端口并結(jié)合讀/寫(xiě)信號(hào)線(xiàn)就可以對(duì)DM9000 開(kāi)展讀、寫(xiě)操作了。圖2 中只用了一根地址線(xiàn)LADDR2,這是由DM9000AEP 的特性決定的,DM9000AEP 的地址信號(hào)和數(shù)據(jù)信號(hào)復(fù)用,使用CMD 引腳來(lái)區(qū)分它們( CMD 為低時(shí)數(shù)據(jù)總線(xiàn)上傳輸?shù)氖堑刂沸盘?hào),CMD 為高電平時(shí)傳輸?shù)氖菙?shù)據(jù)信號(hào)) .訪問(wèn)DM9000AEP 內(nèi)

7、部存放器時(shí),需要將CMD 置為低電平,發(fā)出地址信號(hào); 然后將CMD置為高電平,讀/寫(xiě)數(shù)據(jù)。另外,總數(shù)位寬16 位,兩對(duì)差分接收與發(fā)送信號(hào)線(xiàn),特別要注意的是: 在PCB 布線(xiàn)時(shí)這兩對(duì)線(xiàn)必須走差分線(xiàn),否則接收和發(fā)送數(shù)據(jù)將不穩(wěn)定,模擬地與數(shù)字地也要處理好。 圖2 網(wǎng)卡接口電路 2.2 S3C2440 串口模塊電路 S3C2440 本身自帶三路獨(dú)立的UART 接口,在設(shè)計(jì)嵌入式串口服務(wù)器系統(tǒng)時(shí),應(yīng)用了S3C2440 串口模塊的兩路UART 接口,另外一路UART 接口做開(kāi)發(fā)時(shí)的打印控制臺(tái)用。這兩路串行口用三線(xiàn)通信,采用MAX3232 作為電平轉(zhuǎn)換芯片,分別配置處理器的GPH2、CPH3、CPH4 和C

8、PG5,4 個(gè)GPIO 口為T(mén)XD0、RXD0、TXD1 和RXD1 串口收發(fā)信號(hào)線(xiàn)。RS-232C 接口電路如圖4 所示。 3 系統(tǒng)軟件 系統(tǒng)軟件的設(shè)計(jì)目標(biāo): 嵌入式串口服務(wù)器能夠接收來(lái)自以太網(wǎng)的數(shù)據(jù)流,將以太網(wǎng)數(shù)據(jù)流轉(zhuǎn)換為串行口數(shù)據(jù)流發(fā)送給指定串口; 實(shí)現(xiàn)串口數(shù)據(jù)流到以太網(wǎng)數(shù)據(jù)流的逆過(guò)程。軟件平臺(tái)采用擁有完備TCP /IP 協(xié)議棧和豐富源碼資源的Linux作為串口服務(wù)器的操作系統(tǒng),在ARM9 上移植并裁剪Linux 系統(tǒng),同時(shí)移植完善根文件系統(tǒng),為應(yīng)用層軟件開(kāi)發(fā)提供平臺(tái)。應(yīng)用程序軟件的主要任務(wù)如圖5 所示,通過(guò)Linux 系統(tǒng)調(diào)用接口、調(diào)用串口函數(shù)讀取數(shù)據(jù),并將數(shù)據(jù)通過(guò)socket 接口發(fā)

9、往以太網(wǎng)口; 接收socket 端數(shù)據(jù)、調(diào)用串口設(shè)備函數(shù),將數(shù)據(jù)發(fā)往指定串口。 3.1 在Linux 系統(tǒng)中對(duì)串口的操作 UART 的操作主要有: 數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、產(chǎn)生中斷、設(shè)置波特率、loopback 模式、紅外模式和硬/軟流控模式7 部分。在Linux 中,所有設(shè)備文件一般都位于“/dev”下,其中串口對(duì)應(yīng)的設(shè)備為“/dev /ttySx”,在Linux 下對(duì)設(shè)備的操作方法與對(duì)文件的操作方法一樣。下面就是設(shè)計(jì)中串口應(yīng)用的開(kāi)發(fā)步驟。 串口設(shè)置主要設(shè)置struct termios 構(gòu)造體成員,具體的串口操作函數(shù)此處略去,串口操作流程如圖6 所示。 3.2 Linux 網(wǎng)絡(luò)套接字編程步驟 在

10、Linux 中的網(wǎng)絡(luò)編程通過(guò)socket 接口開(kāi)展。socket 是一種特殊的IO 接口,也是一種文件描述符,它是一種常用的進(jìn)程之間的通信機(jī)制,通過(guò)它不僅能實(shí)現(xiàn)本地機(jī)器上進(jìn)程間的通信,而且通過(guò)網(wǎng)絡(luò)能夠在不同機(jī)器上的進(jìn)程間開(kāi)展通信。 嵌入式串口服務(wù)器系統(tǒng)網(wǎng)絡(luò)套接字編程步驟如圖7 所示。 系統(tǒng)上電后,嵌入式服務(wù)器進(jìn)入Linux 系統(tǒng)并自動(dòng)運(yùn)行裝載在其內(nèi)的server 程序。作為服務(wù)器, server 程序在開(kāi)始運(yùn)行時(shí)就為每一個(gè)打開(kāi)的串口創(chuàng)立recvpcwritearm 和readarmsendpc 線(xiàn)程,并在網(wǎng)絡(luò)連接正常以及客戶(hù)端沒(méi)有執(zhí)行關(guān)閉串口的操作時(shí),每一個(gè)已打開(kāi)串口對(duì)應(yīng)的兩個(gè)線(xiàn)程將不會(huì)結(jié)束,

11、這樣在系統(tǒng)滿(mǎn)負(fù)荷運(yùn)行時(shí),系統(tǒng)將同時(shí)開(kāi)啟4 個(gè)線(xiàn)程。嵌入式串口服務(wù)器主程序流程如圖8 所示,主函數(shù)實(shí)現(xiàn)套接字的初始化工作,建立兩路監(jiān)聽(tīng)套接字,分別初始化線(xiàn)程recvpcwritearmsocket套接字和readarmsendpc socket套接字com 為串行端口號(hào)。一旦接收到客戶(hù)端的連接請(qǐng)求,判斷客戶(hù)端請(qǐng)求的方式后,啟用相應(yīng)的進(jìn)程函數(shù)開(kāi)展數(shù)據(jù)處理。 4 試驗(yàn) 4.1 數(shù)據(jù)上行測(cè)試 數(shù)據(jù)上行測(cè)試指串口設(shè)備發(fā)送信息到嵌入式串口服務(wù)器,通過(guò)嵌入式串口服務(wù)器將數(shù)據(jù)從以太網(wǎng)口傳輸出去??紤]實(shí)際使用過(guò)程中上行數(shù)據(jù)量較大,為了模擬工業(yè)現(xiàn)場(chǎng)接收大量的數(shù)據(jù),以“1234567890abcdefghijklm

12、nopqrstuvwsyz”構(gòu)成的數(shù)據(jù)包開(kāi)展模擬。 測(cè)試方法為每秒鐘連續(xù)不斷地發(fā)送“1234567890abcdefghijklmnopqrstuvwsyz”,使之構(gòu)成100KByte 的數(shù)據(jù)包,觀察客戶(hù)端程序能否正常收到這個(gè)數(shù)據(jù)包。試驗(yàn)測(cè)試結(jié)果如圖9 所示,當(dāng)從“終端串口設(shè)備”向上位機(jī)發(fā)送100KByte 數(shù)據(jù)時(shí),在客戶(hù)端一側(cè)正常收到了這些數(shù)據(jù),并且沒(méi)有丟失現(xiàn)象。 4.2 數(shù)據(jù)下行測(cè)試 數(shù)據(jù)下行測(cè)試指通過(guò)工控機(jī)上的以太網(wǎng)口發(fā)送數(shù)據(jù)給串口服務(wù)器,串口服務(wù)器接收以太網(wǎng)數(shù)據(jù)幀并開(kāi)展格式轉(zhuǎn)換,同時(shí)判斷發(fā)往指定的串口設(shè)備。在實(shí)際使用過(guò)程中,上位機(jī)發(fā)送到串行終端設(shè)備的數(shù)據(jù)量較小,這些數(shù)據(jù)一般都是由操作人員輸入的數(shù)據(jù),因此可以用單個(gè)數(shù)據(jù)流“1234567890abcDefghijklmnopqrstuvwxyz”開(kāi)展測(cè)試。 測(cè)試方法是利用運(yùn)行在PC 機(jī)上的客戶(hù)端程序每秒鐘發(fā)送連續(xù)數(shù)據(jù)流,觀察另一臺(tái)PC 機(jī)上串口調(diào)試助手是否正常接收到數(shù)據(jù)。試驗(yàn)測(cè)試結(jié)果如圖10 所示,當(dāng)客戶(hù)端程序發(fā)送數(shù)據(jù)時(shí),在終端串口設(shè)備上得到同樣的數(shù)據(jù)流。 5 結(jié)束語(yǔ) 筆者利用完全開(kāi)源的Linux 操作系統(tǒng),將其移植、裁剪后設(shè)計(jì)嵌入式串口服務(wù)器系統(tǒng),選用非常適用于通信產(chǎn)品中的ARM9 內(nèi)核的S3C2440A 微處理器和DM9000AEP 芯片

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論