UART、RS232、RS485、IIC、SPI5大常用協 議原理、應用場景及異同對比
時間:2023-09-11 來源:華清遠見
一、UART總線通信協議
1.1 原理
串口通訊的數據包由發送設備通過自身的TXD接口傳輸到接收設備的RXD接口。 在串口通訊的協議層中,規定了數據包的內容,它由啟始位、主體數據、校驗位以及停止位組成, 通訊雙方的數據包格式要約定一致才能正常收發數據

1.2 波特率
本章中主要講解的是串口異步通訊,異步通訊中由于沒有時鐘信號,所以兩個通訊設備之間需要約定好波特率, 即每個碼元的長度,以便對信號進行解碼,上圖中用虛線分開的每一格就是代表一個碼元。常見的波特率為4800、9600、115200等。
1.3 通訊的起始和停止信號
串口通訊的一個數據包從起始信號開始,直到停止信號結束。 數據包的起始信號由一個邏輯0的數據位表示,而數據包的停止信號可由0.5、1、1.5或2個邏輯1的數據位表示,只要雙方約定一致即可。
1.4 有效數據
在數據包的起始位之后緊接著的就是要傳輸的主體數據內容,也稱為有效數據 有效數據的長度常被約定為5、6、7或8位長。
1.5 數據校驗
在有效數據之后,有一個可選的數據校驗位,由于數據通信相對更容易受到外部干擾導致傳輸數據出現偏差 可以在傳輸過程加上校驗位來解決這個問題。校驗方法有奇校驗(odd)、偶校驗(even)、0校驗(space)、1校驗(mark)以及無校驗(noparity),它們介紹如下: 奇校驗要求有效數據和校驗位中"1"的個數為奇數,比如一個8位長的有效數據為:01101001,此時總共有4個"1",為達到奇校驗效果,校驗位為"1", 最后傳輸的數據將是8位的有效數據加上1位的校驗位總共9位。 偶校驗與奇校驗要求剛好相反,要求幀數據和校驗位中"1"的個數為偶數,比如數據幀:11001010,此時數據幀"1"的個數為4個,所以偶校驗位為"0"。 0校驗是不管有效數據中的內容是什么,校驗位總為"0",1校驗是校驗位總為"1"。 在無校驗的情況下,數據包中不包含校驗位。
二、IIC總線通信協議
2.1 IIC總線簡介
I2C是Inter-Integrated Circuit的簡稱,讀作:I-squared-C。 由飛利浦公司于1980年代提出,為了讓主板、嵌入式系統或手機用以連接低速周邊外部設備而發展。 主要用途:SOC和周邊外設間的通信(如:EEPROM,電容觸摸芯片,各種Sensor等)。
2.2 物理接口
I2C總線只使用兩條雙向漏極開路的信號線(串行數據線:SDA,及串行時鐘線:SCL),并利用電阻上拉。
I2C總線僅僅使用SCL、SDA兩根信號線,就實現了設備間的數據交互,極大地簡化了對硬件資源和PCB板布線空間的占用。
I2C總線廣泛應用在EEPROM、實時時鐘、LCD、及其他芯片的接口。
I2C允許相當大的工作電壓范圍,典型的電壓基準為:+3.3V或+5V。
SCL(Serial Clock):串行時鐘線,傳輸CLK信號,一般是主設備向從設備提供
SDA(Serial Data):串行數據線,傳輸通信數據 I2C使用一個7bit的設備地址,一組總線最多和112個節點通信。最大通信數量受限于地址空間及400pF的總線電容。
常見的I2C總線以傳輸速率的不同分為不同的模式:標準模式(100Kbit/s)、低速模式(10Kbit/s)、快速模式(400Kbit/s)、高速模式(3.4Mbit/s), 時鐘頻率可以被下降到零,即暫停通信。 該總線是一種多主控總線,即可以在總線上放置多個主設備節點,在停止位(P)發出后,即通訊結束后,主設備節點可以成為從設備節點。 主設備節點:產生時鐘并發起通信的設備節點 從設備節點:接收時鐘并響應主設備節點尋址的設備節點

1)I2C通信雙方地位不對等,通信由主設備發起,并主導傳輸過程,從設備按I2C協議接收主設備發送的數據,并及時給出響應。
2)主設備、從設備由通信雙方決定(I2C協議本身無規定),既能當主設備,也能當從設備(需要軟件進行配置)。
3)主設備負責調度總線,決定某一時刻和哪個從設備通信。同一時刻,I2C總線上只能有一對主設備、從設備通信。
4)每個I2C從設備在I2C總線通訊中有一個I2C從設備地址,該地址唯一,是從設備的固有屬性,通信中主設備通過從設備地址來找到從設備。
2.3 總線狀態
空閑態:沒有設備發生通信 忙態:其中一個從設備和主設備通信,I2C總線被占用,其他從設備處于等待狀態
2.4 通信協議
時序:在通信中時序是通信線上按時間順序發生的電平變化,及這些電平變化對通信的意義。 每個通信周期都由一個起始位開始通信,由一個結束位結束通信,中間部分是傳遞的數據。 每個通信周期,主設備會先發8位的從設備地址(從設備地址由高7位的實際從設備地址和低1位的讀/寫標志位組成),主設備以廣播的形式發送從設備地址,I2C總線上的所有從設備收到地址后,判斷從設備地址是否匹配,不匹配的從設備繼續等待,匹配的設備發出一個應答信號。 同一時刻,主設備、從設備只能有一個設備發送數據。
2.4.1 起始位和停止位
I2C總線通訊由起始位開始通訊,由結束位停止通訊,并釋放I2C總線。起始位和結束位都由主設備發出。 起始位(S):在SCL為高電平時,SDA由高電平變為低電平 結束位(P):在SCL為高電平時,SDA由低電平變為高電平

2.4.2 數據格式與應答
I2C數據以字節(即8bits)為單位傳輸,每個字節傳輸完后都會有一個ACK應答信號。應答信號的時鐘是由主設備產生的。 應答(ACK):拉低SDA線,并在SCL為高電平期間保持SDA線為低電平 非應答(NOACK):不要拉低SDA線(此時SDA線為高電平),并在SCL為高電平期間保持SDA線為高電平 在傳輸期間,如果從設備來不及處理主設備發送的數據,從設備會保持SCL線為低電平,強迫主設備等待從設備釋放SCL線,直到從設備處理完后,釋放SCL線,接著進行數據傳輸。

2.5 數據傳輸通訊
2.5.1 寫數據
開始數據傳輸后,先發送一個起始位(S),主設備發送一個地址數據(由7bit的從設備地址, 和最低位的寫標志位組成的8bit字節數據,該讀寫標志位決定數據的傳輸方向), 然后,主設備釋放SDA線,并等待從設備的應答信號(ACK)。每一個字節數據的傳輸都要跟一個應答信號位。數據傳輸以停止位(P)結束,并且釋放I2C總線。

2.5.2 讀數據
開始通訊時,主設備先發送一個起始信號(S),主設備發送一個地址數據(由7bit的從設備地址,和最低位的寫標志位組成的8bit字節數據), 然后,主設備釋放SDA線,并等待從設備的應答信號(ACK),從設備應答主設備后,主設備再發送要讀取的寄存器地址,從設備應答主設備(ACK), 主設備再次發送起始信號(Sr),主設備發送設備地址(包含讀標志),從設備應答主設備,并將該寄存器的值發送給主設備;

三、SPI總線通訊協議
3.1 什么是SPI
SPI接口是Motorola首先提出的全雙工同步串行總線 采用主從模式(Master Slave)架構;支持多slave模式應用 在實際開發過程中,大多數采用單Master,多SLAVE模式 時鐘由Master控制,在時鐘移位脈 沖下,數據按位傳輸,高位在前,低位在后,也可以低位在前,高位在后 SPI接口有2根單向數據線,為全雙工通信,目前應用中的數據速率可達幾Mbps的水平。
3.2 SPI總線硬件連接
SPI四根信號線
設備選擇線:NSS
時鐘線:SCL
串行輸出數據線:MOSI
串行輸入數據線:MISO
M:master O:output S:slave I:input
(1)MOSI:主器件數據輸出(寫),從器件數據輸入(讀) •
(2)MISO:主器件數據輸入,從器件數據輸出
(3)SCLK :時鐘信號,由主器件產生
(4)/SS:從器件使能信號,由主器件控制(片選線)

3.3 SPI優點
支持全雙工通信 通信簡單 數據傳輸速率快
3.4 缺點
沒有指定的流控制,沒有應答機制確認是否接收到數據,所以跟IIC總線協議比較在數據,可靠性上有一定的缺陷。
3.5 協議通信時序詳解

起始信號: NSS信號線由高變低,是SPI通訊的起始信號
結束信號:NSS信號由低變高,是SPI通訊的停止信號
數據傳輸:SPI使用MOSI及MISO信號線來傳輸數據,使用SCK信號線進行數據同步。 MOSI及MISO數據線在SCK的每個時鐘周期傳輸一位數據,且數據輸入輸出是同時進行 的。SPI每次數據傳輸可以 8 位或 16 位為單位,每次傳輸的單位數不受限制
3.6 SPI總線通信模式



四、RS232總線描述
4.1 概述
RS-232接口符合電子工業聯盟(EIA)建立的串行數據通信接口標準。 原始編號是EIA-RS-232(簡稱232,RS232),它廣泛用于計算機串行接口外設連接。連接電纜以及機械、電氣、信號和傳輸過程。 RS-232-C標準規定的數據傳輸速率為每秒50、75、100、150、300、600、1200、2400、4800、9600、19200波特。
4.2 特性
RS-232是現在主流的串行通信接口之一。由于RS232接口標準出現較早,難免有不足之處,主要有以下四點: (1)接口的信號電平值較高,易損壞接口電路的芯片。RS232接口任何一條信號線的電壓均為負邏輯關系。即:邏輯“1”為-3—-15V;邏輯“0”:+3—+15V,噪聲容限為2V。即要求接收器能識別高于+3V的信號作為邏輯“0”,低于-3V的信號作為邏輯“1”,TTL電平為5V為邏輯正,0為邏輯負。與TTL電平不兼容故需使用電平轉換電路方能與TTL電路連接。 (2)傳輸速率較低,在異步傳輸時,比特率為20Kbps;因此在51CPLD開發板中,綜合程序波特率只能采用19200,也是這個原因。 (3)接口使用一根信號線和一根信號返回線而構成共地的傳輸形式,這種共地傳輸容易產生共模干擾,所以抗噪聲干擾性弱。 (4)傳輸距離有限,最大傳輸距離標準值為50英尺,實際上也只能用在15米左右。
五、RS485概述
5.1 場景
在要求通信距離為幾十米到上千米時,廣泛采用RS-485串行總線,RS-485采用平衡發送和差分接收 因此具有抑制共模干擾的能力,加上總線收發器具有高靈敏度,能檢測低至200mV的電壓,故傳輸信號能在千米以外得到恢復 RS-485采用半雙工工作方式,任何時候只能有一點處于發送狀態,因此,發送電路須由使能信號加以控制
5.2 RS485特點
RS-485用于多點互連時非常方便,可以省掉許多信號線。應用RS-485可以聯網構成分布式系統,其允許最多并聯32臺驅動器和32臺接收器。針對RS-232-C的不足,新標準RS-485具有以下特點:
(1)RS-485的電氣特性:邏輯“1”以兩線間的電壓差+2V~+6V表示,邏輯“0”以兩線間的電壓差-6V~-2V表示。接口信號電平比RS-232-C降低了,就不容易損壞接口電路芯片,且該電平與TTL電平兼容,刻方便與TTL電路連接。
(2)數據最高傳輸速率為:10Mbps (
3)RS-485接口采用平衡驅動器和差分接收器的組合,抗共模干擾能力強,即抗噪聲性能好。
(4)RS-485接口的最大傳輸距離標準值4000英尺,實際上可達3000米。 (5)RS-232-C接口在總線上只允許連接一個收發器,即單站能力;而RS-485接口在總線上只允許連接多達128個收發器,即具有多站能力,這樣用戶可以利用單一的RS-485接口方便地建立設備網絡。
五、IIC總線和SPI總線對比
5.1 相同點
1.均采用串行同步總線
2.都采用TTL電平
3.主從模式架構
5.2 不同點
1.IIC總線為半雙工通信,因為IIC總線只有一根SDA數據線
2.SPI總線為全雙工通信,因為SPI總線有兩個單向的數據線(MOSI和MISO) 3.IIC總線有應答信號,SPI總線沒有應答信號
4.IIC總線通過尋址進行選擇和哪一個從機進行通信
5.SPI總線通過片選線選擇和哪一個從機進行通信,片選線向從機發送使能信號
6.比如說有10個從機設備,需要10根片選線,比較浪費硬件引腳資源
7.IIC總線通過高低電平的變化進行數據傳輸 8.SPI總線邊沿觸發,邊沿采樣
六、RS232和RS484總線對比
工作模式:RS232 為全雙工,RS485 為半雙工。
傳輸方式:RS485和RS232只是物理協議的通信(即接口標準),RS485是差分傳輸方式,RS232是單端傳輸方式,但通信程序沒有太大區別
信號線:RS485接口組成的半雙工網絡,一般只需二根信號線。RS-232 口一般只使用 RXD、TXD、GND 三條線
抗干擾性:RS485接口是采用平衡驅動器和差分接收器的組合,抗噪聲干擾性好。RS232接口使用一根信號線和一根信號返回線而構成共地的傳輸形式,這種共地傳輸容易產生共模干擾
傳輸距離:RS485接口的最大傳輸距離標準值為1200米(9600bps時),實際上可達3000米,RS232傳輸距離有限,最大傳輸距離標準值為50米,實際上也只能用在15米左右 通信能力:RS485 接口在總線上是允許連接多達128個收發器,用戶可以利用單一的 RS485 接口方便地建立起設備網絡,RS232只允許一對一通信
傳輸速率:RS232傳輸速率較低,在異步傳輸時,波特率為20Kbps,RS485的數據最高傳輸速率為10Mbps 電氣電平值:RS485的邏輯"1"以兩線間的電壓差為+(2-6)V 表示;邏輯"0"以兩線間的電壓差為-(2-6)V表示,在 RS-232中任何一條信號線的電壓均為負邏輯關系,即:邏輯"1",-(5-15)V;邏輯"0 " +(5- 15)V 。

