linux驅動開發:串口協議

串口的重要性不言而喻。我們可以通過串口來打印 debug的信息,以此來定位代碼的錯誤位置。
我們也可以通過串口來向內核傳入命令,可以說它是開發人員常用的一個交互終端。當進行驅動開發時,總是需要用到串口來顯示內核的打印信息。對於開發來說,很是重要。

串口:屬於串行通信的一種,與之對應的是並行通信。串行通信就是數據的各位在同一根線上順序依次按位傳輸。

同步通信:要求發生時鐘和接收時鐘保持嚴格同步。發送方先發送一個或兩個特殊字符,該字符稱爲同步字符。當發送方和接收方達到同步後,就可以一個字符接一個字符地發送一大塊數據,而不再需要用起始位和停止位了,這樣可以明顯地提高數據的傳輸速率。


異步通信:在異步通信中,數據通常是以字符或字節爲單位組成數據幀進行傳送的。收、發端各有一套彼此獨立,互不同步的通信機構,由於收發數據的幀格式相同,因此可以相互識別接收到的數據信息.

串口:串行異步通信.

(1) 起始位:
在沒有數據傳送時,通信線上處於邏輯“1”狀態。當發送端要發送1個字符數據時,首先發送1個邏輯“0”信號,這個低電平便是幀格式的起始位。其作用是向接收端表示發送端開始發送一幀數據。接收端檢測到這個低電平後,就準備接收數據信號。
(2) 數據位:
在起始位之後,發送端發出(或接收端接收)的是數據位,數據的位數沒有嚴格的限制,5~8位均可。由低位到高位逐位傳送。
(3) 奇偶校驗位:
數據位發送完(接收完)之後,可發送一位用來檢驗數據在傳送過程中是否出錯的奇偶校驗位。奇偶校驗是收發雙方預先約定好的有限差錯檢驗方式之一。有時也可不用奇偶校驗。
(4) 停止位:
字符幀格式的最後部分是停止位,邏輯“1”電平有效,它可佔1/2位、1位或2位。停止位表示傳送一幀信息的結束,也爲發送下一幀信息作好準備。
串口通信的波特率:
波特率(Baud Rate)是串行通信中一個重要概念,它是指傳輸數據的速率, 亦稱比特率。波特率的定義是每秒傳輸二進制數碼的位數。如:波特率爲1200bps是指每秒鐘能傳輸1200位二進制數碼。
串行通信的制式:
1)單工方式:數據只能從一個方向傳送到另一個方向。
2)半雙工:數據可以雙向傳輸,但是不能同時雙向傳輸。當發送時,不能接收,當接收時,不能發送。
3)全雙工:數據可以雙向傳輸,且可以同時進行接受和發送。

串口協議是全雙工協議,可以同時發送和接收。兩根線比較重要,TX和RX。TX用來傳輸,RX用來接收.
(5)校驗位:
串行通信的目的不只是傳送數據信息,更重要的是應確保準確無誤地傳送。因此必須考慮在通信過程中對數據差錯進行校驗,因爲差錯校驗是保證準確無誤地通信的關鍵。常用差錯校驗方法有奇偶校驗、累加和校驗以及循環冗餘碼校驗等。
1)奇偶校驗:
奇偶校驗的特點是按字符校驗,即在發送每個字符數據之後都附加一位奇偶校驗位(1或0),當設置爲奇校驗時,數據中1的個數與校驗位1的個數之和應爲奇數;反之則爲偶校驗。收、發雙方應具有一致的差錯檢驗設置,當接收1幀字符時,對1的個數進行檢驗,若奇偶性(收、發雙方)一致則說明傳輸正確。奇偶校驗只能檢測到那種影響奇偶位數的錯誤,比較低級且速度慢,一般只用在異步通信中。
2)累加和校驗:
累加和校驗是指發送方將所發送的數據塊求和,並將“校驗和”附加到數據塊末尾。接收方接收數據時也是先對數據塊求和,將所得結果與發送方的“校驗和”進行比較,若兩者相同,表示傳送正確,若不同則表示傳送出了差錯。“校驗和”的加法運算可用邏輯加,也可用算術加。累加和校驗的缺點是無法檢驗出字節或位序的錯誤。
3)循環冗餘碼校驗(CRC):
循環冗餘碼校驗的基本原理是將一個數據塊看成一個位數很長的二進制數,然後用一個特定的數去除它,將餘數作校驗碼附在數據塊之後一起發送。接收端收到該數據塊和校驗碼後,進行同樣的運算來校驗傳送是否出錯。目前CRC已廣泛用於數據存儲和數據通信中,並在國際上形成規範,市面上已有不少現成的CRC軟件算法。


計算機串行通信中主要使用瞭如下信號:
(1) 數據傳送信號:發送數據(TXD);接收數據(RXD)。
(2) 調制解調器控制信號:請求發送(RTS);清除發送(CTS);數據通信設備準備就緒(DSR);數據終端準備就緒(DTR)。
(3) 定位信號:接收時鐘(RXC);發送時鐘(TXC)。
(4) 信號地GND。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章