IIC原理及简单流程
IIC 即 inter-integrated-circuit,又稱 I2C 一種總線結(jié)構(gòu),具體接受請度娘。
I2C串行總線一般有兩根信號(hào)線,一根是雙向的數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。所有接到I2C總線設(shè)備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設(shè)備的時(shí)鐘線SCL接到總線的SCL上。
以下為mini2440的IIC設(shè)備:AT24C08
?
IIC遵從 主/從結(jié)構(gòu),通信由主機(jī)發(fā)起,并且由主機(jī)結(jié)束。
開始信號(hào)(s):當(dāng)時(shí)鐘信號(hào)處于高電平,向數(shù)據(jù)信號(hào)線發(fā)送下降沿。
結(jié)束信號(hào)(p):當(dāng)時(shí)鐘信號(hào)處于高電平,向數(shù)據(jù)信號(hào)線發(fā)送上升沿。
?
由于IIC總線上可能連有多個(gè)設(shè)備,因此我們應(yīng)該在開始信號(hào)后進(jìn)行設(shè)備選擇,也就是發(fā)送地址信號(hào),當(dāng)設(shè)備收到符合自己地址的信號(hào)后會(huì)返回響應(yīng)。
一般地址位寬為7位,而發(fā)送的數(shù)據(jù)位為8位,除了7位地址,剩下的一位為讀寫位。
?
如果為寫,則在設(shè)備返回ack信號(hào)后,接著主機(jī)發(fā)送8位數(shù)據(jù),當(dāng)設(shè)備收到數(shù)據(jù)后,設(shè)備返回ack信號(hào)。
如果為讀,則在設(shè)備返回ack信號(hào)后,接著設(shè)備返回8位數(shù)據(jù),當(dāng)主機(jī)接收到信號(hào)后,接下來的ack信號(hào)就由主機(jī)發(fā)送。
Data Transferred段周而復(fù)始,直到數(shù)據(jù)傳輸完成。
?
而在主機(jī)發(fā)送(R)或者接受(W)到ack信號(hào)后,會(huì)產(chǎn)生中斷,我們可以在中斷處理程序中對數(shù)據(jù)進(jìn)行進(jìn)一步處理,或者在中斷處理程序內(nèi)繼續(xù)發(fā)送/接收數(shù)據(jù)。
?
當(dāng)傳輸完成后,
如果主機(jī)作為數(shù)據(jù)發(fā)送方,可以發(fā)送停止信號(hào),終止IIC傳輸過程。
如果主機(jī)作為數(shù)據(jù)接收方,可以不發(fā)送響應(yīng)信號(hào)ack,終止傳輸過程。
?
寄存器配置:
根據(jù)芯片手冊,IICCON用于初始化,其余用于數(shù)據(jù)傳輸?shù)南嚓P(guān)操作。
IICCON: ?IIC控制寄存器
IICDS: IIC數(shù)據(jù)移位寄存器
IICSTAT: ?IIC狀態(tài)寄存器
IICADD: ? IIC地址寄存器
流程如下
主機(jī)發(fā)送流程:
?
主機(jī)接收流程:
?
設(shè)備發(fā)送流程:
?
設(shè)備接收流程:
?
另外,對于AT24C08,值得注意的是,該設(shè)備是先進(jìn)行地址選擇(非IIC設(shè)備的地址選擇,而是AT24C08內(nèi)部的地址選擇),然后進(jìn)行數(shù)據(jù)讀寫。
因此,AT24C08來說,當(dāng)該設(shè)備被選擇后(IIC地址匹配),然后對收到的第一個(gè)數(shù)據(jù)進(jìn)行片內(nèi)地址選擇(寫地址),然后:
?
如果需要寫數(shù)據(jù),因?yàn)橥瑸閷懩J?#xff0c;所以可以直接進(jìn)行
?
如果需要讀數(shù)據(jù),因?yàn)橐D(zhuǎn)換為讀模式,所以需要重新發(fā)送開始信號(hào),在當(dāng)前地址讀數(shù)據(jù)
?
?
AT24C08是10位地址,所以8位的word address根本不夠進(jìn)行地址選擇,因此以device address的最后兩位,加上word address 的8位,一共10位數(shù)據(jù)進(jìn)行地址選擇。
轉(zhuǎn)載于:https://www.cnblogs.com/TaigaCon/archive/2012/11/22/2782584.html
總結(jié)
以上是生活随笔為你收集整理的IIC原理及简单流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js与设计模式----单例
- 下一篇: VC++ 删除当前读取行 代码