Linux 下的串口編程(一)

Linux下串口編程要知道的那些事linux

---------------------------------------------------------編程

Author   :tiger-john
WebSite  :blog.csdn.net/tigerjb
app

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> 說明:在串口通訊中,能夠選擇5678位。設定數據位時,主要考慮所要傳輸的數據內容。

3> 事例:若是要傳輸的是標準的ASCII碼。那麼又該如何設定數據位呢?

Ø  因爲ASCII碼的範圍是0~127,所以設定數據位爲7OK了。

Ø  若爲擴展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)來實現。

注:使用硬件流控制時,在接收端準備好接收數據後,設爲CTS1,不然CTS。一樣,若是發送端準備好要發送數據時,則設定RTS1;若是還未準備好,設置CTS0.

二.  Linux串口下編程所要考慮的問題

1. Linux下編寫串口程序的思想

看圖:

1> Linux中,一切設備皆爲文件。所以對串口的操做都轉化爲對文件的操做。

(在Ucos-II操做系統中是直接對寄存器操做來對串口進行編程的)

2> Linux設備驅動工做流程:

Ø  Linux系統啓動時,設備驅動將被加載。

Ø  設備驅動成功加載後,將向系統反饋一個主設備號,驅動程序將根據該主設備號在/dev目錄下建立對應的設備文件。

Ø  程序(進程)就能夠使用open,read,write函數或命令來實現對設備的訪問了。

Tiger-John明:

linux中,系統對上層程序人員把底層對寄存器的操做屏蔽了,提供了統一的ARI接口。咱們只要經過這些統一的接口(openwrite,read)來對UART0串口進行操做。

相關文章
相關標籤/搜索