IIC 即 inter-integrated-circuit,又稱 I2C 一種總線結構,具體接受請度娘。
I2C串行總線一般有兩根信號線,一根是雙向的數據線SDA,另一根是時鍾線SCL。所有接到I2C總線設備上的串行數據SDA都接到總線的SDA上,各設備的時鍾線SCL接到總線的SCL上。
以下為mini2440的IIC設備:AT24C08
IIC遵從 主/從結構,通信由主機發起,並且由主機結束。
開始信號(s):當時鍾信號處於高電平,向數據信號線發送下降沿。
結束信號(p):當時鍾信號處於高電平,向數據信號線發送上升沿。
由於IIC總線上可能連有多個設備,因此我們應該在開始信號后進行設備選擇,也就是發送地址信號,當設備收到符合自己地址的信號后會返回響應。
一般地址位寬為7位,而發送的數據位為8位,除了7位地址,剩下的一位為讀寫位。
如果為寫,則在設備返回ack信號后,接着主機發送8位數據,當設備收到數據后,設備返回ack信號。
如果為讀,則在設備返回ack信號后,接着設備返回8位數據,當主機接收到信號后,接下來的ack信號就由主機發送。
Data Transferred段周而復始,直到數據傳輸完成。
而在主機發送(R)或者接受(W)到ack信號后,會產生中斷,我們可以在中斷處理程序中對數據進行進一步處理,或者在中斷處理程序內繼續發送/接收數據。
當傳輸完成后,
如果主機作為數據發送方,可以發送停止信號,終止IIC傳輸過程。
如果主機作為數據接收方,可以不發送響應信號ack,終止傳輸過程。
寄存器配置:
根據芯片手冊,IICCON用於初始化,其余用於數據傳輸的相關操作。
IICCON: IIC控制寄存器
IICDS: IIC數據移位寄存器
IICSTAT: IIC狀態寄存器
IICADD: IIC地址寄存器
流程如下
主機發送流程:
主機接收流程:
設備發送流程:
設備接收流程:
另外,對於AT24C08,值得注意的是,該設備是先進行地址選擇(非IIC設備的地址選擇,而是AT24C08內部的地址選擇),然后進行數據讀寫。
因此,AT24C08來說,當該設備被選擇后(IIC地址匹配),然后對收到的第一個數據進行片內地址選擇(寫地址),然后:
如果需要寫數據,因為同為寫模式,所以可以直接進行
如果需要讀數據,因為要轉換為讀模式,所以需要重新發送開始信號,在當前地址讀數據
AT24C08是10位地址,所以8位的word address根本不夠進行地址選擇,因此以device address的最后兩位,加上word address 的8位,一共10位數據進行地址選擇。