Linux下串口編程要知道的那些事linux
---------------------------------------------------------編程
Author :tiger-john
WebSite :blog.csdn.net/tigerjbapp
Email :jibo.tiger@gmail.com函數
Tiger聲明:本人鄙視直接複製本人文章而不加出處的我的或團體,但不排斥別人轉載tiger-john的文章,只是請您註明出處並和本人聯繫或留言給我。3Qspa
---------------------------------------------------------操作系統
本篇文章主要講了與串口編程相關的幾個知識點,以及在Linux上編寫串口程序所要遵循的思想和要考慮的方面,以及它和咱們以前在UC/OS操做系統上編寫串口程序有什麼區別。.net
一.串口相關的幾個基本概念orm
能夠結合《串口編程以前奏篇》中的知識點會對串口的一些基本概念有更深的瞭解,爲後面的繼續深刻作鋪墊。blog
1. 波特率接口
1> 表示每秒傳輸的比特數。
2> 說明:若波特率爲115200,它表示什麼呢?
Ø 對於發送斷,即每秒鐘發送115200bit。
Ø 對於接收端,115200波特率意味着串口通訊在數據線上的採樣率爲115200HZ.
注:波特率和距離之間成反比,距離相隔很近的設備之間能夠實現高波特率通訊。
2. 數據位
1> 表示通訊中實際數據位的參數。在計算機發送的數據包中,實際的數據每每不會是8位。
2> 說明:在串口通訊中,能夠選擇5,6,7,8位。設定數據位時,主要考慮所要傳輸的數據內容。
3> 事例:若是要傳輸的是標準的ASCII碼。那麼又該如何設定數據位呢?
Ø 因爲ASCII碼的範圍是0~127,所以設定數據位爲7就OK了。
Ø 若爲擴展ASCII碼,其範圍是0~255,必須使用8位。
注:7位或8位數據中不單單是數據,還包括開始/中止位,數據位以及奇偶校驗位等。
3. 奇偶校驗位
1> 做用:該位用於串口通訊中的簡單檢驗錯。
2> 類型:主要有偶校驗,奇校驗,標記,空格的方式
在ARM7(LPC2200)中,只有偶校驗,奇校驗兩種方式。
3> 方法:如何進行校驗?
Ø 奇偶校驗是經過統計數據中高位或低位的個數來實現校驗的。
Ø 標記,空格並非真正校驗錯誤的,只是經過簡單的置位來實現對數據的檢測。經過置位方式,能夠判斷出是否存在噪聲干擾數據通訊或數據傳輸,以及是否存在不一樣步的現象
4. 中止位
1> 做用:中止位用於標誌該數據包數據結束,能夠取1位,1.5位或2位。
在ARM7(lpc2200中)中止位能夠取1位,2位或不取
2> 說明:
Ø 中止位不單單用於數據包的傳輸結束標誌,還提供了計算機之間校訂同步時鐘的機會。
Ø 用於中止位的位數越多,不一樣時鐘同步的容忍程序越大。
Ø 可是因爲中止位佔用了數據空間,過多的中止位將致使數據傳輸速度的降低。
5. 數據流控制
1> 經過串口傳輸數據時,因爲計算機之間處理速度或其餘因素的影響,會形成丟失數據的現象。
2> 做用:數據流控制用於解決上面的問題,經過控制發送數據的速度,確保數據不會出現丟失。
3> 類型:數據流控制能夠分爲軟件流控制(Xon/Xoff)和硬件流控制,固然你能夠選擇不使用數據流控制。
Ø 軟件流控制使用特殊的字符做爲啓動或中止的標誌
Ø 硬件流控制經過使用硬件信號(CTR/RTS)來實現。
注:使用硬件流控制時,在接收端準備好接收數據後,設爲CTS爲1,不然CTS爲。一樣,若是發送端準備好要發送數據時,則設定RTS爲1;若是還未準備好,設置CTS爲0.
二. Linux串口下編程所要考慮的問題
1. Linux下編寫串口程序的思想
看圖:
1> 在Linux中,一切設備皆爲文件。所以對串口的操做都轉化爲對文件的操做。
(在Ucos-II操做系統中是直接對寄存器操做來對串口進行編程的)
2> Linux設備驅動工做流程:
Ø 在Linux系統啓動時,設備驅動將被加載。
Ø 設備驅動成功加載後,將向系統反饋一個主設備號,驅動程序將根據該主設備號在/dev目錄下建立對應的設備文件。
Ø 程序(進程)就能夠使用open,read,write函數或命令來實現對設備的訪問了。
Tiger-John說明:
在linux中,系統對上層程序人員把底層對寄存器的操做屏蔽了,提供了統一的ARI接口。咱們只要經過這些統一的接口(open,write,read)來對UART0串口進行操做。