以ARM920T 為內(nèi)核的S3C2440A 作為主控制器和以太網(wǎng)控制芯片DM9000AEP 設(shè)計(jì)硬件平臺(tái); 構(gòu)建并移植適合嵌入式串口服務(wù)器系統(tǒng)的嵌入式Linux 操作系統(tǒng),利用Linux 完善的TCP/IP 協(xié)議設(shè)計(jì)ARM 端的多線程網(wǎng)絡(luò)服務(wù)器程序。設(shè)計(jì)實(shí)現(xiàn)RS-232C 串口與以太網(wǎng)口數(shù)據(jù)的雙向傳輸,使現(xiàn)有的智能儀器設(shè)備成功接入以太網(wǎng)。
隨著計(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),使用100MBase-T 網(wǎng)絡(luò)在串行設(shè)備與遠(yuǎn)端主機(jī)之間有效地進(jìn)行傳輸數(shù)據(jù),這樣通過(guò)串口服務(wù)器使串行設(shè)備快速接入以太網(wǎng),利用以太網(wǎng)的TCP /IP 協(xié)議進(jìn)行串口數(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)生或客戶端有數(shù)據(jù)請(qǐng)求時(shí)啟動(dòng)獨(dú)立線程,保證實(shí)時(shí)而又不丟失地進(jìn)行數(shù)據(jù)傳輸。基于上述要求系統(tǒng)必須具備: 一套對(duì)網(wǎng)絡(luò)支持良好的嵌入式操作系統(tǒng),并且可根據(jù)專(zhuān)用的硬件平臺(tái)進(jìn)行裁剪; 微處理器的運(yùn)行速度與處理數(shù)據(jù)的能力優(yōu)秀,外圍芯片接口友好。
筆者選用Linux 作為實(shí)時(shí)操作系統(tǒng),并進(jìn)行移植與配置使其可以運(yùn)行在以ARM9 為核心的硬件平臺(tái)上。S3C2440A 自帶三路串行通信口,完全能夠滿足多串口服務(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)串口,這樣就完成了從以太網(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,芯片可以根據(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ù)總線,中斷信號(hào)INT 接處理器的EINT18 管腳,RX +、RX -、TX + 和TX – 分別是兩對(duì)差分收發(fā)信號(hào)線接帶有隔離變壓器的HR911105A 的RJ45 座連接,如圖3 所示。訪問(wèn)網(wǎng)卡以總線形式實(shí)現(xiàn),網(wǎng)卡的IO 基址為300H,片選信號(hào)接在了NGCS4 上,所以網(wǎng)卡IO 的基址為0x20000300H.由“DM9000 地址端口= 高位片選地址+ 300H + 0; DM9000 數(shù)據(jù)端口= 高位片選地址+ 300H + 4”可知,DM9000 端口的端口地址為0×20000300,DM9000 數(shù)據(jù)的端口地址為0×20000304.S3C2440 通過(guò)數(shù)據(jù)端口與地址端口并結(jié)合讀/寫(xiě)信號(hào)線就可以對(duì)DM9000 進(jìn)行讀、寫(xiě)操作了。圖2 中只用了一根地址線LADDR2,這是由DM9000AEP 的特性決定的,DM9000AEP 的地址信號(hào)和數(shù)據(jù)信號(hào)復(fù)用,使用CMD 引腳來(lái)區(qū)分它們( CMD 為低時(shí)數(shù)據(jù)總線上傳輸?shù)氖堑刂沸盘?hào),CMD 為高電平時(shí)傳輸?shù)氖菙?shù)據(jù)信號(hào)) .訪問(wèn)DM9000AEP 內(nèi)部寄存器時(shí),需要將CMD 置為低電平,發(fā)出地址信號(hào); 然后將CMD置為高電平,讀/寫(xiě)數(shù)據(jù)。另外,總數(shù)位寬16 位,兩對(duì)差分接收與發(fā)送信號(hào)線,特別要注意的是:
在PCB 布線時(shí)這兩對(duì)線必須走差分線,否則接收和發(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)用。這兩路串行口用三線通信,采用MAX3232 作為電平轉(zhuǎn)換芯片,分別配置處理器的GPH2、CPH3、CPH4 和CPG5,4 個(gè)GPIO 口為T(mén)XD0、RXD0、TXD1 和RXD1 串口收發(fā)信號(hào)線。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ā)往以太網(wǎng)口; 接收socket 端數(shù)據(jù)、調(diào)用串口設(shè)備函數(shù),將數(shù)據(jù)發(fā)往指定串口。