加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • UART
    • I2C
    • SPI
    • RS232、RS485
    • CAN
    • I2S
  • 推薦器件
  • 相關推薦
  • 電子產業(yè)圖譜
申請入駐 產業(yè)圖譜

一文總結嵌入式【七大通信總線協(xié)議】

05/19 10:55
1.1萬
閱讀需 14 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

本文深入而全面地概述了嵌入式領域內七種經典串行通信協(xié)議:UART、RS232、RS485、I2C、SPI、CAN和I2S。這些協(xié)議能夠適應不同的應用需求,包括通信速度、傳輸距離、系統(tǒng)復雜度和成本等多個方面。通過了解每種協(xié)議的核心特性和差異,可以為電子系統(tǒng)設計中選擇最適宜的通信方式提供重要參考哦。

UART

通用異步收發(fā)器(Universal Asynchronous Receiver Transmitter),常見的串行異步通信總線,兩條數據線Tx、Rx,實現全雙工通信,常用于主機與外設的通信,點對點。

UART幀格式:

在這里插入圖片描述

關鍵點:

  • 串行、異步
  • 需要雙方約定好傳輸的波特率(因為沒有時鐘線)
  • 空閑位是高位
  • 不能連續(xù)發(fā)數據,一次最多發(fā)5-8位(防止誤差累計,因為沒有時鐘線)

TX接RX,RX接TX

在這里插入圖片描述

一般串口監(jiān)視器里面,設置好這幾個參數就行,默認是這樣,基本就改改波特率。

在這里插入圖片描述

I2C

串行、半雙工。兩根線SDA(數據線)、SCL(時鐘線

近距離、低速,硬件結構簡單,成本低。

最大特點:多主機!

在這里插入圖片描述

主機有權發(fā)起和結束一次通信,從機只能被主機呼叫。

主線上有多個主機時,IIC具備沖突檢測仲裁功能。

每個IIC總線上的器件都有一個唯一的地址(7bit),每個器件可以作為主機也可以作為從機(同一時間只能有一個主機)

I2C通信過程

  1. 主機發(fā)送起始信號啟用總線(其他主機收到后就知道現在總線被占用)
  2. 主機發(fā)送一個字節(jié)數據指明從機地址(7bit)和后續(xù)字節(jié)的傳送方向(1bit,0:主到從,1:從到主)
  3. 被尋址的從機發(fā)送應答信號回應主機
  4. 發(fā)送器發(fā)送一個字節(jié)數據
  5. 接收器發(fā)送應答信號回應發(fā)送器 (循環(huán)步驟4、5)
  6. 通信完成后主機發(fā)送停止信號釋放總線

尋址方式(主機給從機發(fā)的第一個字節(jié)數據):

在這里插入圖片描述

一次通信時發(fā)送器可以發(fā)任意多個字節(jié)數據給接收器。上面第一個字節(jié)數據的最后一位決定了發(fā)送器是主機還是從機。

IIC具體通信過程

空閑時SCL和SDA都是高電平

在這里插入圖片描述

規(guī)定每次傳一個字節(jié)(8bit),先發(fā)高位,

在這里插入圖片描述

發(fā)送器發(fā)完一個字節(jié)后,接收器必須發(fā)送1位應答位,所以一幀共有9位。應答位為低電平。

同步信號:

SCL為低電平時,發(fā)送器向數據線發(fā)一位數據,在此期間數據線上信號允許發(fā)送變化。

SCL為高電平時,接收器從數據線讀取一位數據,在此期間數據線上信號要穩(wěn)定。

典型I2C時序

在這里插入圖片描述
在這里插入圖片描述

A表示應答,A非表示非應答,S表示起始信號,P表示終止信號

SPI

Serial Peripheral Interface(SPI),串行外設接口高速、全雙工、同步一個主機,若干個從機

在這里插入圖片描述

在這里插入圖片描述

至少4根線:

MISO(master in server out)
MOSI(master out server in)
SCLK(時鐘)
CS (片選,通過使能它來選中不同的從機,有n個從機,主機就需要n條CS線)

SPI具體通信過程

先發(fā)高位 (MSB:most significant bit,LSB:least significant bit)

在這里插入圖片描述

SPI傳完一個字節(jié)后,不需要應答!可以直接發(fā)下一個字節(jié)。

沒有起始信號,也沒有終止信號!

CLK下降沿發(fā)數據,上升沿收數據,或者? CLK上升沿發(fā)數據,下降沿收數據(由極性和相位一起決定)

SPI極性和相位

SPI總線有四種不同的工作模式,取決于極性(CPOL)相位(CPHL) 這兩個因素。為了滿足不同場合,不同芯片的需求。

CPOL表示SCLK空閑時的狀態(tài)

CPOL=0,空閑時SCLK為低電平
CPOL=1,空閑時SCLK為高電平

CPHA表示采樣時刻

CPHA=0,每個周期的第一個時鐘沿采樣
CPHA=1,每個周期的第二個時鐘沿采樣

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

I2C與SPI異同

相同點

  1. 串行、同步
  2. TTL電平,傳輸距離不長
  3. 主從方式

不同點:

  1. I2C為半雙工,SPI全雙工
  2. I2C有應答,SPI無應答
  3. 尋址方式:I2C通過向總線廣播從機地址尋址,SPI通過使能不同CS引腳尋址
  4. I2C時鐘極性和相位固定,SPI有4種模式

因為SPI無應答、快速尋址等優(yōu)勢,所以SPI速率比I2C快很多,幾M到幾十Mbps。

I2C一般幾百kbps,超高速模式下能5Mbps。

RS232、RS485

回顧一下UART串口通信,它其實在實際應用中存在很多問題:

在這里插入圖片描述

UART的問題

1. 電氣接口不統(tǒng)一

UART只是對信號的時序進行了定義,而未定義接口的電氣特性;UART通信時一般直接使用處理器使用的電平,即TTL電平,但不同的處理器使用的電平存在差異, 高電平和低電平的具體定義不一樣,所以不同的處理器使用UART通信時一般不能直接相連。

2. 抗干擾能力差,通信距離短

TTL信號表示0和1,數據傳輸的時候很容易出錯,最多1、2m。

只能用于一個電路板上兩個不同芯片之間的通信。

RS232

用于串行通訊的標準。

依賴UART串口協(xié)議,在電氣層面做處理,統(tǒng)一了標準,能傳得更遠和更快。編程的話沒有任何區(qū)別,就是串口通信。

采用一個標準的連接器,且對9個引腳的作用和電平都做了規(guī)定。主要是用RX、TX和GND這三個引腳。

高電平:-3到-15v
低電平:+3到+15v
抗干擾能力增加,通信距離大致15m。

MCU通過TTL發(fā)出來的信號要接一個電平轉換芯片去轉成RS232的信號,比如MAX232芯片。類似usb-ttl芯片(ch340,cp2302)。

RS232的問題:

  1. 接口的信號電平值較高,易損壞接口電路的芯片,又因為與TTL電平不兼容,所以需要使用電平轉換芯片才能與TTL電路連接。
  2. 通信速度較低,易產生共模干擾,抗噪聲干擾性較弱,傳輸距離較短(15m)

RS485

與RS232類似,也是個基于串口的標準,但是是半雙工。

與RS232相比最大特點:遠距離(1500m),抗干擾強,速度更快(幾百kbps到10 Mbps),允許接收多個收發(fā)器(可以組建設備網絡)

在這里插入圖片描述

使用差分信號進行數據傳輸,有效減少共模干擾,因為外部電磁干擾會同時影響到這兩條線,而差分信號的接收方只關心兩條線之間的電壓差,從而有效抵消了干擾。(通信用雙絞線,抗干擾強)

高電平(邏輯1):兩線之間電壓差為+2v到+6v

低電平(邏輯0):兩線之間電壓差為-2v到-6v

采用兩線制,因為用的差分信號,所以兩根線表示一個信號,只能半雙工。是不是感覺和I2C很像?只是I2C規(guī)定好了主機怎么管理從機,在編程RS485時完全可以仿照I2C的主從邏輯,避免沖突。

一般也還是要在MCU后接一個TTL轉485的芯片(單端傳差分),比如MAX485

CAN

CAN(Controller Area Network,控制器局域網)總線協(xié)議是一種高度可靠的、多主機的消息廣播系統(tǒng),廣泛用于汽車和工業(yè)自動化領域進行設備之間的通信。

在這里插入圖片描述

汽車中最小的控制模塊叫ECU,

在這里插入圖片描述

CAN總線大大促進了ECU之間的高效通訊

 

CAN像RS485一樣采用差分信號通信,雙線制(CAN_High,CAN_Low)物理上用雙絞線,抗干擾強
在這里插入圖片描述

MCU與外界需要一個TTL轉CAN信號的芯片(單端轉差分)

在這里插入圖片描述

CAN總線數據幀

在這里插入圖片描述

有11位識別碼,區(qū)分多達2048個設備;

RTR為了區(qū)分數據幀或遠程請求幀;

控制碼有6位,第一位區(qū)分標準幀和拓展幀(識別位有29位),第二位是空閑位,接下來4為是DLC,控制數據碼的長度,0001表示數據有8位,1000表示數據有64位;

CRC是循環(huán)冗余校驗碼,檢測到錯誤時會自動重傳;

CRC界定符為了把后面信息隔開;

后面2位分別是ACK(接收1則發(fā)送0)和ACK界定符;

最后7位是結束位;

優(yōu)先級控制: CAN協(xié)議通過識別碼實現優(yōu)先級控制。ID較低的消息具有較高的優(yōu)先級,能夠在網絡忙時優(yōu)先傳輸。

CAN總線的數據傳輸速率可根據網絡長度和節(jié)點數進行調整,一般情況下,速率可以從幾kbps到1Mbps不等

位定時

數據在CAN總線上的傳輸和采樣過程涉及到位定時(Bit Timing),這是確保數據準確同步和傳輸的關鍵因素。

位定時包括若干部分,如同步段、傳播時間段、相位緩沖段1和相位緩沖段2,其中采樣點(Sample Point)是位時間內的一個特定點,用于決定何時對傳輸的位進行采樣。

在CAN協(xié)議中,數據位的采樣通常發(fā)生在位時間的某個固定點上,這個點被配置為盡可能靠近位時間結束前,以允許信號在總線上傳播并穩(wěn)定。這意味著數據的采樣不直接依賴于時鐘信號的上升沿或下降沿,而是依賴于位時間內預先配置的采樣點。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

由于CAN總線使用非歸零(Non-Return to Zero, NRZ)編碼,連續(xù)的位之間沒有自動的同步點(例如,沒有時鐘信號的顯式傳輸),因此,CAN總線協(xié)議通過硬件和位定時配置來確保所有節(jié)點在位時間內正確地同步和采樣數據。

詳細位定時知識建議參考這篇博客 《CAN通信位定時與同步》

CAN與RX485異同

他倆都是串行半雙工,且基于差分信號和多設備,但有較大差異:

  1. CAN總線使用唯一標識符(ID)為每條消息指定優(yōu)先級,具有自動仲裁功能。RS485總線是一種常規(guī)的通信總線,它不能夠做總線的自動仲裁,也就是不能夠同時發(fā)送數據以避免總線競爭。
  2. CAN支持復雜的網絡拓撲,如星型、樹型和總線型結構。RS485主要支持總線型拓撲,所有設備通過兩條信號線相連。
  3. CAN內置復雜的錯誤檢測、報告和恢復機制,包括位級錯誤檢測、重傳和錯誤限制等功能。RS485作為一種電氣標準,本身不提供錯誤處理機制。需要通過高層協(xié)議來實現錯誤控制
  4. 數據傳輸時同步方式不同。

I2S

主要用于音頻數據傳輸? 串行,同步,半雙工

三根線

SCK(時鐘線)
WS(左右時鐘線,選擇左右聲道)
SD(數據線,數據可以是單聲道或立體聲,格式通常是線性PCM編碼)

在這里插入圖片描述

時鐘上升沿時發(fā)數據,下降沿時讀數據

WS的高低表示不同的聲道,在一個SCK時鐘周期內,一半的時間用于傳輸左聲道數據,另一半時間用于傳輸右聲道數據。

WS跳轉表示一字節(jié)數據傳輸的最后一位

推薦器件

更多器件
器件型號 數量 器件廠商 器件描述 數據手冊 ECAD模型 風險等級 參考價格 更多信息
AT45DB321E-SHF-T 1 Adesto Technologies Corporation Flash, 32MX1, PDSO8, 0.208 INCH, GREEN, PLASTIC, SOIC-8

ECAD模型

下載ECAD模型
$4.19 查看
MCT62S 1 Fairchild Semiconductor Corporation Transistor Output Optocoupler, 2-Element, 5000V Isolation, SURFACE MOUNT, DIP-16
$1.1 查看
PS2701-1-A 1 NEC Compound Semiconductor Devices Ltd Transistor Output Optocoupler, 1-Element, 3750V Isolation, LEAD FREE, PLASTIC, SOP-4
$1.05 查看

相關推薦

電子產業(yè)圖譜