隨著數字信息技術和互聯網的廣泛應用, 以操作系統和Internet為標志的嵌入式系統是后PC時代發展的趨勢。工業上廣泛應用的232 /485通信接口與Internet相連接, 使得各種傳感器, 控制器及其他設備的數據可以大量的在Internet上傳輸。
串口服務器由此而生, 通過擴展多串口, 可以在PC端遠程監控、管理各種外設, 或對外設進行系統升級。通常串口服務器采用ARM9 微處理器和帶TCP / IP協議棧的付費操作系統, 而文中提出的串口服務器是通過移植LW IP協議棧到代碼開源的μC /OS - Ⅱ中實現, 這樣不但降低成本, 而且代碼的編寫更加透明、靈活。
1硬件系統的設計
本串口服務器采用Philip s的ARM7 系列芯片LPC2210,網絡控制芯片采用RTL8019, 串口采用TL16C554芯片擴展。為得到更廣泛的應用, 串口端還擴展485 接口, 通過跳線選擇232 /485 方式。系統結構框圖, 如圖1所示。
圖1系統結構框圖
2軟件系統的實現
串口服務器軟件系統包括兩部分: TCP / IP協議棧的移植和實時多任務應用程序。μC /OS - Ⅱ在LPC系列ARM中的移植采用周立功公司的方案。
2.1TCP / IP協議棧的移植
LW IP是瑞士人Adma Dumkels等開發的源代碼開放的精簡TCP / IP 協議棧。目的是在于保證TCP協議完整的情況下減少系統資源的需求, 適合于資源較少的嵌入式系統應用。移植LW IP協議棧主要有兩部分代碼: (1)編寫操作系統模擬層相關代碼; (2) LW IP接口初始設置及網卡驅動。
2.1.1操作系統模擬層相關代碼
操作系統模擬層存在的目的主要是在μC /OS - Ⅱ和LW IP之間提供一座橋梁, 使LW IP能與μC /OS - Ⅱ能以相同的規范存在于一個系統中并能相互通信。LW IP有信號量和郵箱兩種進程通訊方式, 而μC /OS - Ⅱ也提供這兩種進程通訊方式。
信號量用來同步任務, 操作函數有sys_new_sem (建立并返回一個新信號量) , sys_ sem _ signal(指定要發送的信號量) , sys_sem_free (指定要釋放的信號量) , sys_arch_sem_wait (等待由參數sem指定的信號量并阻塞線程) , 在這些函數體中進行數據結構的初始化并加入μC /OS - Ⅱ中的相關函數便可完成。
郵箱用來投遞消息, LW IP允許將郵箱實現為一個隊列,多條消息投遞到這個郵箱。
μC /OS - Ⅱ提供了豐富的消息隊列函數, 且μC /OS - Ⅱ和LW IP投遞到郵箱中的消息均用指針實現。該系統建立了多個郵箱, 郵箱通過單向鏈表接在一起。接收消息的最大數量由消息數組決定, 結構圖如圖2所示。
圖2郵箱數據結構圖
郵箱建好后用指針P_Mbox指向節點1, 申請新郵箱將節點1和節點2斷開, P_Mbox指向節點1的p stNext, 以此類推。回收時P_Mbox的移動方向與申請時相反, 這樣不會浪費內存且比較穩定。由以上結構和μC /OS - Ⅱ提供的函數寫出郵箱相關函數。
除此之外, 還需要編寫任務創建函數sys_thread_new和sys_arch_timeouts函數, 由于每個任務都有timeouts鏈表, sys_arch _timeouts函數返回的sys_timeouts結構保存了timeouts鏈表的首地址。
2.1.2LW IP初始化設置及底層驅動
LW IP的初始化設置包含在LW IP通信進程的入口函數中, 其入口函數LwipEntry的基本結構如下:
Void LwipEntry ( void 3 pvArg)
{
/ /初始化LW IP, 涉及LW IP使用的內存區,PCB ( TCP /UDP)以及OS模擬層各個方面
__ilvInitLwip ( ) ;
/ /設置LW IP, 包括添加配置網絡接口, 建立接受任務等工作
__ilvSetLwip ( ) ;
/ /在這里建立LW IP 的應用, 服務器支持TCP /UDP方式, 兩種方式都建立
}
底層驅動在服務器每次收發數據中都要調用,這部分代碼需要有良好的健壯性和穩定性。整個實現順序, 如圖3所示。
圖3底層程序框架圖
發送主線首先是以太網初始化函數( 1)開始,調用鏈路層發送函數(2)并增加各層協議頭, 再調用RTL8019發送函數(9)發送數據。
接收主線除初始化以太網外, 需調用鏈路層初始化函數(3) , ( 3)中調用( 4)初始化RTL8019。
收到的數據先經過函數(8) , 然后通過信號量傳送到函數(6) , 由( 6)調用( 7)得到數據個數, 最后由(5)根據以太網幀頭攜帶的上層協議類型判斷是交給IP協議還是ARP協議處理。
移植完畢, 進行數據收發實驗驗證。使用TCP傳輸協議, 由網口虛擬串口軟件VSPM通過串口調試工具收發數據, 圖4是以10 ms的發送速度在自發自收程序中收發數據的截圖。
圖4TCP協議數據傳輸界面
由于COM1和COM2被PC機占用, 故由網口虛擬出來的串口是COM3, 由圖4可看出在面向連接的TCP協議下, 高速收發數據不會丟包。
2.2實時多任務方案的設計
16個串口分別與網絡端口組成16 個雙向通道。為使代碼靈活、透明, 程序不使用LW IP提供的SOCKET AP I。應用程序把每個雙向通道分為發送, 接收, 串口3個任務, 加上LW IP本身需占用一個任務, 共需建立49個任務。μC /OS - Ⅱ最多能建立64 個任務, 其中8 個操作系統本身占用,剩56個能滿足要求。由VSPM軟件把網口模擬成16個串口, 串口服務器偵聽的16 個端口分別是1 000~1 015, 如圖5所示。
圖5網口虛擬擴展16個串口界面
網絡端和串口端的數據接收會觸發相應的中斷。每個雙向通道的3個任務各司其職, 網口端接收數據中斷后在傳輸層協議判斷信源的端口號,交給相應的接收任務, 處理完后交給串口任務把數據從相應串口發送; 串口接收數據后在中斷程序中判斷信源的通道號, 把數據交給串口任務,處理完后由發送任務通過網口把數據發送出去。
服務器支持TCP /UDP兩種傳輸協議, 下面給出一個通道的TCP傳輸流程圖, UDP部分代碼只需在相應任務中調用LW IP給的UDP函數。TCP模式下串口服務器工作在Server模式, PC機工作在Client模式, 流程圖, 如圖6所示。
圖6串口服務器單通道程序流程圖
3.結論
文中以簡單的硬件框架和靈活的軟件結構設計了一種低成本串口服務器, 雖然本服務器是以性能不及ARM9且不能使用L inux的ARM7為主控芯片, 但兩種開源代碼μC /OS - Ⅱ實時操作系統和LW IP協議棧的有效結合避免了高額的軟件費用, 而且能滿足通信要求。實驗證明, 基于LW IP和μC /OS - Ⅱ的串口服務器不僅能實現雙向通信,而且傳輸數據實時、準確, 符合工業應用的要求。
-
芯片
+關注
關注
459文章
52205瀏覽量
436446 -
嵌入式
+關注
關注
5141文章
19542瀏覽量
315164 -
服務器
+關注
關注
13文章
9702瀏覽量
87317
發布評論請先 登錄
RTL8019數據接收問題
ARM處理器LPC2210在腦血氧監測儀中的應用
請教大神lpc2104和RTL8019AS的接口問題
μC/OS-II 在LPC2210上的移植實現
低成本嵌入式web服務器的研究
基于LPC2210的遠程Modem管理系統
uCOSII在LPC2210上的移植詳解
LPC2210使用指南
RTL8019AS實現嵌入式以太網設計.rar

嵌入式串口服務器的設計方案深度探究

DNC系統嵌入式串口服務器的研究與開發

評論