1、基本概念
I2C的全稱(chēng)是Inter-Integrated Circuit,譯為集成電路總線,是一種同步、雙向、半雙工的兩線式串行接口總線。連接到I2C總線上的設(shè)備既可以用作主設(shè)備,也可以用作從設(shè)備。主設(shè)備通常是一個(gè)微控制器或微處理器,用來(lái)控制通信的啟動(dòng)和停止、時(shí)鐘信號(hào)(SCL)的產(chǎn)生,以及數(shù)據(jù)傳輸;從設(shè)備則是等待來(lái)自主設(shè)備的命令并響應(yīng)命令接收。
I2C總線是共享的總線系統(tǒng),因此可以將多個(gè)I2C設(shè)備連接到該系統(tǒng)上,不同的I2C設(shè)備有不同的器件地址,主設(shè)備通過(guò)I2C設(shè)備的器件地址訪問(wèn)指定的I2C從設(shè)備,連接方式如下圖:

I2C采用的開(kāi)漏輸出,SDA跟SCL兩根線都需要加上拉電阻,當(dāng)總線空閑時(shí)候兩根線是高電平。I2C的優(yōu)點(diǎn)在于其簡(jiǎn)單性、靈活性、易于集成、通信速度快、占用引腳少、連接簡(jiǎn)單等。然而,由于其半雙工的工作方式,以及在同一總線上連接的設(shè)備數(shù)量有限,I2C在某些應(yīng)用中可能不是最佳選擇,也具有傳輸距離短、信號(hào)干擾大等缺點(diǎn)。
2、工作原理
I2C是一種雙線總線,分別是時(shí)鐘線SCL和數(shù)據(jù)線SDA。在正常工作中,總線協(xié)議有起始條件與停止條件。
起始條件:SCL為高電平,SDA由高電平變?yōu)榈碗娖健?/p>
停止條件:SCL為高電平,SDA由低電平變?yōu)楦唠娖健?/p>
起始跟停止條件由主機(jī)控制。當(dāng)主機(jī)發(fā)出起始條件后,I2C總線會(huì)被認(rèn)為忙碌狀態(tài)。當(dāng)主機(jī)發(fā)出停止條件后,I2C總線會(huì)被認(rèn)為空閑狀態(tài)。當(dāng)主機(jī)發(fā)送一個(gè)重新起始條件替代停止位I2C總線也會(huì)被認(rèn)為處于忙碌狀態(tài)。

主機(jī)發(fā)出起始條件后,開(kāi)始讀取數(shù)據(jù),但這里要注意的是數(shù)據(jù)的有效性。
數(shù)據(jù)有效性:SCL時(shí)鐘線在高電平期間,SDA必須是穩(wěn)定的。SCL時(shí)鐘線在低電平時(shí)候SDA數(shù)據(jù)線才允許高電平或者低電平變化。每傳送一個(gè)數(shù)據(jù)位產(chǎn)生一個(gè)時(shí)鐘。

在數(shù)據(jù)傳輸時(shí),SDA線上面的每個(gè)字節(jié)數(shù)據(jù)長(zhǎng)度必須是8位。每次傳輸?shù)淖止?jié)不受限制,每個(gè)字節(jié)后面跟隨著一個(gè)應(yīng)答位,數(shù)據(jù)以高有效位傳輸。如果從機(jī)不能夠接收數(shù)據(jù)或者傳輸一個(gè)完整的數(shù)據(jù)字節(jié),直到他完成某些其他功能。例如一個(gè)內(nèi)部中斷,它可以保持SCL為低電平狀態(tài),迫使主服務(wù)器進(jìn)入等待狀態(tài)。當(dāng)從機(jī)準(zhǔn)備好接收數(shù)據(jù)后它會(huì)釋放SCL時(shí)鐘線數(shù)據(jù)繼續(xù)傳輸。
-
單片機(jī)
+關(guān)注
關(guān)注
6058文章
44821瀏覽量
644676 -
嵌入式
+關(guān)注
關(guān)注
5125文章
19438瀏覽量
313051 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5389瀏覽量
100878 -
I2C接口
+關(guān)注
關(guān)注
1文章
133瀏覽量
25787
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
利用數(shù)字示波器調(diào)試嵌入式I2C總線
I2C總線介紹 I2C讀寫(xiě)時(shí)序介紹

嵌入式教育科普|GPIO接口全面解析

ElfBoard嵌入式教育科普|ADC接口全面解析

基于CPLD的I2C總線接口設(shè)計(jì)

基于嵌入式Linux演示I2C設(shè)備調(diào)試
I2C LCD 器件通過(guò)驅(qū)動(dòng)帶有 I2C 接口的 2 線式 16 字符 LCD

基于嵌入式Linux下的I2C設(shè)備驅(qū)動(dòng)的總體思路與框架設(shè)計(jì)

如何玩轉(zhuǎn)嵌入式開(kāi)發(fā)中i2c協(xié)議

I2C系列的合集,可以系統(tǒng)學(xué)習(xí)I2C協(xié)議
嵌入式linux應(yīng)用讀寫(xiě)i2c示例

物聯(lián)網(wǎng)嵌入式軟件中的I2C總線設(shè)計(jì)詳解

ElfBoard嵌入式教育科普|UART接口全面解析

評(píng)論