一、UART協議
1.UART簡介
通用異步收發器,是一種通用的串行、異步通信總線,該總線有兩條數據線,可以實現全雙工的發送和接收在嵌入式系統中常用于主機與輔助設備之間的通信。
2.UART接口
TXD:發送數據;RXD:接收數據;CTS:清除發送、允許發送;RTS:請求發送。
RTS/CTS協議即請求發送/允許發送協議,相當于一種握手協議,主要用來解決"隱藏終端"問題。"隱藏終端"是指,基站A向基站B發送信息,基站C未偵測到A也向B發送,故A和C同時將信號發送至B,引起信號沖突,最終導致發送至B的信號都丟失了。"隱藏終端"多發生在大型單元中(一般在室外環境),這將帶來效率損失,并且需要錯誤恢復機制。當需要傳送大容量文件時,尤其需要杜絕“隱藏終端”現象的發生。IEEE802.11提供了如下解決方案。在參數配置中,若使用RTS/CTS協議,同時設置傳送上限字節數,一旦待傳送的數據大于此上限值時,即啟動RTS/CTS握手協議:首先,A向B發送RTS信號,表明A要向B發送若干數據,B收到RTS后,向所有基站發出CTS信號,表明已準備就緒,A可以發送,其余基站暫時“按兵不動”,然后,A向B發送數據,最后,B接收完數據后,即向所有基站廣播ACK確認幀,這樣,所有基站又重新可以平等偵聽、競爭信道了。
3.UART幀格式
空閑位:數據線在空閑的時候,數據線的狀態為高電平;
起始位:表示一次通信的開始;
數據位:串口協議規定,先發低位、后發高位;可以發送5-8位數據;
校驗位:校驗數據的正確性,若數據位1的個數為偶數,則檢驗位為1,否則為0;檢驗位只能發現錯誤,但不能糾錯。
停止位:表示一次通信的結束,數據線的狀態為高電平。
二、I2C協議
1.I2C物理層特點
(1)它是一個支持設備的總線。“總線”指多個設備共用的信號線。在一個 I2C 通訊總線中,可連接多個I2C通訊設備,支持多個通訊主機及多個通訊從機。
(2)一個I2C總線只使用兩條總線線路,一條雙向串行數據線(SDA) ,一條串行時鐘線(SCL)。數據線即用來表示數據,時鐘線用于數據收發同步。
(3)每一個連接總線的設備都有一個獨立的地址,主機可以通過這個地址進行選擇連接總線的設備與之通信。
(4)總線通過上拉電阻接到電源。當I2C設備空閑時,會輸出高阻態,而當所有設備都空閑,都輸出高阻態時,由上拉電阻把總線拉成高電平。
(5)多個主機同時使用總線時,為了防止多個設備發送數據沖突,會利用仲裁方式決定由哪個設備占用總線。
(6)具有三種傳輸模式:標準模式傳輸速率為100kbit/s,快速模式為400kbit/s,快速模式+為1Mbit/s,高速模式下可達3.4Mbit/s,但目前大多I2C設備尚不支持高速模式。
(7)連接到相同總線的 IC 數量受到總線的最大電容 400pF限制。
2.字節格式
SDA數據線上的每個字節必須是8位,每次傳輸的字節數量沒有限制。每個字節后必須跟一個響應位(ACK)。首先傳輸的數據是最高位(MSB),SDA上的數據必須在SCL高電平周期時保持穩定,數據的高低電平翻轉變化發生在SCL低電平時期。
3.7-bit尋址數據傳輸
常見的傳輸方向及格式有如下兩種:
(1)主機寫數據——從機接收,傳輸方向不變
要進行數據寫入從機,首先主機發送START條件+從機地址+R/W=0(寫操作,設置為0),從機讀取到該地址后回應ACK,主機將繼續發送需要操作的寄存器地址,從機繼續回應ACK,表示從機準備完畢。之后主機發送寄存器的數據(可能是1byte也可能是多個byte),每個byte從機都會回應ACK,發送完成后,主機發送STOP命令,將總線釋放,完成寫操作。如下圖示意:
(2)主機讀數據-從機發送,傳輸方向改變
讀數據與寫數據相似,但讀數據會多幾個步驟。要想從從機讀取數據,首先要知道從機地址以及寄存器地址,這兩部需要進行讀操作來實現,和寫操作一致。讀操作完成后,主機發送重復開始+從機地址+R/W=1(讀操作,設置為1),從機返回ACK,此時主機釋放SDA線轉由從機控制,主機讀取SDA總線進行數據接收,每發送1 byte數據,主機會響應ACK表示還需要再接收數據。當主機接收完想要的數據后,主機將會返回NACK,告訴從機釋放SDA總線,隨后主機發送STOP命令,將總線釋放,完成讀操作。如下圖示意:
4.SCL同步和SDA仲裁
SCL線的同步(時鐘同步)
SCL同步是由于總線具有線“與”的邏輯功能,即只要有一個節點發送低電平時,總線上就表現為低電平。當所有的節點都發送高電平時,總線才能表現為高電平。正是由于線“與”邏輯功能的原理,當多個節點同時發送時鐘信號時,在總線上表現的是統一的時鐘信號。這就是SCL的同步原理。
SDA仲裁
SDA線的仲裁也是建立在總線具有線“與”邏輯功能的原理上的。節點在發送1位數據后,比較總線上所呈現的數據與自己發送的是否一致。是,繼續發送;否則,退出競爭。SDA線的仲裁可以保證I2C總線系統在多個主節點同時企圖控制總線時通信正常進行并且數據不丟失。總線系統通過仲裁只允許一個主節點可以繼續占據總線。
三、SPI協議
1.SPI簡介
SPI是串行外設接口,也是一種單片機外設芯片串行擴展接口,是一種高速、全雙工、同步通信總線,所以可以在同一時間發送和接收數據,SPI沒有定義速度限制,通常能達到甚至超過10M/bps。
SPI有主、從兩種模式,通常由一個主模塊和一個或多個從模塊組成(SPI不支持多主機),主模塊選擇一個從模塊進行同步通信,從而完成數據的交換。提供時鐘的為主設備(Master),接收時鐘的設備為從設備(Slave),SPI接口的讀寫操作,都是由主設備發起,當存在多個從設備時,通過各自的片選信號進行管理。
MISO:主設備數據輸入,從設備數據輸出;
MOSI:主設備數據輸出,從設備數據輸入;
SCLK:時鐘信號,由主設備產生;
CS/SS:從設備使能信號,由主設備控制,一主多從時,CS/SS是從芯片是否被主芯片選中的控制信號,只有片選信號為預先規定的使能信號時(高電位或低電位),主芯片對此從芯片的操作才有效。一主設備一從設備模式
SPI主設備和從設備都有一個串行移位寄存器,主設備通過向它的SPI串行寄存器寫入一個字節來發起一次傳輸。
SPI數據通信的流程
主設備發起信號,將CS/SS拉低,啟動通信。
主設備通過發送時鐘信號,來告訴從設備進行寫數據或者讀數據操作(采集時機可能是時鐘信號的上升沿(從低到高)或下降沿(從高到低)),它將立即讀取數據線上的信號,這樣就得到了一位數據(1bit)。
主機(Master)將要發送的數據寫到發送數據緩存區(Menory),緩存區經過移位寄存器(緩存長度不一定,看單片機配置),串行移位寄存器通過MOSI信號線將字節一位一位的移出去傳送給從機,同時MISO接口接收到的數據經過移位寄存器一位一位的移到接收緩存區。
從機(Slave)也將自己的串行移位寄存器(緩存長度不一定,看單片機配置)中的內容通過MISO信號線返回給主機。同時通過MOSI信號線接收主機發送的數據,這樣,兩個移位寄存器中的內容就被交換。
SPI只有主模式和從模式之分,沒有讀和寫的說法,外設的寫操作和讀操作是同步完成的。若只進行寫操作,主機只需忽略接收到的字節(虛擬數據);反之,若主機要讀取從機的一個字節,就必須發送一個空字節來引發從機的傳輸。也就是說,你發一個數據必然會收到一個數據;你要收一個數據必須也要先發一個數據。
SPI時鐘特點
主要包括:時鐘速率、時鐘極性和時鐘相位三方面。
時鐘速率
SPI總線上的主設備必須在通信開始時候配置并生成相應的時鐘信號。從理論上講,只要實際可行,時鐘速率就可以是你想要的任何速率,當然這個速率受限于每個系統能提供多大的系統時鐘頻率,以及最大的SPI傳輸速率。
時鐘極性
根據硬件制造商的命名規則不同,時鐘極性通常寫為CKP或CPOL。時鐘極性和相位共同決定讀取數據的方式,比如信號上升沿讀取數據還是信號下降沿讀取數據。
CKP可以配置為1或0。可以根據需要將時鐘的默認狀態(IDLE)設置為高或低。極性反轉可以通過簡單的邏輯逆變器實現
CKP = 0:時鐘空閑IDLE為低電平 0;
CKP = 1:時鐘空閑IDLE為高電平1。
時鐘相位
根據硬件制造商的不同,時鐘相位通常寫為CKE或CPHA。顧名思義,時鐘相位/邊沿,也就是采集數據時是在時鐘信號的具體相位或者邊沿;
CKE = 0:在時鐘信號SCK的第一個跳變沿采樣;
CKE = 1:在時鐘信號SCK的第二個跳變沿采樣。
4.SPI四種MODE
根據SPI的時鐘極性和時鐘相位特性可以設置4種不同的SPI通信操作模式,它們的區別是定義了在時鐘脈沖的哪條邊沿轉換輸出信號,哪條邊沿采樣輸入信號,還有時鐘脈沖的穩定電平值(就是時鐘信號無效時是高還是低),詳情如下所示:
Mode0:CKP=0,CKE =0:當空閑態時,SCK處于低電平,數據采樣是在第1個邊沿,也就是SCK由低電平到高電平的跳變,所以數據采樣是在上升沿(準備數據),(發送數據)數據發送是在下降沿。
Mode1:CKP=0,CKE=1:當空閑態時,SCK處于低電平,數據發送是在第2個邊沿,也就是SCK由低電平到高電平的跳變,所以數據采樣是在下降沿,數據發送是在上升沿。
Mode2:CKP=1,CKE=0:當空閑態時,SCK處于高電平,數據采集是在第1個邊沿,也就是SCK由高電平到低電平的跳變,所以數據采集是在下降沿,數據發送是在上升沿。
Mode3:CKP=1,CKE=1:當空閑態時,SCK處于高電平,數據發送是在第2個邊沿,也就是SCK由高電平到低電平的跳變,所以數據采集是在上升沿,數據發送是在下降沿。
5.SPI優缺點
優點:
無起始位和停止位,因此數據位可以連續傳輸而不會被中斷;
沒有像I2C這樣復雜的從設備尋址系統;
數據傳輸速率比I2C更高(幾乎快兩倍);
分離的MISO和MOSI信號線,因此可以同時發送和接收數據;
極其靈活的數據傳輸,不限于8位,它可以是任意大小的字;
非常簡單的硬件結構。從站不需要唯一地址(與I2C不同)。從機使用主機時鐘,不需要精密時鐘振蕩器/晶振(與UART不同)。不需要收發器(與CAN不同)。
缺點:
使用四根信號線(I2C和UART使用兩根信號線);
無法確認是否已成功接收數據(I2C擁有此功能);
沒有任何形式的錯誤檢查,如UART中的奇偶校驗位;
只允許一個主設備;
沒有硬件從機應答信號(主機可能在不知情的情況下無處發送);
沒有定義硬件級別的錯誤檢查協議;
與RS-232和CAN總線相比,只能支持非常短的距離。
CAN協議
1.CAN簡介
CAN總線簡稱——控制器局域網絡,是一種串行的差分總線,并且這種差分總線只傳遞數據信息。CAN總線已經是國際上的一種通信標準(ISO11519),它具有高可靠性、良好的錯誤檢測能力、總線仲裁等優良特點,被廣泛應用在汽車控制系統、環境惡劣場所、電磁輻射強、干擾性大等場所中。
CAN是一種異步的通信方式,它的通訊不需要時鐘進行同步,線路上只有CAN_H、CAN_L兩根通信線,數據以差分信號的方式進行傳輸。
CAN的閉環通信網絡
CAN控制器 -- CAN收發器 -- 濾波電路
最高速度可達1Mbps,總線最大長度為40m;總線的兩端要求各有一個120歐姆的電阻。
CAN的開環通信網絡
最高的通信速度為125Kbps,是一種低速通信的連接方式;最大的通信距離可達1Km;兩根總線獨立,且要求每根總線上要串聯一個2.2K歐姆的電阻。
CAN總線
CAN總線的數據傳輸使用的是差分信號的方式進行的。這兩根線中的信號振幅相等,相位相反,邏輯1 和 邏輯0 通過兩根信號線的電壓差值表示出來。在CAN的應用中,邏輯1也稱為隱性電平,邏輯0也稱為顯性電平。
CAN總線上,在同一個時刻只能處于隱性電平(邏輯1)或者顯性電平(邏輯0)中的一個狀態,且顯性電平相比隱性電平具有優先權。比如:CAN總線上有兩個節點,在同一個時刻,一個輸出隱性電平,一個輸出顯性電平,這個時候總線上是顯性電平狀態。
CAN 的位同步
在CAN中使用了 “位同步” 的方式來抵抗干擾、吸收誤差,實現對總線電平信號的正常采樣,確保通訊正常進行。同時,這個位同步也是用于調節通信過程中的采樣點的。
CAN實現位同步的過程中,會把每一個數據位的時序進行分解,會分解成SS段、PTS段、PBS1段、PBS2段,這四個段加起來就是一個CAN的數據位長度。分解后的最小時間單位為Tq。它們分別如下:
同步段(SS段):該段的大小固定為1Tq。
當總線上的節點在SS段的范圍內檢測到總線上信號發生了跳變,就認為該節點與總線的時序是同步的。當節點與總線同步時,在采樣點采集到的總線電平即可以確認為該位的電平。
傳播時間段(PTS段):該段的大小為 1Tq ~ 8Tq。
這個時間段是用于補償網絡的物理延時時間。是總線上輸入比較器延時和輸出驅動器延時總和的兩倍。
相位緩沖段1(PBS1):該段的大小為 1Tq ~ 8Tq。
主要用來補償邊沿階段的誤差,它的時間長度在重新同步的時候可以加長。
相位緩沖段2(PBS2):該段的大小為 1Tq ~ 8Tq。
是用來補償邊沿階段誤差的,它的時間長度在重新同步時可以縮短。
上圖是對CAN通信中的邏輯0進行分解的說明示意圖。圖中就表示每個數據位的長度為19Tq(SS 段占 1Tq,PTS 段占 6Tq,PBS1 段占 5Tq,PBS2 段占 7Tq),信號的采樣點位于 PBS1 段與 PBS2 段之間,通過控制各段的長度,可以改變采樣點的位置。
CAN的幀種類和用途
CAN總線的數據幀
數據幀一般由 7 個段構成,即:
(1) 幀起始。表示數據幀開始的段。
(2) 仲裁段。表示該幀優先級的段,即ID信息。
(3) 控制段。表示數據的字節數及保留位的段。
(4) 數據段。數據的內容,一幀可發送 0~8 個字節的數據。
(5) CRC 段。檢查幀的傳輸錯誤的段。
(6) ACK 段。表示確認正常接收的段。
(7) 幀結束。表示數據幀結束的段。
RS485簡介
RS485是通信物理層的標準接口,一種信號傳輸方式,OSI(開放系統互連)模型的第一級。創建 RS-485 是為了擴展 RS-232 接口的物理功能。RS485采用半雙工工作方式。
關鍵特性:
(1)接口電平低,不易損壞芯片。RS485的電氣特性:邏輯“1”以兩線間的電壓差為+(2–6)V表示;邏輯“0”以兩線間的電壓差為-(2–6)V表示。接口信號電平比RS232降低了,不易損壞接口電路的芯片。
(2)傳輸速率高。最高傳輸速率為:10Mbps
(3)抗干擾能力強。RS485接口是采用平衡驅動器和差分接收器的組合,抗共模干擾能力增強,即抗噪聲干擾性好。
(4)傳輸距離遠,支持節點多。RS485總線最長可以傳輸1200m以上(速率≤100Kbps)一般最大支持32個節點,如果使用特制的485芯片,可以達到128個或者256個節點,最大的可以支持到400個節點。
2.RS232簡介
RS232接口被廣泛用于計算機串行接口外設連接。連接電纜和機械、電氣特性、信號功能及傳送過程。
RS232特點:
(1)接口的信號電平值較高,易損壞接口電路的芯片。
(2)傳輸速率較低,在異步傳輸時,比特率為20Kbps。
(3)接口使用一根信號線和一根信號返回線而構成共地的傳輸形式,這種共地傳輸容易產生共模干擾,所以抗噪聲干擾性弱
(4)傳輸距離有限,最大傳輸距離標準值為50英尺,實際上也只能用在15米左右。
RS422簡介
RS422標準全稱是"平衡電壓數字接口電路的電氣特性"”,它定義了接口電路的特性。實際上還有一根信號地線,共5根線。由于接收器采用高輸入阻抗和發送驅動器比RS232更強的驅動能力,故允許在相同傳輸線上連接多個接收節點,最多可接10個節點。一個主設備(Master),其余為從設備(Slave),從設備之間不能通信,所以RS422支持點對多的雙向通信。
RS422和RS485電路原理基本相同,都是以差動方式發送和接收,不需要數字地線。差動工作是同速率條件下傳輸距離遠的根本原咽,這正是二者與RS232的根本區別,因為RS232是單端輸入輸出,雙工工作時至少需要數字地線。發送線和接受線三條線(異步傳輸),還可以加其它控制線完成同步等功能。
RS422通過兩對雙絞線可以全雙工工作收發互不影響,而RS485只能半雙工工作,發收不能同時進行,但它只需要一對雙絞線。
RS422的電氣性能與RS485完全一樣。主要的區別在于:RS422有4根信號線:兩根發送(Y、Z)、兩根接收(A B)。由于RS422的收與發是分開的所以可以同時收和發(全雙工)﹔RS485有2根信號線:發送和接收。
4.RS485,RS422,RS232的接口協議的區別
(1)RS232是全雙工的,RS485是半雙工的,RS422是全雙工的。
(2)RS485與RS232僅僅是通訊的物理協議(即接口標準)有區別,RS485是差分傳輸方式,RS232是單端傳輸方式,但通訊程序沒有太多的差別。
(3)PC機上已經配備有RS232,直接使用就行了,若使用RS485通訊,只要在RS232端口上配接一個RS232轉RS485的轉換頭就可以了,不需要修改程序。
(4)RS-232只允許一對一通信(單站能力),RS-485接口在總線上是允許連接多達128個收發器(具有多站能力)。
-
CAN
+關注
關注
57文章
2754瀏覽量
463697 -
SPI
+關注
關注
17文章
1706瀏覽量
91578 -
uart
+關注
關注
22文章
1235瀏覽量
101387
原文標題:UART、SPI、I2C、CAN、RS485、RS232、RS422通信協議總結
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論