對于嵌入式領(lǐng)域的初學(xué)者來說,深入掌握I2C等通信接口的相關(guān)知識不僅可以幫助他們深化對通信協(xié)議和工作方式的理解,提升調(diào)試技能以及通信接口的設(shè)計能力;還能拓寬其技術(shù)應(yīng)用范圍,培養(yǎng)系統(tǒng)級的思維方式;因此本文將圍繞I2C接口展開全面且深入的剖析,旨在為嵌入式初學(xué)者構(gòu)建全面的知識體系。
1、基本概念
?
I2C總線是共享的總線系統(tǒng),因此可以將多個I2C設(shè)備連接到該系統(tǒng)上,不同的I2C設(shè)備有不同的器件地址,主設(shè)備通過I2C設(shè)備的器件地址訪問指定的I2C從設(shè)備,連接方式如下圖:

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

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

在數(shù)據(jù)傳輸時,SDA線上面的每個字節(jié)數(shù)據(jù)長度必須是8位。每次傳輸?shù)淖止?jié)不受限制,每個字節(jié)后面跟隨著一個應(yīng)答位,數(shù)據(jù)以高有效位傳輸。如果從機不能夠接收數(shù)據(jù)或者傳輸一個完整的數(shù)據(jù)字節(jié),直到他完成某些其他功能。例如一個內(nèi)部中斷,它可以保持SCL為低電平狀態(tài),迫使主服務(wù)器進入等待狀態(tài)。當從機準備好接收數(shù)據(jù)后它會釋放SCL時鐘線數(shù)據(jù)繼續(xù)傳輸。
?
關(guān)于I2C就介紹到這里。期待上述內(nèi)容能為嵌入式開發(fā)學(xué)習(xí)者和愛好者提供可落地的設(shè)計思路,若您在項目實踐中遇到相關(guān)難題,歡迎私信我們繼續(xù)深入探討。
