基于ARM9 的嵌入式多串口服務(wù)器設(shè)計
出處:電子愛好者博客 發(fā)布于:2013-05-15 12:00:19
摘要:以ARM920T 為內(nèi)核的S3C2440A 作為主控制器和以太網(wǎng)控制芯片DM9000AEP 設(shè)計硬件平臺; 構(gòu)建并移植適合嵌入式串口服務(wù)器系統(tǒng)的嵌入式Linux 操作系統(tǒng),利用Linux 完善的TCP/IP 協(xié)議設(shè)計ARM 端的多線程網(wǎng)絡(luò)服務(wù)器程序。設(shè)計實現(xiàn)RS-232C 串口與以太網(wǎng)口數(shù)據(jù)的雙向傳輸,使現(xiàn)有的智能儀器設(shè)備成功接入以太網(wǎng)。
隨著計算機網(wǎng)絡(luò)的發(fā)展和物聯(lián)網(wǎng)的興起,將智能儀器接入網(wǎng)絡(luò)已成為一種趨勢,以實現(xiàn)數(shù)據(jù)的共享與遠程管理。但是目前大多智能儀器使用的是異步串行通信接口RS-232C /485 /422,因此迫切需要一種能將異步串行通信協(xié)議轉(zhuǎn)換為以太網(wǎng)TCP /IP 協(xié)議的協(xié)議轉(zhuǎn)換器,使現(xiàn)有的串行通信設(shè)備方便地接入以太網(wǎng),而不需要改變原有儀器設(shè)備的硬件。為此,筆者研究設(shè)計了基于ARM9微處理器和Linux 操作系統(tǒng)的嵌入式多串口服務(wù)器。
1 系統(tǒng)總體思路
采用以ARM920T 為內(nèi)核的S3C2440A 微處理器運行Linux 操作系統(tǒng),使用100MBase-T 網(wǎng)絡(luò)在串行設(shè)備與遠端主機之間有效地進行傳輸數(shù)據(jù),這樣通過串口服務(wù)器使串行設(shè)備快速接入以太網(wǎng),利用以太網(wǎng)的TCP /IP 協(xié)議進行串口數(shù)據(jù)包的傳輸。嵌入式串口服務(wù)器作為以太網(wǎng)數(shù)據(jù)與串口數(shù)據(jù)之間交互的中間橋梁,負責數(shù)據(jù)的雙向透明傳送。服務(wù)器端的主要任務(wù)是在ARM 處理器中實現(xiàn)RS-232C /485 /422 轉(zhuǎn)TCP /IP 協(xié)議網(wǎng)關(guān),完成對各端口的監(jiān)聽和數(shù)據(jù)的雙向傳輸,當端口有數(shù)據(jù)產(chǎn)生或客戶端有數(shù)據(jù)請求時啟動獨立線程,保證實時而又不丟失地進行數(shù)據(jù)傳輸?;谏鲜鲆笙到y(tǒng)必須具備: 一套對網(wǎng)絡(luò)支持良好的嵌入式操作系統(tǒng),并且可根據(jù)專用的硬件平臺進行裁剪; 微處理器的運行速度與處理數(shù)據(jù)的能力,外圍芯片接口友好。
筆者選用Linux 作為實時操作系統(tǒng),并進行移植與配置使其可以運行在以ARM9 為的硬件平臺上。S3C2440A 自帶三路串行通信口,完夠滿足多串口服務(wù)器的設(shè)計要求,但考慮到網(wǎng)絡(luò)數(shù)據(jù)傳輸與串口數(shù)據(jù)傳輸速率不匹配,需要在硬件板卡上擴展SDRAM 和NORFLASH,另外系統(tǒng)還需擴展以太網(wǎng)控制器芯片。系統(tǒng)的總體設(shè)計框架如圖1 所示。

2 硬件電路
系統(tǒng)可同時獨立地與兩路串行端口通信,當數(shù)據(jù)由以太網(wǎng)傳送給串口服務(wù)器時完成數(shù)據(jù)的存儲與數(shù)據(jù)格式的轉(zhuǎn)換與處理,為數(shù)據(jù)傳向指定的串行口做準備。當系統(tǒng)解包處理完成后,根據(jù)TCP /IP 協(xié)議的數(shù)據(jù)幀的幀頭信息就能獲得該數(shù)據(jù)包的發(fā)送目標串口,這樣就完成了從以太網(wǎng)到串行口數(shù)據(jù)的傳輸; 當數(shù)據(jù)由串口設(shè)備傳送到串口服務(wù)器時完成數(shù)據(jù)的分析、處理與格式轉(zhuǎn)換,為數(shù)據(jù)傳向以太網(wǎng)口做準備,當數(shù)據(jù)打包結(jié)束后將其從以太網(wǎng)口發(fā)送出去,這樣就完成了串行口到以太網(wǎng)數(shù)據(jù)的傳輸。
2.1 S3C2440A 擴展以太網(wǎng)模塊電路
DM9000AEP 是一款高集成度且成本較低的單片快速以太網(wǎng)媒體介質(zhì)訪問層MAC 控制器,上有通用處理器接口,10M/100M 物理層和16KbyteSRAM,低功耗、高性能IO 管腳兼容3. 3 /5. 0V 電壓。DM9000AEP 合成了以太網(wǎng)MAC、物理層PHY 和MMU,內(nèi)置AUTOMDI2X 功能10 /100MPHY,芯片可以根據(jù)處理器提供8 /16 /32bit 3 種連接方式實現(xiàn)以太網(wǎng)MAC 層和PHY 層) 的功能。
在如圖2 所示的電路中, IOR#管腳接處理器的LnOE 讀信號端, IOW#接處理器的LnWE 寫信號端,CS#片選信號端接處理器的nGCS4 片選信號,SD0 ~ SD15 分別接處理器的數(shù)據(jù)總線,中斷信號INT 接處理器的EINT18 管腳,RX +、RX -、TX + 和TX – 分別是兩對差分收發(fā)信號線接帶有隔離變壓器的HR911105A 的RJ45 座連接,如圖3 所示。訪問網(wǎng)卡以總線形式實現(xiàn),網(wǎng)卡的IO 基址為300H,片選信號接在了NGCS4 上,所以網(wǎng)卡IO 的基址為0x20000300H.由“DM9000 地址端口= 高位片選地址+ 300H + 0; DM9000 數(shù)據(jù)端口= 高位片選地址+ 300H + 4”可知,DM9000 端口的端口地址為0×20000300,DM9000 數(shù)據(jù)的端口地址為0×20000304.S3C2440 通過數(shù)據(jù)端口與地址端口并結(jié)合讀/寫信號線就可以對DM9000 進行讀、寫操作了。圖2 中只用了一根地址線LADDR2,這是由DM9000AEP 的特性決定的,DM9000AEP 的地址信號和數(shù)據(jù)信號復用,使用CMD 引腳來區(qū)分它們( CMD 為低時數(shù)據(jù)總線上傳輸?shù)氖堑刂沸盘?,CMD 為高電平時傳輸?shù)氖菙?shù)據(jù)信號) .訪問DM9000AEP 內(nèi)部寄存器時,需要將CMD 置為低電平,發(fā)出地址信號; 然后將CMD置為高電平,讀/寫數(shù)據(jù)。另外,總數(shù)位寬16 位,兩對差分接收與發(fā)送信號線,特別要注意的是:
在PCB 布線時這兩對線必須走差分線,否則接收和發(fā)送數(shù)據(jù)將不穩(wěn)定,模擬地與數(shù)字地也要處理好。
圖2 網(wǎng)卡接口電路


2.2 S3C2440 串口模塊電路
S3C2440 本身自帶三路獨立的UART 接口,在設(shè)計嵌入式串口服務(wù)器系統(tǒng)時,應(yīng)用了S3C2440 串口模塊的兩路UART 接口,另外一路UART 接口做開發(fā)時的打印控制臺用。這兩路串行口用三線通信,采用MAX3232 作為電平轉(zhuǎn)換芯片,分別配置處理器的GPH2、CPH3、CPH4 和CPG5,4 個GPIO 口為TXD0、RXD0、TXD1 和RXD1 串口收發(fā)信號線。RS-232C 接口電路如圖4 所示。

3 系統(tǒng)軟件
系統(tǒng)軟件的設(shè)計目標: 嵌入式串口服務(wù)器能夠接收來自以太網(wǎng)的數(shù)據(jù)流,將以太網(wǎng)數(shù)據(jù)流轉(zhuǎn)換為串行口數(shù)據(jù)流發(fā)送給指定串口; 實現(xiàn)串口數(shù)據(jù)流到以太網(wǎng)數(shù)據(jù)流的逆過程。軟件平臺采用擁有完備TCP /IP 協(xié)議棧和豐富源碼資源的Linux作為串口服務(wù)器的操作系統(tǒng),在ARM9 上移植并裁剪Linux 系統(tǒng),同時移植完善根文件系統(tǒng),為應(yīng)用層軟件開發(fā)提供平臺。應(yīng)用程序軟件的主要任務(wù)如圖5 所示,通過Linux 系統(tǒng)調(diào)用接口、調(diào)用串口函數(shù)讀取數(shù)據(jù),并將數(shù)據(jù)通過socket 接口發(fā)往以太網(wǎng)口; 接收socket 端數(shù)據(jù)、調(diào)用串口設(shè)備函數(shù),將數(shù)據(jù)發(fā)往指定串口。

3.1 在Linux 系統(tǒng)中對串口的操作
UART 的操作主要有: 數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、產(chǎn)生中斷、設(shè)置波特率、loopback 模式、紅外模式和硬/軟流控模式7 部分。在Linux 中,所有設(shè)備文件一般都位于“/dev”下,其中串口對應(yīng)的設(shè)備為“/dev /ttySx”,在Linux 下對設(shè)備的操作方法與對文件的操作方法一樣。下面就是設(shè)計中串口應(yīng)用的開發(fā)步驟。
串口設(shè)置主要設(shè)置struct termios 結(jié)構(gòu)體成員,具體的串口操作函數(shù)此處略去,串口操作流程如圖6 所示。

3.2 Linux 網(wǎng)絡(luò)套接字編程步驟
在Linux 中的網(wǎng)絡(luò)編程通過socket 接口進行。socket 是一種特殊的IO 接口,也是一種文件描述符,它是一種常用的進程之間的通信機制,通過它不僅能實現(xiàn)本地機器上進程間的通信,而且通過網(wǎng)絡(luò)能夠在不同機器上的進程間進行通信。
嵌入式串口服務(wù)器系統(tǒng)網(wǎng)絡(luò)套接字編程步驟如圖7 所示。

系統(tǒng)上電后,嵌入式服務(wù)器進入Linux 系統(tǒng)并自動運行裝載在其內(nèi)的server 程序。作為服務(wù)器, server 程序在開始運行時就為每一個打開的串口創(chuàng)建recvpcwritearm 和readarmsendpc 線程,并在網(wǎng)絡(luò)連接正常以及客戶端沒有執(zhí)行關(guān)閉串口的操作時,每一個已打開串口對應(yīng)的兩個線程將不會結(jié)束,這樣在系統(tǒng)滿負荷運行時,系統(tǒng)將同時開啟4 個線程。嵌入式串口服務(wù)器主程序流程如圖8 所示,主函數(shù)實現(xiàn)套接字的初始化工作,建立兩路監(jiān)聽套接字,分別初始化線程recvpcwritearmsocket[3000 + com]套接字和readarmsendpc socket[4000 + com]套接字com 為串行端口號。一旦接收到客戶端的連接請求,判斷客戶端請求的方式后,啟用相應(yīng)的進程函數(shù)進行數(shù)據(jù)處理。

4 試驗
4.1 數(shù)據(jù)上行測試
數(shù)據(jù)上行測試指串口設(shè)備發(fā)送信息到嵌入式串口服務(wù)器,通過嵌入式串口服務(wù)器將數(shù)據(jù)從以太網(wǎng)口傳輸出去??紤]實際使用過程中上行數(shù)據(jù)量較大,為了模擬工業(yè)現(xiàn)場接收大量的數(shù)據(jù),以“1234567890abcdefghijklmnopqrstuvwsyz”構(gòu)成的數(shù)據(jù)包進行模擬。
測試方法為每秒鐘連續(xù)不斷地發(fā)送“1234567890abcdefghijklmnopqrstuvwsyz”,使之構(gòu)成100KByte 的數(shù)據(jù)包,觀察客戶端程序能否正常收到這個數(shù)據(jù)包。試驗測試結(jié)果如圖9 所示,當從“終端串口設(shè)備”向上位機發(fā)送100KByte 數(shù)據(jù)時,在客戶端一側(cè)正常收到了這些數(shù)據(jù),并且沒有丟失現(xiàn)象。

4.2 數(shù)據(jù)下行測試
數(shù)據(jù)下行測試指通過工控機上的以太網(wǎng)口發(fā)送數(shù)據(jù)給串口服務(wù)器,串口服務(wù)器接收以太網(wǎng)數(shù)據(jù)幀并進行格式轉(zhuǎn)換,同時判斷發(fā)往指定的串口設(shè)備。在實際使用過程中,上位機發(fā)送到串行終端設(shè)備的數(shù)據(jù)量較小,這些數(shù)據(jù)一般都是由操作人員輸入的數(shù)據(jù),因此可以用單個數(shù)據(jù)流“1234567890abcDefghijklmnopqrstuvwxyz”進行測試。
測試方法是利用運行在PC 機上的客戶端程序每秒鐘發(fā)送連續(xù)數(shù)據(jù)流,觀察另一臺PC 機上串口調(diào)試助手是否正常接收到數(shù)據(jù)。試驗測試結(jié)果如圖10 所示,當客戶端程序發(fā)送數(shù)據(jù)時,在終端串口設(shè)備上得到同樣的數(shù)據(jù)流。

5 結(jié)束語
筆者利用完全開源的Linux 操作系統(tǒng),將其移植、裁剪后設(shè)計嵌入式串口服務(wù)器系統(tǒng),選用非常適用于通信產(chǎn)品中的ARM9 內(nèi)核的S3C2440A 微處理器和DM9000AEP 芯片擴展了100MByte 自適應(yīng)以太網(wǎng)口,完成了硬件平臺設(shè)計; 然后用多線程網(wǎng)絡(luò)套接字編寫串口服務(wù)器程序,完成多串口服務(wù)器的軟件設(shè)計。用試驗證實了多串口服務(wù)器能夠很好地完成串口數(shù)據(jù)與以太網(wǎng)口數(shù)據(jù)的雙向傳輸,成功地將現(xiàn)有的串行通信設(shè)備接入以太網(wǎng),利用網(wǎng)絡(luò)實現(xiàn)數(shù)據(jù)的遠程傳輸與遠程監(jiān)控功能,實時監(jiān)控設(shè)備的運行狀態(tài)。降低了設(shè)備的維修費用,縮短了開發(fā)周期。該產(chǎn)品基于開放標準設(shè)計,易于升級與維護,具有廣闊的應(yīng)用前景。
版權(quán)與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.udpf.com.cn,違反者本網(wǎng)將追究相關(guān)法律責任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識2025/7/14 16:59:04
- 獨立 ADC 優(yōu)勢大揭秘:為何不可替代?2025/7/7 16:21:04
- 深入剖析:嵌入式中 RS485、RS422 和 RS232 的特點差異2025/7/5 15:07:54
- 揭秘嵌入式 MCU:浮點數(shù)據(jù)處理難點及應(yīng)對策略2025/6/20 15:19:07









