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