加入星計(jì)劃,您可以享受以下權(quán)益:

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

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

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

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

UART

通用異步收發(fā)器(Universal Asynchronous Receiver Transmitter),常見(jiàn)的串行、異步通信總線,兩條數(shù)據(jù)線Tx、Rx,實(shí)現(xiàn)全雙工通信,常用于主機(jī)與外設(shè)的通信,點(diǎn)對(duì)點(diǎn)。

UART幀格式:

在這里插入圖片描述

關(guān)鍵點(diǎn):

  • 串行、異步
  • 需要雙方約定好傳輸?shù)?a class="article-link" target="_blank" href="/baike/497736.html">波特率(因?yàn)闆](méi)有時(shí)鐘線)
  • 空閑位是高位
  • 不能連續(xù)發(fā)數(shù)據(jù),一次最多發(fā)5-8位(防止誤差累計(jì),因?yàn)闆](méi)有時(shí)鐘線)

TX接RX,RX接TX

在這里插入圖片描述

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

在這里插入圖片描述

I2C

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

近距離、低速,硬件結(jié)構(gòu)簡(jiǎn)單,成本低。

最大特點(diǎn):多主機(jī)

在這里插入圖片描述

主機(jī)有權(quán)發(fā)起和結(jié)束一次通信,從機(jī)只能被主機(jī)呼叫。

主線上有多個(gè)主機(jī)時(shí),IIC具備沖突檢測(cè)仲裁功能。

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

I2C通信過(guò)程

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

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

在這里插入圖片描述

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

IIC具體通信過(guò)程

空閑時(shí)SCL和SDA都是高電平

在這里插入圖片描述

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

在這里插入圖片描述

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

同步信號(hào):

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

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

典型I2C時(shí)序

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

A表示應(yīng)答,A非表示非應(yīng)答,S表示起始信號(hào),P表示終止信號(hào)

SPI

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

在這里插入圖片描述

在這里插入圖片描述

至少4根線:

MISO(master in server out)
MOSI(master out server in)
SCLK(時(shí)鐘)
CS (片選,通過(guò)使能它來(lái)選中不同的從機(jī),有n個(gè)從機(jī),主機(jī)就需要n條CS線)

SPI具體通信過(guò)程

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

在這里插入圖片描述

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

沒(méi)有起始信號(hào),也沒(méi)有終止信號(hào)!

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

SPI極性和相位

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

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

CPOL=0,空閑時(shí)SCLK為低電平
CPOL=1,空閑時(shí)SCLK為高電平

CPHA表示采樣時(shí)刻

CPHA=0,每個(gè)周期的第一個(gè)時(shí)鐘沿采樣
CPHA=1,每個(gè)周期的第二個(gè)時(shí)鐘沿采樣

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

在這里插入圖片描述

I2C與SPI異同

相同點(diǎn)

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

不同點(diǎn):

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

因?yàn)镾PI無(wú)應(yīng)答、快速尋址等優(yōu)勢(shì),所以SPI速率比I2C快很多,幾M到幾十Mbps。

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

RS232、RS485

回顧一下UART串口通信,它其實(shí)在實(shí)際應(yīng)用中存在很多問(wèn)題:

在這里插入圖片描述

UART的問(wèn)題

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

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

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

TTL信號(hào)表示0和1,數(shù)據(jù)傳輸的時(shí)候很容易出錯(cuò),最多1、2m。

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

RS232

用于串行通訊的標(biāo)準(zhǔn)。

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

采用一個(gè)標(biāo)準(zhǔn)的連接器,且對(duì)9個(gè)引腳的作用和電平都做了規(guī)定。主要是用RX、TX和GND這三個(gè)引腳。

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

MCU通過(guò)TTL發(fā)出來(lái)的信號(hào)要接一個(gè)電平轉(zhuǎn)換芯片去轉(zhuǎn)成RS232的信號(hào),比如MAX232芯片。類(lèi)似usb-ttl芯片(ch340,cp2302)。

RS232的問(wèn)題:

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

RS485

與RS232類(lèi)似,也是個(gè)基于串口的標(biāo)準(zhǔn),但是是半雙工

與RS232相比最大特點(diǎn):遠(yuǎn)距離(1500m),抗干擾強(qiáng),速度更快(幾百kbps到10 Mbps),允許接收多個(gè)收發(fā)器(可以組建設(shè)備網(wǎng)絡(luò))

在這里插入圖片描述

使用差分信號(hào)進(jìn)行數(shù)據(jù)傳輸,有效減少共模干擾,因?yàn)橥獠?a class="article-link" target="_blank" href="/baike/519674.html">電磁干擾會(huì)同時(shí)影響到這兩條線,而差分信號(hào)的接收方只關(guān)心兩條線之間的電壓差,從而有效抵消了干擾。(通信用雙絞線,抗干擾強(qiáng))

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

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

采用兩線制,因?yàn)橛玫牟罘中盘?hào),所以?xún)筛€表示一個(gè)信號(hào),只能半雙工。是不是感覺(jué)和I2C很像?只是I2C規(guī)定好了主機(jī)怎么管理從機(jī),在編程RS485時(shí)完全可以仿照I2C的主從邏輯,避免沖突。

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

CAN

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

在這里插入圖片描述

汽車(chē)中最小的控制模塊叫ECU,

在這里插入圖片描述

CAN總線大大促進(jìn)了ECU之間的高效通訊

 

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

MCU與外界需要一個(gè)TTL轉(zhuǎn)CAN信號(hào)的芯片(單端轉(zhuǎn)差分)

在這里插入圖片描述

CAN總線數(shù)據(jù)幀

在這里插入圖片描述

有11位識(shí)別碼,區(qū)分多達(dá)2048個(gè)設(shè)備;

RTR為了區(qū)分?jǐn)?shù)據(jù)幀或遠(yuǎn)程請(qǐng)求幀;

控制碼有6位,第一位區(qū)分標(biāo)準(zhǔn)幀和拓展幀(識(shí)別位有29位),第二位是空閑位,接下來(lái)4為是DLC,控制數(shù)據(jù)碼的長(zhǎng)度,0001表示數(shù)據(jù)有8位,1000表示數(shù)據(jù)有64位;

CRC是循環(huán)冗余校驗(yàn)碼,檢測(cè)到錯(cuò)誤時(shí)會(huì)自動(dòng)重傳;

CRC界定符為了把后面信息隔開(kāi);

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

最后7位是結(jié)束位;

優(yōu)先級(jí)控制: CAN協(xié)議通過(guò)識(shí)別碼實(shí)現(xiàn)優(yōu)先級(jí)控制。ID較低的消息具有較高的優(yōu)先級(jí),能夠在網(wǎng)絡(luò)忙時(shí)優(yōu)先傳輸。

CAN總線的數(shù)據(jù)傳輸速率可根據(jù)網(wǎng)絡(luò)長(zhǎng)度和節(jié)點(diǎn)數(shù)進(jìn)行調(diào)整,一般情況下,速率可以從幾kbps到1Mbps不等

位定時(shí)

數(shù)據(jù)在CAN總線上的傳輸和采樣過(guò)程涉及到位定時(shí)(Bit Timing),這是確保數(shù)據(jù)準(zhǔn)確同步和傳輸?shù)年P(guān)鍵因素。

位定時(shí)包括若干部分,如同步段、傳播時(shí)間段、相位緩沖段1和相位緩沖段2,其中采樣點(diǎn)(Sample Point)是位時(shí)間內(nèi)的一個(gè)特定點(diǎn),用于決定何時(shí)對(duì)傳輸?shù)奈贿M(jìn)行采樣。

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

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

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

詳細(xì)位定時(shí)知識(shí)建議參考這篇博客 《CAN通信位定時(shí)與同步》

CAN與RX485異同

他倆都是串行半雙工,且基于差分信號(hào)和多設(shè)備,但有較大差異:

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

I2S

主要用于音頻數(shù)據(jù)傳輸? 串行,同步,半雙工

三根線

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

在這里插入圖片描述

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

WS的高低表示不同的聲道,在一個(gè)SCK時(shí)鐘周期內(nèi),一半的時(shí)間用于傳輸左聲道數(shù)據(jù),另一半時(shí)間用于傳輸右聲道數(shù)據(jù)。

WS跳轉(zhuǎn)表示一字節(jié)數(shù)據(jù)傳輸?shù)淖詈笠晃?/p>

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
AFBR-79EQDZ 1 Foxconn Transceiver, 840nm Min, 860nm Max, MTP Connector, Panel Mount, ROHS COMPLIANT, PACKAGE-38
$113.6 查看
CSTNE10M0G550000R0 1 Murata Manufacturing Co Ltd Ceramic Resonator,

ECAD模型

下載ECAD模型
$0.65 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜