一文了解I2C總線工作原理、優(yōu)缺點(diǎn)和應(yīng)用
出處:EEWORLD 發(fā)布于:2020-05-25 15:30:04
如果您正在使用OLED顯示器,氣壓傳感器或陀螺儀/加速度計(jì)模塊的項(xiàng)目,您可能會(huì)發(fā)現(xiàn)正在使用I2C總線。
I2C總線簡(jiǎn)介
I2C結(jié)合了SPI和UART的優(yōu)點(diǎn)。使用I2C,您可以將多個(gè)從設(shè)備連接到單個(gè)主設(shè)備上(如SPI),并且可以讓多個(gè)主器件控制單個(gè)或多個(gè)從器件。當(dāng)您希望有多個(gè)微控制器記錄數(shù)據(jù)到單個(gè)存儲(chǔ)卡或?qū)⑽谋撅@示到單個(gè)LCD時(shí),這非常有用。
與UART通信一樣,I2C僅使用兩條線在設(shè)備之間傳輸數(shù)據(jù):
SDA(串行數(shù)據(jù)) - 主站和從站發(fā)送和接收數(shù)據(jù)的線路。
SCL(串行時(shí)鐘) - 承載時(shí)鐘信號(hào)的線路。
I2C是一種串行通信協(xié)議,因此數(shù)據(jù)沿著單線(SDA線)逐位傳輸。
與SPI一樣,I2C是同步的,因此位輸出通過(guò)主機(jī)和從機(jī)之間共享的時(shí)鐘信號(hào)與位采樣同步。時(shí)鐘信號(hào)始終由主機(jī)控制。
I2C如何工作
使用I2C時(shí),數(shù)據(jù)被轉(zhuǎn)換成messages,messages則被分解為數(shù)據(jù)幀。每條messages都有一個(gè)地址幀,其中包含從站的二進(jìn)制地址,以及一個(gè)或多個(gè)包含正在傳輸?shù)臄?shù)據(jù)的數(shù)據(jù)幀。該消息還包括每個(gè)數(shù)據(jù)幀之間的啟動(dòng)和停止條件,讀/寫位和ACK / NACK位:
圖片.png
啟動(dòng)條件:在SCL線路從高電平切換到低電平之前,SDA線路從高電平切換到低電平。
停止條件:SCL線路從低電平切換到高電平后,SDA線路從低電平切換到高電平。
地址幀:每個(gè)從站的7或10位序列,用于在主站想與之通信時(shí)識(shí)別從站。
讀/寫位:?jiǎn)蝹€(gè)位,指定主器件是向從器件發(fā)送數(shù)據(jù)(低電壓電平)還是從器件請(qǐng)求數(shù)據(jù)(高電壓電平)。
ACK / NACK位:消息中的每個(gè)幀后跟一個(gè)應(yīng)答/不應(yīng)答位。如果成功接收到地址幀或數(shù)據(jù)幀,則從接收設(shè)備向發(fā)送方返回ACK位。
地址
I2C沒(méi)有像SPI這樣的從選擇線,因此它需要另一種方法讓從器件知道數(shù)據(jù)正在發(fā)送給它,而不是另一個(gè)從器件。它通過(guò)地址來(lái)做到這一點(diǎn)。地址幀始終是新消息中起始位之后的幀。
主設(shè)備將與其通信的從設(shè)備的地址發(fā)送給與其連接的每個(gè)從設(shè)備。然后,每個(gè)從設(shè)備將從主設(shè)備發(fā)送的地址與其自己的地址進(jìn)行比較。如果地址匹配,則將低電壓ACK位發(fā)送回主機(jī)。如果地址不匹配,則從器件不執(zhí)行任何操作,SDA線保持高電平。
讀/寫位
地址幀在末尾包括一個(gè)位,用于通知從設(shè)備,主設(shè)備是想要向其寫入數(shù)據(jù)還是從主設(shè)備接收數(shù)據(jù)。如果主設(shè)備想要向從設(shè)備發(fā)送數(shù)據(jù),則讀/寫位是低電平。如果主設(shè)備向從設(shè)備請(qǐng)求數(shù)據(jù),則該位是高電平。
數(shù)據(jù)框架
在主設(shè)備檢測(cè)到來(lái)自從設(shè)備的ACK位之后,準(zhǔn)備好發(fā)送個(gè)數(shù)據(jù)幀。
數(shù)據(jù)幀始終為8位長(zhǎng),并以有效位先發(fā)送。緊接著每個(gè)數(shù)據(jù)幀的ACK / NACK位以驗(yàn)證幀已被成功接收。在發(fā)送下一個(gè)數(shù)據(jù)幀之前,主機(jī)或從機(jī)必須接收ACK位(取決于發(fā)送數(shù)據(jù)的人)。
在發(fā)送了所有數(shù)據(jù)幀之后,主設(shè)備可以向從設(shè)備發(fā)送停止條件以停止傳輸。停止條件是SCL線上從低電平到高電平轉(zhuǎn)換后,SDA線上從低電平變?yōu)楦唠娖?,SCL線保持高電平。
I2C數(shù)據(jù)傳輸步驟
1.主機(jī)向每一個(gè)連接的從設(shè)備發(fā)送數(shù)據(jù),然后將SDA信號(hào)從高切換到低,之后在將SCL從高切換到低電平。
2.主設(shè)備向每個(gè)從設(shè)備發(fā)送它想要與之通信的從設(shè)備的7或10位地址,以及讀/寫位:
3.每個(gè)從設(shè)備將主設(shè)備發(fā)送的地址與其自己的地址進(jìn)行比較。如果地址匹配,則從器件通過(guò)將SDA線拉低一位來(lái)返回ACK位。如果主設(shè)備的地址與從設(shè)備的地址不匹配,則從設(shè)備將SDA線保持為高電平。
4.主設(shè)備發(fā)送或接收數(shù)據(jù)幀:
5.在傳輸了每個(gè)數(shù)據(jù)幀之后,接收設(shè)備將另一個(gè)ACK位返回給發(fā)送方以確認(rèn)成功接收到該幀:
圖片.png
6.要停止數(shù)據(jù)傳輸,主機(jī)通過(guò)在將SDA切換為高電平之前切換SCL為高電平來(lái)向從機(jī)發(fā)送停止條件:
有多個(gè)從設(shè)備的單一主設(shè)備
由于I2C使用尋址,因此可以從單個(gè)主設(shè)備控制多個(gè)從設(shè)備。使用7位地址,可以使用128(27)個(gè)地址。使用10位地址并不常見(jiàn),但提供1,024(210)個(gè)地址。要將多個(gè)從器件連接到單個(gè)主器件,請(qǐng)像這樣連接它們,使用4.7K歐姆上拉電阻將SDA和SCL線連接到Vcc:
有多個(gè)從設(shè)備及多個(gè)主設(shè)備
多個(gè)主設(shè)備可以連接到單個(gè)從設(shè)備或多個(gè)從設(shè)備。當(dāng)兩個(gè)主設(shè)備嘗試通過(guò)SDA線同時(shí)發(fā)送或接收數(shù)據(jù)時(shí),同一系統(tǒng)中出現(xiàn)多個(gè)主設(shè)備的問(wèn)題。為了解決這個(gè)問(wèn)題,每個(gè)主設(shè)備需要在發(fā)送消息之前檢測(cè)SDA線路是低還是高。如果SDA線為低電平,則表示另一個(gè)主控制器已控制總線,主控制器應(yīng)等待發(fā)送消息。如果SDA線路很高,那么傳輸信息是安全的。要將多個(gè)主設(shè)備連接到多個(gè)從設(shè)備,請(qǐng)使用下圖,使用4.7K歐姆上拉電阻將SDA和SCL線路連接到Vcc:
圖片.png
I2C的優(yōu)點(diǎn)和缺點(diǎn)
與其他協(xié)議相比,I2C聽起來(lái)很復(fù)雜,不容易在程序中實(shí)現(xiàn)而導(dǎo)致數(shù)據(jù)丟失、無(wú)應(yīng)答、“死等”等問(wèn)題。但卻有很多優(yōu)點(diǎn):
優(yōu)點(diǎn)
只使用兩根電線
支持多個(gè)主服務(wù)器和多個(gè)從服務(wù)器
ACK / NACK位確認(rèn)每個(gè)幀都已成功傳輸
硬件沒(méi)有UART那么復(fù)雜
眾所周知且廣泛使用的協(xié)議
缺點(diǎn)
數(shù)據(jù)傳輸速率比SPI慢
數(shù)據(jù)幀的大小限制為8位
實(shí)現(xiàn)比SPI更復(fù)雜的硬件
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://udpf.com.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 簡(jiǎn)述計(jì)算機(jī)總線的分類2025/9/4 17:12:23
- 深度剖析三進(jìn)線兩母聯(lián)供電系統(tǒng)設(shè)計(jì)方案2025/9/3 10:37:39
- 匯流排是什么匯流排好還是線接好2025/8/28 17:13:00
- 安森美 USB - C 電池充電器解決方案2025/8/28 15:45:10
- I2C 總線加上拉電阻的必要性2025/8/25 16:42:09
- 交交型變頻器和交直交型變頻器的區(qū)別
- 800G DR8 與其他 800G 光模塊的對(duì)比分析
- UPS電源中電流電壓傳感器的應(yīng)用
- 51單片機(jī)電平特性是什么
- AC/DC 與 DC/DC 轉(zhuǎn)換器的工作原理與應(yīng)用
- PCB板層設(shè)計(jì)與電磁兼容性的關(guān)系解析
- 接觸器式繼電器怎么區(qū)分 如何測(cè)量好壞
- 車規(guī)級(jí)MCU介紹及應(yīng)用場(chǎng)景
- 電容選型時(shí)如何選擇產(chǎn)品的電壓
- 線性穩(wěn)壓電源與開關(guān)穩(wěn)壓電源:原理、特性及應(yīng)用