嵌入式硬件通信接口協(xié)議-IIC(一):協(xié)議基礎(chǔ)
本節(jié)繼續(xù)講嵌入式硬件通信接口協(xié)議中的又一個串行通信接口-IIC。相比于UART串口協(xié)議和SPI串行外設(shè)接口協(xié)議,這個IIC又有其獨特之處。
簡介
IIC(Inter-Integrated Circuit),集成電路總線。
IIC 即Inter-IntegratedCircuit(集成電路總線),這種總線類型是由飛利浦半導(dǎo)體公司在八十年代初設(shè)計出來的一種簡單、雙向、二線制、同步串行總線,主要是用來連接整體電路(ICS) ,IIC是一種多向控制總線,也就是說多個芯片可以連接到同一總線結(jié)構(gòu)下,同時每個芯片都可以作為實時數(shù)據(jù)傳輸?shù)目刂圃?。這種方式簡化了信號傳輸總線接口。
相比于SPI接口《嵌入式硬件通信接口協(xié)議-SPI(一)協(xié)議基礎(chǔ)》,此處的IIC接口定義了多主多從的通信架構(gòu),在同一IIC總線上可有多個主機(jī)和多個從機(jī)。“主->從”的通信架構(gòu)使得通信的主動權(quán)在主機(jī)端,主機(jī)發(fā)起一次通信,從機(jī)做出響應(yīng)。
信號線
IIC作為兩線串行總線,信號線分別是:
SCL(Serial ClockLine):串行時鐘,主機(jī)輸出
SDA(Serial DataLine):串行數(shù)據(jù),雙向傳輸
總線信號的電平在電路連接上,一般加上拉電阻Rp,使得總線在空閑時,信號管腳處于高電平狀態(tài)。
這里可以具體到一些芯片的手冊里,明確寫出線路連接時的上拉電阻要求:
SHT20溫濕度傳感器要求的上拉電阻:
在觸摸按鍵BS116A-3芯片數(shù)據(jù)手冊中:
信號時序
IIC作為同步串行總線,可以認(rèn)為有兩個同步信號,第一個是通信起始、結(jié)束標(biāo)志,告知掛在IIC總線上的從機(jī)設(shè)備,何時開始通信并且何時結(jié)束;第二個是同步時鐘信號SCL,收發(fā)雙方進(jìn)行數(shù)據(jù)的交互時,都是基于SCL的跳變進(jìn)行逐bit輸出和采樣的。
起始標(biāo)志
處于空閑狀態(tài)下時,SCL和SDA都是高電平,某一時刻,SDA拉低,則此刻認(rèn)為開始IIC傳輸。
結(jié)束標(biāo)志
即將完成數(shù)據(jù)傳輸時,在SCL處于高電平時,將SDA強(qiáng)制拉高,則此刻認(rèn)為結(jié)束IIC傳輸。
數(shù)據(jù)輸出
在SCL為低電平時,發(fā)送方根據(jù)傳輸?shù)臄?shù)據(jù)內(nèi)容逐bit改變SDA的電平。
數(shù)據(jù)采樣
在SCL為高電平時,接收方讀取SDA的電平逐bit接收,并逐8個bit組成1個Byte。
應(yīng)答ACK
ACK表示在8bit數(shù)據(jù)后的第9個時鐘的高電平期間,SDA保持低電平。
應(yīng)答NACK
NACK表示在8bit數(shù)據(jù)后的第9個時鐘的高電平期間,SDA保持高電平。
關(guān)于理解和記憶,推薦分組記憶:
SCL高電平時,SDA拉低開始,SDA拉高結(jié)束;
SCL高電平時,接收方采樣SDA管腳電平;SCL低電平時,發(fā)送方改變SDA管腳電平;
應(yīng)答位,SDA低電平表示ACK,SDA高電平表示NACK。
以上就是IIC在通信過程中,可能出現(xiàn)的信號時序狀態(tài)特征。
如果要和SPI接口對比,我們發(fā)現(xiàn),在IIC總線上掛了多個從設(shè)備,某個時刻某個主機(jī)要與某個從設(shè)備通信時,卻不像SPI那樣有單獨一個片選信號管腳SS。
那么IIC要實現(xiàn)主機(jī)與指定從機(jī)的通信,需要每次開始通信時,主機(jī)會先把指定從機(jī)設(shè)備的地址通過接口發(fā)出,這樣一來,對應(yīng)的從機(jī)設(shè)備即可被選中,才能進(jìn)行后續(xù)的通信操作。
類似的,每個具有IIC接口的外圍器件,其數(shù)據(jù)手冊中都有關(guān)于地址的配置:
SHT20溫濕度芯片地址配置:
BS116-3觸摸芯片地址配置: