劉衛明
摘 要:數據采集系統中單片機主要側重控制,對數據處理的能力并不高,運算處理也十分的繁瑣,而通過串口與上位機通信則可利用上位機強大的數據處理能力與友好控制界面對數據進行妥善處理與顯示,使得設計效率大大地提高。其中串口通信作為簡單的硬件連接,是一種成熟的通信協議,也是上下位之間通信的首選。基于此本文對Linux下ARM和單片機的串口通信進行了研究分析,以適用于更多的場合。
關鍵詞:上位機;單片機;Linux操作系統;嵌入式ARM;串口通信
DOI:10.16640/j.cnki.37-1222/t.2017.06.114
Linux操作系統穩定性高,源代碼公開,在工業控制、物聯網、機器人等領域有著廣泛地應用,嵌入式ARM的優點在于體積小、噪音低、數據處理能力強等,Linux ARM嵌入系統屬于Linux操作系統、ARM硬件平臺的結合,兼具二者的優勢,是一種常用的開發智能控制設備的組合。基于ZigBee技術(IEEE802.15.4協議)的CC2530為第二代網絡處理芯片優勢顯著,在多個領域得到應用,但是面對控制通信復雜的場合還無法完全滿足需求,因此需要結合性能更加強大的處理器作為上位機來滿足需求,Linux-ARM嵌入式系統與CC2530都擁有串口通信方式,構建起二者之間的信息傳遞通道。通過上下位機之間串口通信使用,可以讓串口操作的難度大大下降,讓開發效率得到提高,進而讓開發人員能夠集中精力進行大型應用程序的開發。
1 Linux ARM嵌入系統串口通信
在數據采集、圖像處理、自控設備、智能終端與物聯網網關等方面S5PV210AH有著廣泛地應用,該處理器是三星生產,主頻為1GHz,內核為ARM Cortex A8,Cortex A8的串口通信為Linux操作系統控制完成,程序流程為:打開串口設備→打開成功→串口屬性設置→設置成功→收發數據→返回系統。首先打開串口設備并通過文件實現對設備的管理,對串口操作就等同于文件操作。Linux系統當中,設備文件是在dev目錄中進行存放的,串口文件名為ttyS*,*標志著不同的串口(為0開始的整數)。通過函數open()打開串口,具體函數為:,其中fd為open()函數的返回值(表示文件描述符),ttyS0為串口1,O_RDWR表示可以進行串口的讀寫操作,Linux系統內核可用此文件描述對文件進行訪問,當fd為-1,表明打開失敗,程序返回系統,若成功打開則進行下一步的“串口參數設置”。
串口設置首先要獲取串口參數,進行后續的參數配置,最后設置參數到串口。其中tcgetarrt()、tcsetattr()函數與termios結構為主要所應用的函數及結構。詳細的配置步驟為:
①定義一個termios結構體變量opt,應用tcgetarrt()函數將串口參數提取到opt當中;②進行串口參數的基本設置(包括校驗率、波特率、流控、停止位等等);③進行串口參數設置,即是把opt結構體當中的參數設置到串口當中。
在對串口參數完成設置后,串口便可進行數據的收發,數據接收過程調用函數,表示從fd所指示文件中讀取所需的緩沖區;數據發送過程調用函數,表示從WR_buff所指緩沖區輸出字節到fd所指示文件當中。在數據收發完成后,然后用close(fd)函數將串口關閉。
2 CC2530串口通信
CC2530開發板是ZigBee技術(IEEE802.15.4協議)開發的有關組網、應用軟件與安全等方面的技術標準,特點在于復雜度低、距離近、功耗低、低數據速率等,CC2530開發板是無線傳感器網絡的最好選擇,在物聯網、監控與自動控制等多個領域中有廣泛地應用。CC2530集成了51單片機內核,與眾多的ZigBee芯片相比具有開發模板、完整的原理圖與例程源碼,操作、連接都更加方便。
在IAR集成環境中應用ZStack2.5.1協議棧進行CC2530的開發,在串口通信的開發過程中,CC2530定義為協調器,開發步驟具體為:
①對串口初始化,找到應用層中的操作系統接口文件,找出文件中的函數體,其最后一個函數接受串口通信任務,在中找到函數體添加MT_Uartinit()函數調用語句。②登記任務號,通過函數完成任務號登記,并直接跟在MT_Uartinit()后,通過task_id將串口事件在中登記。③串口通信,在文件中找到函數,添加接收語句或者發送語句,分別從MT_UART.h庫調用相應的函數。
3 串口通信效果驗證
ARM和單片機串口通信程序主要包括有兩個方面,第一個是作為上位機的ARM的串口通信程序,另一個方面是作為下位機的單片機串口通信程序。并且在通信之前必須制定出合理的通信協議,進而讓通信的可靠性與成功率得到保證。
對CC2530串口通信的效果進行驗證,利用串口調試助手進行串口通信的驗證,測試過程中使用語句HalUARTWrite(0,“DATA FROM cc2530.\n”,40),通過結果顯示串口調試助手對CC2530所發出的信息做出了完整的接收。
4 結束語
在嵌入技術的不斷發展之下,基于ARM處理器搭建的硬件平臺,以Linux操作系統開發環境嵌入式設備也得到了越發廣泛地應用。ARM和單片機之間進行數據傳輸可以采用多種通信方式,串口通信是采用的簡單的硬件連接,擁有自身成熟的通信協議,也是兩位機之間進行通信的首選方式。本文介紹的通信技術可用在大多數的Linux下ARM與單片機串口通信場合中進行應用,通過在此基礎上進行深入的改進可實現用于更多的Linux ARM平臺的嵌入功能。在這個過程當中,還需要注意的是因為上位機ARM速度與單片機相比更快,因此一次性無法將大量的數據進行發送,避免發送緩沖區數據溢出出現丟失的情況,開發人員需要根據通信雙方設備的具體情況對幀長度進行合理地選擇,讓傳輸狀態達到最佳。
參考文獻:
[1]周峰華,潘文亮,劉軍亮等.Linux下ARM和單片機的串口通信設計[J].儀表技術,2011(08):27-28,32.
[2]任兵,任小洪,黃山等.Linux下ARM和單片機的串口通信研究[J]. 今日電子,2012(10):53-56.
[3]季峰.Linux下ARM和CC2530的串口通信[J].物聯網技術,2016(01):34-36.