公司營銷網(wǎng)站制作下載百度官方網(wǎng)站
一、基本概念
IIC(Inter-Integrated Circuit)其實(shí)是IICBus簡稱,所以中文應(yīng)該叫集成電路總線,它是一種串行通信總線,使用多主從架構(gòu)。
二、模塊結(jié)構(gòu)
I2C串行總線一般有兩根信號(hào)線,一根是雙向的數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。所有接到I2C總線設(shè)備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設(shè)備的時(shí)鐘線SCL接到總線的SCL上。
三、功能特性
3.1.協(xié)議限制
- 為了避免總線信號(hào)的混亂,要求各設(shè)備連接到總線的輸出端時(shí)必須是漏極開路(OD)輸出或集電極開路(OC)輸出。
- 總線空閑時(shí),因各設(shè)備都是開漏輸出,上拉電阻Rp使SDA和SCL線都保持高電平。任一設(shè)備輸出的低電平都將使相應(yīng)的總線信號(hào)線變低,也就是說:各設(shè)備的SDA是“與”關(guān)系,SCL也是“與”關(guān)系。
- 只有在總線空閑的時(shí)候主機(jī)才可以啟動(dòng)傳輸。
- 總線上允許連接的設(shè)備數(shù)以其電容量不超過400pF為限。
- SDA線上的數(shù)據(jù)在時(shí)鐘“高”期間必須是穩(wěn)定的,只有當(dāng)SCL線上的時(shí)鐘信號(hào)為低時(shí),數(shù)據(jù)線上的“高”或“低”狀態(tài)才可以改變。
- 數(shù)據(jù)傳送具有應(yīng)答是必須的。與應(yīng)答對(duì)應(yīng)的時(shí)鐘脈沖由主控制器產(chǎn)生,發(fā)送器在應(yīng)答期間必須下拉SDA線。當(dāng)尋址的被控器件不能應(yīng)答時(shí),數(shù)據(jù)保持為高并使主控器產(chǎn)生停止條件而終止傳輸。
- SCL線控制:SCL 線拉低是為了避免在接收時(shí)發(fā)生上溢錯(cuò)誤以及在發(fā)送時(shí)發(fā)生下溢錯(cuò)誤。在發(fā)送模式,當(dāng) TBE 和 BTC 被置位,發(fā)送器保持 SCL 線為低電平直到下一個(gè)發(fā)送數(shù)據(jù)寫入傳輸緩沖區(qū)寄存器。在接收模式,當(dāng) RBNE 和 BTC 被置位,發(fā)送器保持 SCL線為低電平直到傳輸緩沖區(qū)寄存器里的數(shù)據(jù)被讀出。
3.2.功能特性
- 主從機(jī)之間的雙向數(shù)據(jù)傳輸(半雙工)。
- 支持 7 位和 10 位的地址模式和廣播尋址。
- 支持 I2C 多主機(jī)模式。
- 同一接口既可實(shí)現(xiàn)主機(jī)功能又可實(shí)現(xiàn)從機(jī)功能。
- 支持標(biāo)速模式(最高 100 kHz)和快速模式(最高 400 kHz)。?
- 總線仲裁:兩個(gè)主機(jī)可能在START信號(hào)的最短保持時(shí)間內(nèi),同時(shí)在總線上產(chǎn)生START信號(hào),這種情況下需要仲裁來決定由哪個(gè)主機(jī)來完成傳輸。仲裁逐位進(jìn)行,在每一位的仲裁期間,當(dāng)SCL為高時(shí),每個(gè)主機(jī)都檢查SDA電平是否和自己發(fā)送的相同。仲裁的過程需要持續(xù)很多位。理論上講,如果兩個(gè)主機(jī)所傳輸?shù)膬?nèi)容完全相同,那么它們能夠成功傳輸而不出現(xiàn)錯(cuò)誤。如果一個(gè)主機(jī)發(fā)送高電平但檢測到SDA電平為低,則認(rèn)為自己仲裁失敗并關(guān)閉自己的SDA輸出驅(qū)動(dòng),而另一個(gè)主機(jī)則繼續(xù)完成自己的傳輸。
- 時(shí)鐘同步:SCL線和SDA線是各設(shè)備對(duì)應(yīng)輸出狀態(tài)相“與”的結(jié)果,任一設(shè)備都可以用輸出低電平的方法來延長SCL的低電平時(shí)間,以迫使高速設(shè)備進(jìn)入等待狀態(tài),從而實(shí)現(xiàn)不同速度設(shè)備間的時(shí)鐘同步。??
????????
四、通訊流程
4.1. 起始/停止信號(hào)
所有的數(shù)據(jù)傳輸起始于一個(gè) START 結(jié)束于一個(gè) STOP。
START 信號(hào):在 SCL 為高時(shí),SDA 線上出現(xiàn)一個(gè)從高到低的電平轉(zhuǎn)換。
STOP 信號(hào):在 SCL 為高時(shí),SDA 線上出現(xiàn)一個(gè)從低到高的電平轉(zhuǎn)換。
4.2. ACK/NACK
要求從機(jī)在接收到每一個(gè)字節(jié)后產(chǎn)生一個(gè)響應(yīng)。因此,主機(jī)必須產(chǎn)生一個(gè)額外的時(shí)鐘脈沖(第九個(gè)脈沖)用以和這個(gè)響應(yīng)位相關(guān)聯(lián)。從機(jī)在第9個(gè)時(shí)鐘信號(hào)進(jìn)行拉低回應(yīng),發(fā)出響應(yīng)的從設(shè)備必須將SDA拉低并在時(shí)鐘脈沖的高電平期間保持住。這表示該設(shè)備給出了一個(gè)ACK。如果它不拉低SDA線,就表示不響應(yīng)(NACK)。
4.3. 數(shù)據(jù)傳輸
每個(gè)I2C設(shè)備(不管是微控制器,LCD驅(qū)動(dòng),存儲(chǔ)器或者鍵盤接口)都通過唯一的地址進(jìn)行識(shí)
別,根據(jù)設(shè)備功能,他們既可以是發(fā)送器也可作為接收器。
I2C從機(jī)檢測到I2C總線上的START信號(hào)之后,就開始從總線上接收地址,之后會(huì)把從總線接收
到的地址和自身的地址進(jìn)行比較,當(dāng)兩個(gè)地址相同時(shí),I2C從機(jī)將發(fā)送一個(gè)確認(rèn)應(yīng)答(ACK),并響應(yīng)總線的后續(xù)命令:發(fā)送或接收所需數(shù)據(jù)。此外,如果軟件開啟了廣播呼叫,則I2C從機(jī)始終對(duì)一個(gè)廣播地址(0x00)發(fā)送確認(rèn)應(yīng)答。
I2C主機(jī)負(fù)責(zé)產(chǎn)生START信號(hào)和STOP信號(hào)來開始和結(jié)束一次傳輸,并且負(fù)責(zé)產(chǎn)生SCL時(shí)鐘。