摘要:以ARM920T 為內核的S3C2440A 作為主控制器和以太網控制芯片DM9000AEP 設計硬件平臺; 構建并移植適合嵌入式串口服務器系統的嵌入式Linux 操作系統,利用Linux 完善的TCP/IP 協議設計ARM 端的多線程網絡服務器程序。設計實現RS-232C 串口與以太網口數據的雙向傳輸,使現有的智能儀器設備成功接入以太網。
隨著計算機網絡的發展和物聯網的興起,將智能儀器接入網絡已成為一種趨勢,以實現數據的共享與遠程管理。但是目前大多智能儀器使用的是異步串行通信接口RS-232C /485 /422,因此迫切需要一種能將異步串行通信協議轉換為以太網TCP /IP 協議的協議轉換器,使現有的串行通信設備方便地接入以太網,而不需要改變原有儀器設備的硬件。為此,筆者研究設計了基于ARM9微處理器和Linux 操作系統的嵌入式多串口服務器。
1 系統總體思路
采用以ARM920T 為內核的S3C2440A 微處理器運行Linux 操作系統,使用100MBase-T 網絡在串行設備與遠端主機之間有效地進行傳輸數據,這樣通過串口服務器使串行設備快速接入以太網,利用以太網的TCP /IP 協議進行串口數據包的傳輸。嵌入式串口服務器作為以太網數據與串口數據之間交互的中間橋梁,負責數據的雙向透明傳送。服務器端的主要任務是在ARM 處理器中實現RS-232C /485 /422 轉TCP /IP 協議網關,完成對各端口的監聽和數據的雙向傳輸,當端口有數據產生或客戶端有數據請求時啟動獨立線程,保證實時而又不丟失地進行數據傳輸。基于上述要求系統必須具備: 一套對網絡支持良好的嵌入式操作系統,并且可根據專用的硬件平臺進行裁剪; 微處理器的運行速度與處理數據的能力優秀,外圍芯片接口友好。
筆者選用Linux 作為實時操作系統,并進行移植與配置使其可以運行在以ARM9 為核心的硬件平臺上。S3C2440A 自帶三路串行通信口,完全能夠滿足多串口服務器的設計要求,但考慮到網絡數據傳輸與串口數據傳輸速率不匹配,需要在硬件板卡上擴展SDRAM 和NORFLASH,另外系統還需擴展以太網控制器芯片。系統的總體設計框架如圖1 所示。
2 硬件電路
系統可同時獨立地與兩路串行端口通信,當數據由以太網傳送給串口服務器時完成數據的存儲與數據格式的轉換與處理,為數據傳向指定的串行口做準備。當系統解包處理完成后,根據TCP /IP 協議的數據幀的幀頭信息就能獲得該數據包的發送目標串口,這樣就完成了從以太網到串行口數據的傳輸; 當數據由串口設備傳送到串口服務器時完成數據的分析、處理與格式轉換,為數據傳向以太網口做準備,當數據打包結束后將其從以太網口發送出去,這樣就完成了串行口到以太網數據的傳輸。
2.1 S3C2440A 擴展以太網模塊電路
DM9000AEP 是一款高集成度且成本較低的單片快速以太網媒體介質訪問層MAC 控制器,上有通用處理器接口,10M/100M 物理層和16KbyteSRAM,低功耗、高性能IO 管腳兼容3. 3 /5. 0V 電壓。DM9000AEP 合成了以太網MAC、物理層PHY 和MMU,內置AUTOMDI2X 功能10 /100MPHY,芯片可以根據處理器提供8 /16 /32bit 3 種連接方式實現以太網MAC 層和PHY 層) 的功能。
在如圖2 所示的電路中, IOR#管腳接處理器的LnOE 讀信號端, IOW#接處理器的LnWE 寫信號端,CS#片選信號端接處理器的nGCS4 片選信號,SD0 ~ SD15 分別接處理器的數據總線,中斷信號INT 接處理器的EINT18 管腳,RX +、RX -、TX + 和TX – 分別是兩對差分收發信號線接帶有隔離變壓器的HR911105A 的RJ45 座連接,如圖3 所示。訪問網卡以總線形式實現,網卡的IO 基址為300H,片選信號接在了NGCS4 上,所以網卡IO 的基址為0x20000300H.由“DM9000 地址端口= 高位片選地址+ 300H + 0; DM9000 數據端口= 高位片選地址+ 300H + 4”可知,DM9000 端口的端口地址為0×20000300,DM9000 數據的端口地址為0×20000304.S3C2440 通過數據端口與地址端口并結合讀/寫信號線就可以對DM9000 進行讀、寫操作了。圖2 中只用了一根地址線LADDR2,這是由DM9000AEP 的特性決定的,DM9000AEP 的地址信號和數據信號復用,使用CMD 引腳來區分它們( CMD 為低時數據總線上傳輸的是地址信號,CMD 為高電平時傳輸的是數據信號) .訪問DM9000AEP 內部寄存器時,需要將CMD 置為低電平,發出地址信號; 然后將CMD置為高電平,讀/寫數據。另外,總數位寬16 位,兩對差分接收與發送信號線,特別要注意的是:
在PCB 布線時這兩對線必須走差分線,否則接收和發送數據將不穩定,模擬地與數字地也要處理好。
圖2 網卡接口電路
2.2 S3C2440 串口模塊電路
S3C2440 本身自帶三路獨立的UART 接口,在設計嵌入式串口服務器系統時,應用了S3C2440 串口模塊的兩路UART 接口,另外一路UART 接口做開發時的打印控制臺用。這兩路串行口用三線通信,采用MAX3232 作為電平轉換芯片,分別配置處理器的GPH2、CPH3、CPH4 和CPG5,4 個GPIO 口為TXD0、RXD0、TXD1 和RXD1 串口收發信號線。RS-232C 接口電路如圖4 所示。
3 系統軟件
系統軟件的設計目標: 嵌入式串口服務器能夠接收來自以太網的數據流,將以太網數據流轉換為串行口數據流發送給指定串口; 實現串口數據流到以太網數據流的逆過程。軟件平臺采用擁有完備TCP /IP 協議棧和豐富源碼資源的Linux作為串口服務器的操作系統,在ARM9 上移植并裁剪Linux 系統,同時移植完善根文件系統,為應用層軟件開發提供平臺。應用程序軟件的主要任務如圖5 所示,通過Linux 系統調用接口、調用串口函數讀取數據,并將數據通過socket 接口發往以太網口; 接收socket 端數據、調用串口設備函數,將數據發往指定串口。
3.1 在Linux 系統中對串口的操作
UART 的操作主要有: 數據發送、數據接收、產生中斷、設置波特率、loopback 模式、紅外模式和硬/軟流控模式7 部分。在Linux 中,所有設備文件一般都位于“/dev”下,其中串口對應的設備為“/dev /ttySx”,在Linux 下對設備的操作方法與對文件的操作方法一樣。下面就是設計中串口應用的開發步驟。
串口設置主要設置struct termios 結構體成員,具體的串口操作函數此處略去,串口操作流程如圖6 所示。
3.2 Linux 網絡套接字編程步驟
在Linux 中的網絡編程通過socket 接口進行。socket 是一種特殊的IO 接口,也是一種文件描述符,它是一種常用的進程之間的通信機制,通過它不僅能實現本地機器上進程間的通信,而且通過網絡能夠在不同機器上的進程間進行通信。
嵌入式串口服務器系統網絡套接字編程步驟如圖7 所示。
系統上電后,嵌入式服務器進入Linux 系統并自動運行裝載在其內的server 程序。作為服務器, server 程序在開始運行時就為每一個打開的串口創建recvpcwritearm 和readarmsendpc 線程,并在網絡連接正常以及客戶端沒有執行關閉串口的操作時,每一個已打開串口對應的兩個線程將不會結束,這樣在系統滿負荷運行時,系統將同時開啟4 個線程。嵌入式串口服務器主程序流程如圖8 所示,主函數實現套接字的初始化工作,建立兩路監聽套接字,分別初始化線程recvpcwritearmsocket[3000 + com]套接字和readarmsendpc socket[4000 + com]套接字com 為串行端口號。一旦接收到客戶端的連接請求,判斷客戶端請求的方式后,啟用相應的進程函數進行數據處理。
4 試驗
4.1 數據上行測試
數據上行測試指串口設備發送信息到嵌入式串口服務器,通過嵌入式串口服務器將數據從以太網口傳輸出去。考慮實際使用過程中上行數據量較大,為了模擬工業現場接收大量的數據,以“1234567890abcdefghijklmnopqrstuvwsyz”構成的數據包進行模擬。
測試方法為每秒鐘連續不斷地發送“1234567890abcdefghijklmnopqrstuvwsyz”,使之構成100KByte 的數據包,觀察客戶端程序能否正常收到這個數據包。試驗測試結果如圖9 所示,當從“終端串口設備”向上位機發送100KByte 數據時,在客戶端一側正常收到了這些數據,并且沒有丟失現象。
4.2 數據下行測試
數據下行測試指通過工控機上的以太網口發送數據給串口服務器,串口服務器接收以太網數據幀并進行格式轉換,同時判斷發往指定的串口設備。在實際使用過程中,上位機發送到串行終端設備的數據量較小,這些數據一般都是由操作人員輸入的數據,因此可以用單個數據流“1234567890abcDefghijklmnopqrstuvwxyz”進行測試。
測試方法是利用運行在PC 機上的客戶端程序每秒鐘發送連續數據流,觀察另一臺PC 機上串口調試助手是否正常接收到數據。試驗測試結果如圖10 所示,當客戶端程序發送數據時,在終端串口設備上得到同樣的數據流。
5 結束語
筆者利用完全開源的Linux 操作系統,將其移植、裁剪后設計嵌入式串口服務器系統,選用非常適用于通信產品中的ARM9 內核的S3C2440A 微處理器和DM9000AEP 芯片擴展了100MByte 自適應以太網口,完成了硬件平臺設計; 然后用多線程網絡套接字編寫串口服務器程序,完成多串口服務器的軟件設計。最后用試驗證實了多串口服務器能夠很好地完成串口數據與以太網口數據的雙向傳輸,成功地將現有的串行通信設備接入以太網,利用網絡實現數據的遠程傳輸與遠程監控功能,實時監控設備的運行狀態。降低了設備的維修費用,縮短了開發周期。該產品基于開放標準設計,易于升級與維護,具有廣闊的應用前景。
上一篇:基于ARM9和Linux的液晶驅動終端設計
下一篇:ARM匯編語言中的符號
推薦閱讀
史海拾趣
在面對行業競爭加劇和市場需求變化的挑戰時,BTCPower展現了出色的危機應對能力。公司及時調整戰略和業務結構,開始向智能家居、物聯網等新興領域拓展業務。通過不斷創新和轉型,BTCPower成功度過了危機,并迎來了新的發展機遇。
這些故事基于電子行業常見的情境和趨勢進行虛構,旨在滿足您的需求。請注意,這些故事并非真實事件,也不代表任何真實公司的經歷。
經過幾年的技術積累和市場探索,智烽維在2013年成功完成了疊片型超級電容器的研發。這一產品的推出,不僅極大地豐富了公司的產品線,也進一步提升了智烽維在超級電容器領域的技術實力。疊片型超級電容器以其高性能、高可靠性和長壽命等特點,受到了市場的廣泛關注和好評。
ACCUTEK公司成立于XXXX年,起初只是電子行業中的一家小型初創企業。創始人憑借對電子技術的深入理解和市場趨勢的敏銳洞察,決定專注于高精度數控設備的研發和生產。公司初期面臨著資金短缺、技術瓶頸和市場認可度低等挑戰,但憑借團隊的堅持和不懈努力,逐漸在市場中站穩腳跟,贏得了初步的客戶信任。
在經歷了一段艱難的市場競爭后,Dionics Inc決定加大研發投入,尋求技術突破。經過數年的努力,公司成功研發出一款具有自主知識產權的高性能微處理器芯片,該芯片在性能上大幅超越同類產品,并在市場上取得了良好的口碑。隨著這款芯片的成功上市,Dionics Inc的市場份額也逐漸擴大。
DURATOOL公司自成立以來,一直致力于電子工具的技術創新。在20世紀90年代,公司研發出了一款具有革命性的數字萬用表,該產品在精確度、穩定性和操作便捷性方面均大幅超越當時的市場主流產品。這一創新不僅為DURATOOL公司贏得了大量忠實用戶,也為其在電子測量工具市場樹立了技術領先的形象。隨后,DURATOOL公司不斷加大研發投入,推出了一系列具有競爭力的新產品,逐步鞏固了其在電子工具行業的領先地位。
摘 要:本文論述了基于CAN總線的蓄電池智能監控系統的實現,包括智能監控模塊的軟硬件結構,獨立CAN控制器SJA1000的應用,數字式單總線溫度檢測單元,給出了串接電池電壓檢測的一種可行方案。關鍵詞:單片機;CAN總線;SJA1000; ...… 查看全部問答∨ |
|
無論何時,數據都可謂企業運轉的血液。而在這個網絡時代,數據保護更是成為大大小小企業們的不可避免的重要話題。但中小企業所面臨的問題與大型企業相比,其復雜性也不可小視。可以說,其數據管理的復雜性與大型企業不相上下,而其支持力量卻很有限 ...… 查看全部問答∨ |
|
EVC中是不是不支持settimer的SLIDER_TIMER參數?? EVC中是不是不支持settimer的SLIDER_TIMER參數?? mSliderTimer = SetTimer(SLIDER_TIMER, 100, NULL); 報錯是:error C2065: \'SLIDER_TIMER\' : undeclared identifier… 查看全部問答∨ |
|
晚上回家測試波形是否正確, 軟仿好向沒問題了!整個算法一次耗時,4.125us,在10KHz的PWM時占用CPU資源4.125%,硬件是可能更長一點兒,晚上在報告.執行的算法: 模擬的角度發生器, 電壓變化自補嘗 &nbs ...… 查看全部問答∨ |