當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式大雜燴
[導(dǎo)讀]關(guān)注「嵌入式大雜燴」,選擇「星標(biāo)公眾號」一起進(jìn)步!電子設(shè)備之間的通信就像人類之間的交流,雙方都需要說相同的語言。在電子產(chǎn)品中,這些語言稱為通信協(xié)議。之前有單獨(dú)地分享了SPI、UART、I2C通信的文章,這篇對它們做一些對比。串行VS并行電子設(shè)備通過發(fā)送數(shù)據(jù)位從而實(shí)現(xiàn)相互交談。位是...

關(guān)注「嵌入式大雜燴」,選擇「星標(biāo)公眾號」一起進(jìn)步!

電子設(shè)備之間的通信就像人類之間的交流,雙方都需要說相同的語言。在電子產(chǎn)品中,這些語言稱為通信協(xié)議。

之前有單獨(dú)地分享了SPI、UART、I2C通信的文章,這篇對它們做一些對比。

串行 VS 并行


電子設(shè)備通過發(fā)送數(shù)據(jù)位從而實(shí)現(xiàn)相互交談。位是二進(jìn)制的,只能是1或0。通過電壓的快速變化,位從一個(gè)設(shè)備傳輸?shù)搅硪粋€(gè)設(shè)備。在以5V工作的系統(tǒng)中,“0”通過0V的短脈沖進(jìn)行通信,而“1”通過5V的短脈沖進(jìn)行通信。?


數(shù)據(jù)位可以通過并行或串行的形式進(jìn)行傳輸。?在并行通信中,數(shù)據(jù)位在導(dǎo)線上同時(shí)傳輸。下圖顯示了二進(jìn)制(01000011)中字母“C”的并行傳輸:


在串行通信中,位通過單根線一一發(fā)送。下圖顯示了二進(jìn)制(01000011)中字母“C”的串行傳輸:


SPI通信


SPI是一種常見的設(shè)備通用通信協(xié)議。它有一個(gè)獨(dú)特優(yōu)勢就是可以無中斷傳輸數(shù)據(jù),可以連續(xù)地發(fā)送或接收任意數(shù)量的位。而在I2C和UART中,數(shù)據(jù)以數(shù)據(jù)包的形式發(fā)送,有著限定位數(shù)。


在SPI設(shè)備中,設(shè)備分為主機(jī)與從機(jī)系統(tǒng)。主機(jī)是控制設(shè)備(通常是微控制器),而從機(jī)(通常是傳感器,顯示器或存儲芯片)從主機(jī)那獲取指令。


一套SPI通訊共包含四種信號線:MOSI (Master Output/Slave Input)?– 信號線,主機(jī)輸出,從機(jī)輸入。MISO (Master Input/Slave Output)?– 信號線,主機(jī)輸入,從機(jī)輸出。SCLK (Clock)?– 時(shí)鐘信號。SS/CS (Slave Select/Chip Select)?– 片選信號。




SPI協(xié)議特點(diǎn)

實(shí)際上,從機(jī)的數(shù)量受系統(tǒng)負(fù)載電容的限制,它會降低主機(jī)在電壓電平之間準(zhǔn)確切換的能力。


工作原理


時(shí)鐘信號

每個(gè)時(shí)鐘周期傳輸一位數(shù)據(jù),因此數(shù)據(jù)傳輸?shù)乃俣热Q于時(shí)鐘信號的頻率。?時(shí)鐘信號由于是主機(jī)配置生成的,因此SPI通信始終由主機(jī)啟動。?

設(shè)備共享時(shí)鐘信號的任何通信協(xié)議都稱為同步。SPI是一種同步通信協(xié)議,還有一些異步通信不使用時(shí)鐘信號。?例如在UART通信中,雙方都設(shè)置為預(yù)先配置的波特率,該波特率決定了數(shù)據(jù)傳輸?shù)乃俣群蜁r(shí)序。


片選信號

主機(jī)通過拉低從機(jī)的CS/SS來使能通信。?在空閑/非傳輸狀態(tài)下,片選線保持高電平。在主機(jī)上可以存在多個(gè)CS/SS引腳,允許主機(jī)與多個(gè)不同的從機(jī)進(jìn)行通訊。

如果主機(jī)只有一個(gè)片選引腳可用,則可以通過以下方式連接這些從器件:

MOSI和MISO

主機(jī)通過MOSI以串行方式將數(shù)據(jù)發(fā)送給從機(jī),從機(jī)也可以通過MISO將數(shù)據(jù)發(fā)送給主機(jī),兩者可以同時(shí)進(jìn)行。所以理論上,SPI是一種全雙工的通訊協(xié)議。


傳輸步驟



1.?主機(jī)輸出時(shí)鐘信號



2. 主機(jī)拉低SS / CS引腳,激活從機(jī)



3. 主機(jī)通過MOSI將數(shù)據(jù)發(fā)送給從機(jī)



4. 如果需要響應(yīng),則從機(jī)通過MISO將數(shù)據(jù)返回給主機(jī)


?

使用SPI有一些優(yōu)點(diǎn)和缺點(diǎn),如果在不同的通信協(xié)議之間進(jìn)行選擇,則應(yīng)根據(jù)項(xiàng)目要求進(jìn)行充分考量。


優(yōu)劣


優(yōu)點(diǎn)

SPI通訊無起始位和停止位,因此數(shù)據(jù)可以連續(xù)流傳輸而不會中斷;沒有像I2C這樣的復(fù)雜的從站尋址系統(tǒng),數(shù)據(jù)傳輸速率比I2C更高(幾乎快兩倍)。獨(dú)立的MISO和MOSI線路,可以同時(shí)發(fā)送和接收數(shù)據(jù)。


缺點(diǎn)

SPI使用四根線(I2C和UART使用兩根線),沒有信號接收成功的確認(rèn)(I2C擁有此功能),沒有任何形式的錯(cuò)誤檢查(如UART中的奇偶校驗(yàn)位等)。




UART代表通用異步接收器/發(fā)送器也稱為串口通訊,它不像SPI和I2C這樣的通信協(xié)議,而是微控制器中的物理電路或獨(dú)立的IC。


UART的主要目的是發(fā)送和接收串行數(shù)據(jù),其最好的優(yōu)點(diǎn)是它僅使用兩條線在設(shè)備之間傳輸數(shù)據(jù)。UART的原理很容易理解,但是如果您還沒有閱讀SPI 通訊協(xié)議,那可能是一個(gè)不錯(cuò)的起點(diǎn)。

UART通信


在UART通信中,兩個(gè)UART直接相互通信。?發(fā)送UART將控制設(shè)備(如CPU)的并行數(shù)據(jù)轉(zhuǎn)換為串行形式,以串行方式將其發(fā)送到接收UART。只需要兩條線即可在兩個(gè)UART之間傳輸數(shù)據(jù),數(shù)據(jù)從發(fā)送UART的Tx引腳流到接收UART的Rx引腳:
UART屬于異步通訊,這意味著沒有時(shí)鐘信號,取而代之的是在數(shù)據(jù)包中添加開始和停止位。這些位定義了數(shù)據(jù)包的開始和結(jié)束,因此接收UART知道何時(shí)讀取這些數(shù)據(jù)。?
當(dāng)接收UART檢測到起始位時(shí),它將以特定波特率的頻率讀取。波特率是數(shù)據(jù)傳輸速度的度量,以每秒比特?cái)?shù)(bps)表示。兩個(gè)UART必須以大約相同的波特率工作,發(fā)送和接收UART之間的波特率只能相差約10%。


工作原理

發(fā)送UART從數(shù)據(jù)總線獲取并行數(shù)據(jù)后,它會添加一個(gè)起始位,一個(gè)奇偶校驗(yàn)位和一個(gè)停止位來組成數(shù)據(jù)包并從Tx引腳上逐位串行輸出,接收UART在其Rx引腳上逐位讀取數(shù)據(jù)包。
UART數(shù)據(jù)包含有1個(gè)起始位,5至9個(gè)數(shù)據(jù)位(取決于UART),一個(gè)可選的奇偶校驗(yàn)位以及1個(gè)或2個(gè)停止位:始位:

UART數(shù)據(jù)傳輸線通常在不傳輸數(shù)據(jù)時(shí)保持在高電壓電平。開始傳輸時(shí)發(fā)送UART在一個(gè)時(shí)鐘周期內(nèi)將傳輸線從高電平拉低到低電平,當(dāng)接收UART檢測到高電壓到低電壓轉(zhuǎn)換時(shí),它開始以波特率的頻率讀取數(shù)據(jù)幀中的位。


數(shù)據(jù)幀:


數(shù)據(jù)幀內(nèi)包含正在傳輸?shù)膶?shí)際數(shù)據(jù)。如果使用奇偶校驗(yàn)位,則可以是5位,最多8位。如果不使用奇偶校驗(yàn)位,則數(shù)據(jù)幀的長度可以為9位。?


校驗(yàn)位:


奇偶校驗(yàn)位是接收UART判斷傳輸期間是否有任何數(shù)據(jù)更改的方式。接收UART讀取數(shù)據(jù)幀后,它將對值為1的位數(shù)進(jìn)行計(jì)數(shù),并檢查總數(shù)是偶數(shù)還是奇數(shù),是否與數(shù)據(jù)相匹配。


停止位:


為了向數(shù)據(jù)包的結(jié)尾發(fā)出信號,發(fā)送UART將數(shù)據(jù)傳輸線從低電壓驅(qū)動到高電壓至少持續(xù)兩位時(shí)間。


傳輸步驟



  1. 發(fā)送UART從數(shù)據(jù)總線并行接收數(shù)據(jù):?



2.發(fā)送UART將起始位,奇偶校驗(yàn)位和停止位添加到數(shù)據(jù)幀:



3.整個(gè)數(shù)據(jù)包從發(fā)送UART串行發(fā)送到接收UART。接收UART以預(yù)先配置的波特率對數(shù)據(jù)線進(jìn)行采樣:



4.接收UART丟棄數(shù)據(jù)幀中的起始位,奇偶校驗(yàn)位和停止位:



5.接收UART將串行數(shù)據(jù)轉(zhuǎn)換回并行數(shù)據(jù),并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線:




優(yōu)劣


沒有任何通信協(xié)議是完美的,但是UART非常擅長于其工作。以下是一些利弊,可幫助您確定它們是否適合您的項(xiàng)目需求:


優(yōu)點(diǎn)

  • 僅使用兩根電線

  • 無需時(shí)鐘信號

  • 具有奇偶校驗(yàn)位以允許進(jìn)行錯(cuò)誤檢查

  • 只要雙方都設(shè)置好數(shù)據(jù)包的結(jié)構(gòu)

  • 有據(jù)可查并得到廣泛使用的方法


缺點(diǎn)

  • 數(shù)據(jù)幀的大小最大為9位

  • 不支持多個(gè)從屬系統(tǒng)或多個(gè)主系統(tǒng)

  • 每個(gè)UART的波特率必須在彼此的10%之內(nèi)


I2C通信


I2C總線是由Philips公司開發(fā)的一種簡單、雙向二線制同步串行總線。它只需要兩根線即可傳送信息。它結(jié)合了 SPI 和 UART 的優(yōu)點(diǎn),您可以將多個(gè)從機(jī)連接到單個(gè)主機(jī)(如SPI那樣),也可以使用多個(gè)主機(jī)控制一個(gè)或多個(gè)從機(jī)。當(dāng)您想讓多個(gè)微控制器將數(shù)據(jù)記錄到單個(gè)存儲卡或?qū)⑽谋撅@示到單個(gè)LCD時(shí),這將非常有用。



SDA (Serial Data)?– 數(shù)據(jù)線。

SCL (Serial Clock)?– 時(shí)鐘線。

I2C是串行通信協(xié)議,因此數(shù)據(jù)沿著SDA一點(diǎn)一點(diǎn)地傳輸。與SPI一樣,I2C也需要時(shí)鐘同步信號且時(shí)鐘始終由主機(jī)控制。



工作原理


I2C的數(shù)據(jù)傳輸是以多個(gè)msg的形式進(jìn)行,每個(gè)msg都包含從機(jī)的二進(jìn)制地址幀,以及一個(gè)或多個(gè)數(shù)據(jù)幀,還包括開始條件和停止條件,讀/寫位和數(shù)據(jù)幀之間的ACK / NACK位:



啟動條件:當(dāng)SCL是高電平時(shí),SDA從高電平向低電平切換。


停止條件:當(dāng)SCL是高電平時(shí),SDA由低電平向高電平切換。



地址幀:每個(gè)從屬設(shè)備唯一的7位或10位序列,用于主從設(shè)備之間的地址識別。


讀/寫位:一位,如果主機(jī)是向從機(jī)發(fā)送數(shù)據(jù)則為低電平,請求數(shù)據(jù)則為高電平。


ACK/NACK:消息中的每個(gè)幀后均帶有一個(gè)ACK/NACK位。如果成功接收到地址幀或數(shù)據(jù)幀,接收設(shè)備會返回一個(gè)ACK位用于表示確認(rèn)。


尋址

由于I2C沒有像SPI那樣的片選線,因此它需要使用另一種方式來確認(rèn)某一個(gè)從設(shè)備,而這個(gè)方式就是 ——?尋址?。


主機(jī)將要通信的從機(jī)地址發(fā)送給每個(gè)從機(jī),然后每個(gè)從機(jī)將其與自己的地址進(jìn)行比較。如果地址匹配,它將向主機(jī)發(fā)送一個(gè)低電平ACK位。如果不匹配,則不執(zhí)行任何操作,SDA線保持高電平。


讀/寫位?

地址幀的末尾包含一個(gè)讀/寫位。如果主機(jī)要向從機(jī)發(fā)送數(shù)據(jù),則為低電平。如果是主機(jī)向從機(jī)請求數(shù)據(jù),則為高電平。


數(shù)據(jù)幀

當(dāng)主機(jī)檢測到從機(jī)的ACK位后,就可以發(fā)送第一個(gè)數(shù)據(jù)幀了。數(shù)據(jù)幀始終為8位,每個(gè)數(shù)據(jù)幀后緊跟一個(gè)ACK / NACK位,來驗(yàn)證接收狀態(tài)。當(dāng)發(fā)送完所有數(shù)據(jù)幀后,主機(jī)可以向從機(jī)發(fā)送停止條件來終止通信。


傳輸步驟


1. 在SCL線為高電平時(shí),主機(jī)通過將SDA線從高電平切換到低電平來啟動總線通信。


2. 主機(jī)向總線發(fā)送要與之通信的從機(jī)的7位或10位地址,以及讀/寫位:


3. 每個(gè)從機(jī)將主機(jī)發(fā)送的地址與其自己的地址進(jìn)行比較。如果地址匹配,則從機(jī)通過將SDA線拉低一位返回一個(gè)ACK位。如果主機(jī)的地址與從機(jī)的地址不匹配,則從機(jī)將SDA線拉高。



4. 主機(jī)發(fā)送或接收數(shù)據(jù)幀:



5. 傳輸完每個(gè)數(shù)據(jù)幀后,接收設(shè)備將另一個(gè)ACK位返回給發(fā)送方,以確認(rèn)已成功接收到該幀:


6. 隨后主機(jī)將SCL切換為高電平,然后再將SDA切換為高電平,從而向從機(jī)發(fā)送停止條件。


單個(gè)主機(jī)VS多個(gè)從機(jī)

由于I2C使用尋址功能,可以通過一個(gè)主機(jī)控制多個(gè)從機(jī)。使用7位地址時(shí),最多可以使用128(27)個(gè)唯一地址。使用10位地址并不常見,但可以提供1,024(210)個(gè)唯一地址。如果要將多個(gè)從機(jī)連接到單個(gè)主機(jī)時(shí),請使用4.7K歐的上拉電阻將它們連接,例如將SDA和SCL線連接到Vcc:

多個(gè)主機(jī)VS多個(gè)從機(jī)

I2C支持多個(gè)主機(jī)同時(shí)與多個(gè)從機(jī)相連,當(dāng)兩個(gè)主機(jī)試圖通過SDA線路同時(shí)發(fā)送或接收數(shù)據(jù)時(shí),就會出現(xiàn)問題。因此每個(gè)主機(jī)都需要在發(fā)送消息之前檢測SDA線是低電平還是高電平。如果SDA線為低電平,則意味著另一個(gè)主機(jī)正在控制總線。如果SDA線高,則可以安全地發(fā)送數(shù)據(jù)。如果要將多個(gè)主機(jī)連接到多個(gè)從機(jī),請使用4.7K歐的上拉電阻將SDA和SCL線連接到Vcc:


優(yōu)劣


與其他協(xié)議相比,I2C可能聽起來很復(fù)雜。以下是一些利弊,可幫助您確定它們是否適合您的項(xiàng)目需求:


優(yōu)點(diǎn)

  • 僅使用兩根電線

  • 支持多個(gè)主機(jī)和多個(gè)從機(jī)

  • 每個(gè)UART的波特率必須在彼此的10%之內(nèi)

  • 硬件比UART更簡單

  • 眾所周知且被廣泛使用的協(xié)議


缺點(diǎn)

  • 數(shù)據(jù)傳輸速率比SPI慢

  • 數(shù)據(jù)幀的大小限制為8位



本文來源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請聯(lián)系我進(jìn)行刪除。

往期干貨:

往期推薦



嵌入式項(xiàng)目生成器,了解一下!

小知識 | 嵌入式C中#pragma once的作用是什么?

一個(gè)清晰的LCD驅(qū)動編寫思路(附代碼分析)

高效的、省內(nèi)存的、任意格式的隊(duì)列


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉