UART
通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter,通常稱作UART) 是一種串行異步收發協議(全雙工),應用十分廣泛。
UART工作原理是將數據的二進制位一位一位的進行傳輸。在UART通訊協議中信號線上的狀態位高電平代表’1’低電平代表’0’。當然兩個設備使用UART串口通訊時,必須先約定好傳輸速率和一些數據位。
硬件連接
硬件連接比較簡單,僅需要3條線,注意連接時兩個設備UART電平,如電平范圍不一致請做電平轉換后再連接,如下圖所示:
TX:發送數據端,要接對面設備的RX
RX:接收數據端,要接對面設備的TX
GND:保證兩設備共地,有統一的參考平面
軟件通信協議
UART作為異步串口通信協議的一種,工作原理是將數據的字節一位接一位地傳輸。協議如下:
空閑位:
UART協議規定,當總線處於空閑狀態時信號線的狀態為‘1’即高電平
起始位:
開始進行數據傳輸時發送方要先發出一個低電平’0’來表示傳輸字符的開始。因為空閑位一直是高電平所以開始第一次通訊時先發送一個明顯區別於空閑狀態的信號即為低電平。
數據位:
起始位之后就是要傳輸的數據,數據可以是5,6,7,8,9位,構成一個字符,一般都是8位。先發送最低位最后發送最高位。
奇偶校驗位:
數據位傳送完成后,要進行奇偶校驗,校驗位其實是調整個數,串口校驗分幾種方式:
1.無校驗(no parity)
2.奇校驗(odd parity):如果數據位中’1’的數目是偶數,則校驗位為’1’,如果’1’的數目是奇數,校驗位為’0’。
3.偶校驗(even parity):如果數據為中’1’的數目是偶數,則校驗位為’0’,如果為奇數,校驗位為’1’。
4.mark parity:校驗位始終為1
5.space parity:校驗位始終為0
停止位:
數據結束標志,可以是1位,1.5位,2位的高電平。
波特率:
數據傳輸速率使用波特率來表示,單位bps(bits per second),常見的波特率9600bps,115200bps等等,其他標准的波特率是1200,2400,4800,19200,38400,57600。舉個例子,如果串口波特率設置為9600bps,那么傳輸一個比特需要的時間是1/9600≈104.2us。
以9600 8N1(9600波特率,8個數據位,沒有校驗位,1位停止位)為例,這是目前最常用的串口配置,現在我們傳輸’O’'K’兩個ASCII值,'O’的ASCII為79,對應的二進制數據為01001111
,'K’對應的二進制數據為01001011
,傳輸的格式數據如下圖所示:
串口波特率為9600,1bit傳輸時間大約為104us,傳送一個數據實際是10個比特(開始位,8個數據位,停止位),一個bytes傳輸速率實際為9600*8/10=7680bps。
優缺點
1)優點
只使用兩條信號線;
不需要時鍾信號;
有校驗位進行錯誤檢測;
2)缺點
傳輸速率比較低。
(https://blog.csdn.net/sternlycore/article/details/85244515)
SPI
SPI(Serial Peripheral Interface,串行外設接口)是Motorola公司提出的一種同步串行數據傳輸標准,在很多器件中被廣泛應用。
1、接口
SPI接口經常被稱為4線串行總線,以主/從方式工作,數據傳輸過程由主機初始化。如圖1所示,其使用的4條信號線分別為:
1) SCLK:串行時鍾,用來同步數據傳輸,由主機輸出;
2) MOSI:主機輸出從機輸入數據線,通常先傳輸MSB;
3) MISO:主機輸入從機輸出數據線,通常先傳輸LSB;
4) SS:片選線,低電平有效,由主機輸出。
在SPI總線上,某一時刻可以出現多個從機,但只能存在一個主機,主機通過片選線來確定要通信的從機。這就要求從機的MISO口具有三態特性,使得該口線在器件未被選通時表現為高阻抗。
2、數據傳輸
在一個SPI時鍾周期內,會完成如下操作:
1) 主機通過MOSI線發送1位數據,從機通過該線讀取這1位數據;
2) 從機通過MISO線發送1位數據,主機通過該線讀取這1位數據。
3、時鍾極性和時鍾相位
在SPI操作中,最重要的兩項設置就是時鍾極性(CPOL或UCCKPL)和時鍾相位(CPHA或UCCKPH)。時鍾極性設置時鍾空閑時的電平,時鍾相位設置讀取數據和發送數據的時鍾沿。
主機和從機的發送數據是同時完成的,兩者的接收數據也是同時完成的。所以為了保證主從機正確通信,應使得它們的SPI具有相同的時鍾極性和時鍾相位。
優缺點
SPI接口具有如下優點:
1) 支持全雙工操作;
2) 操作簡單;
3) 數據傳輸速率較高。
同時,它也具有如下缺點:
1) 需要占用主機較多的口線(每個從機都需要一根片選線);
2) 只支持單個主機。
(https://blog.csdn.net/u010183728/article/details/81984433)