串口UART串行总线协议
生活随笔
收集整理的這篇文章主要介紹了
串口UART串行总线协议
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
串口UART
串行端口是異步的(不傳輸時鐘相關數據),兩個設備在使用串口通信時,必須先約定一個數據傳輸速率,并且這兩個設備各自的時鐘頻率必須與這個速率保持相近,某一方的時鐘頻率相差很大都會導致數據傳輸混亂。
###1 硬件連接
UART可以理解為可以用一線總線就可以完成數據的傳輸,連接圖如下
- VCC 用來給設備提供電源的,如果設備有電源,可以省略
- TX 顧名思義 就是CPU發送數據給設備-對應接設備的RX
- RX 顧名思義 就是CPU接收設備的數據-對應接設備的TX
- GND 地線的作用,做嵌入式的應該必須要了解,沒有GND怎么有參考信號
###2 軟件通信協議
UART作為異步串口通信協議的一種,工作原理是將傳輸數據的每個字符一位接一位地傳輸。
串口通信協議還有很多其他的,詳細可以看這個串口通信協議
UART協議定義,如下圖
其中各位的意義如下:
- 起始位:先發出一個邏輯”0”的信號,表示傳輸字符的開始。
- 資料位:緊接著起始位之后。資料位的個數可以是4、5、6、7、8等,構成一個字符。通常采用ASCII碼。從最低位開始傳送,靠時鐘定位。
- 奇偶校驗位:資料位加上這一位后,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗資料傳送的正確性。
- 停止位:它是一個字符數據的結束標志。可以是1位、1.5位、2位的高電平。 由于數據是在傳輸線上定時的,并且每一個設備有其自己的時鐘,很可能在通信中兩臺設備間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數越多,不同時鐘同步的容忍程度越大,但是數據傳輸率同時也越慢。
- 空閑位:處于邏輯“1”狀態,表示當前線路上沒有資料傳送。
- 波特率:是衡量資料傳送速率的指標。表示每秒鐘傳送的符號數(symbol)。一個符號代表的信息量(比特數)與符號的階數有關。例如資料傳送速率為120字符/秒,傳輸使用256階符號,每個符號代表8bit,則波特率就是120baud,比特率是120*8=960bit/s。這兩者的概念很容易搞錯。
- 波特率計算示例
- 如圖:
- 第一個字節的10位(1位起始位,8位數據位和1位停止位)共占約1.05ms,這樣可計算出其波特率約為:10bit / 1.05ms X 1000 ≈ 9600 bit/s
一般UART設置窗口如下圖
##3 示波器邏輯分析儀測量UART波形
如果你是一個做嵌入式軟件的,但是你不會量波形,會很丟臉,至少我可以知道示波器有一個AutoSet的按鈕,當然,你也可以用邏輯分析儀,這個對軟件工程師來說更加方便。
下面列舉協議分析的圖片
連續的數據波形:0xFF,0x00,…,0x80的波形。可以看出,如果要發送0b0000 0001, 按時間順序則是,低(起始位),高(1),低(0),低(0),低(0),低(0),低(0),低(0),低(0)。但是后面的7個連續的低電平連接在一起,就形成了一個較長低電平。
更具體的可以查看這個網站
http://www.51hei.com/bbs/dpj-39824-1.html
喜歡可以關注微信公眾號:嵌入式Linux
總結
以上是生活随笔為你收集整理的串口UART串行总线协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你应该知道为什么需要内核
- 下一篇: Android ANR 实例分析