通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UATR,是一種串行、異步、全雙工的收發器。全雙工的UART支持同時雙向通信,是嵌入式系統必不可少的debug接口。
什么是全雙工?什么是半雙工?
全雙工:同一時刻,兩個設備都在收發數據,比如SPI。注意QSPI是半雙工,因為4根線只能同時收或者發。
半雙工:兩設備間可以收發數據,但只能收完再發或發完再收。
單工:任何時刻只能進行一個方向的通訊,且固定一方為發送設備,一方為接收設備。
串口通信協議
空閑位:不通信時,TX & RX是邏輯“1”狀態,表示當前線路無數據傳輸。
起始位:發送“0”,表示傳輸開始。
數據位:起始位之后,數據位的個數可以是5、6、7、8等,一般是8bit,采用ASCII碼。從最低位開始傳送,根據波特率在數據bit穩定的中間位置采樣。
奇偶校驗位:數據位加上這一位后,使得“1”的位數為偶數,則為偶校驗,使得“1”的位數為奇數則為奇校驗,以次來校驗數據傳送的正確性。
比如一個 8 位長的有效數據為:10100101,此時總共有 4 個“ 1”,
為達到奇校驗效果,校驗位應為“ 1”,即有效數據和校驗位中“ 1”的個數為奇數。
為達到偶校驗效果,校驗位應為“ 0”,即有效數據和校驗位中“ 1”的個數為偶數。
注意,UART校驗方法有:奇校驗(odd)、偶校驗(even)、0校驗(space)、0校驗(mark)、無校驗(noparity),為了提高實際帶寬,一般可省去校驗位,即選擇無校驗,思考下為什么?
0 校驗是不管有效數據是什么,校驗位固定為“ 0”。1 校驗是校驗位固定為“ 1”。
無校驗就是數據包中不包含校驗位。
停止位:一個字符數據傳輸的結束標志,可以是1位、1.5位、2位的高電平。停止位不僅表示傳輸的結束,并且可提供校正時鐘同步。停止位的位數越多,時鐘容忍程度越大,但有效帶寬就越小。
波特率
數據傳輸速率使用波特率來表示。單位bps(bits per second),常見的波特率9600bps、19200bps、115200bps等,如果串口波特率設置為9600bps,那么傳輸1bit數據需要的時間是1/9600≈104.2us。
帶上校驗位,傳送一個字符數據實際是11個比特(1bit開始位、8bit數據位、1bit校驗位、1bit停止位),有效的傳輸速率實際為9600*8/11= 6982bps。
不帶校驗位,傳送一個字符數據實際是10個比特(1bit開始位、8bit數據位、1bit停止位),有效的傳輸速率實際為9600*8/10=7680bps。
這就是為何不傳校驗位,可以提高一點帶寬,也就是所謂的開銷。
寫個簡單的測試程序:
配置波特率115200bps:
觀察到1bit的傳輸時間為8.8us,1s/115200bps=8.68us, 基本符合預期。
仿真打印效果:
審核編輯:湯梓紅
-
收發器
+關注
關注
10文章
3338瀏覽量
105539 -
通信協議
+關注
關注
28文章
810瀏覽量
40120 -
uart
+關注
關注
22文章
1199瀏覽量
100829
原文標題:UART通信協議及SoC仿真
文章出處:【微信號:全棧芯片工程師,微信公眾號:全棧芯片工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論