本節來學習IIC接口下的24C02 驅動分析,本節學完后,再來學習Linux下如何使用IIC操作24C02
1.I2C通信介紹
它是由數據線SDA和時鍾SCL構成的串行總線,可發送和接收數據,是一個多主機的半雙工通信方式
每個掛接在總線上的器件都有個唯一的地址
位速在標准模式下可達 100kbit/s,在快速模式下可達400kbit/s,在高速模式下可待3.4Mbit/s。
2. I2C總線系統結構,如下所示
其中SCL時鍾線的頻率由主機提供,且從機不能主動來引起數據傳輸,必須等待主機先發信號才行
兩個或多個主機同時發起數據傳輸時,可以通過沖突檢測和仲裁來防止數據被破壞。
3.I2C時序介紹
1)空閑狀態
當總線上的SDA和SCL兩條信號線同時處於高電平,便是空閑狀態,如上面的硬件圖所示,當我們不傳輸數據時, SDA和SCL被上拉電阻拉高,即進入空閑狀態
2)起始信號
當SCL為高期間,SDA由高到低的跳變;便是總線的啟動信號,只能由主機發起,且在空閑狀態下才能啟動該信號,如下圖所示:
3)停止信號
當SCL為高期間,SDA由低到高的跳變;便是總線的停止信號,表示數據已傳輸完成,如下圖所示:
4)傳輸數據格式
當發了起始信號后,就開始傳輸數據,傳輸的數據格式如下圖所示:
當SCL為高電平時,便會獲取SDA數據值,其中SDA數據必須是穩定的(若SDA不穩定就會變成起始/停止信號)
當SCL為低電平時,便是SDA的電平變化狀態
若主從機在傳輸數據期間,需要完成其它功能(例如一個中斷),可以主動拉低SCL,使I2C進入等待狀態,直到處理結束再釋放SCL,數據傳輸會繼續
5)應答信號ACK
I2C總線上的數據都是以8位數據(字節)進行的,當發送了8個數據后,發送方會在第9個時鍾脈沖期間釋放SDA數據,當接收方接收該字節成功,便會輸出一個ACK應答信號,當SDA為高電平,表示為非應答信號NACK,當SDA為低電平,表示為有效應答信號ACK
PS:當主機為接收方時,收到最后一個字節后,主機可以不發送ACK,直接發送停止信號來結束傳輸。
當從機為接收方時,沒有發送ACK,則表示從機可能在忙其它事、或者不匹配地址信號和不支持多主機發送,主機可以發送停止信號再次發送起始信號啟動新的傳輸
6)完整的數據傳輸
如下圖所示, 發送起始信號后,便發送一個8位的設備地址,其中第8位是對設備的讀寫標志,后面緊跟着的就是數據了,直到發送停止信號終止
PS:當我們第一次是讀操作,然后想換成寫操作時,可以再次發送一個起始信號,然后發送讀的設備地址,不需要停止信號便能實現不同的地址轉換
4. AT24C02介紹
AT24C02是通過I2C實現通訊的,是一個存儲芯片,能夠存儲2Kb(256KB)數據
4.1它的的硬件圖如下:
其中A2~A0,是這個24C02設備的硬件地址,接GND表示硬件地址都為0
4.2其中AT24C02的數據格式如下所示:
4.3打開AT24C02數據手冊,它的設備地址如下圖所示:
其中A2~A1表示硬件地址,P2~P0表示page頁地址
bit[0]地址:表示讀/寫狀態,1:讀,0:寫 (所有I2C器件都是這樣,最低位表示方向位)
4.3.1 為什么需要page頁地址?
因為I2C的數據位是8位,而AT24CXX的讀寫地址值最大可以為2048(2^11),超過了I2C的數據位
而page頁地址就是用來解決這個問題的
比如AT24C16:
當發送:0XA2(設備地址P[2:0]=0x01) ,0x00(讀地址)時:
表示要讀的真正地址=0x01(頁地址)*256+0(讀地址)=0x100,轉化為二進制= 1 0000 0000
當發送:0XA0(設備地址), 0x00(讀地址)時:
表示要讀的真正地址=0x00*256+0xFF=0xFF,轉化為二進制= 0 1111 1111
4.3.2 如上圖所示,對於AT240C02來講:
- 芯片的容量小於等於2^8(256)字節,那么讀寫地址就用8bit來表示,所以設備地址里沒有P2~P0
- 讀操作時,發送的設備地址等於0XA1
- 寫操作時,發送的設備地址等於0XA0
5. AT24C02時序圖介紹
5.1寫時序介紹
當隨機寫一個字節時,只需要先發送一個起始信號,然后跟上0XA0設備地址,以及要寫的起始地址值,后面便是要寫入地址的data,如果需要連續寫數據,只需要連續寫入data,地址會自動加1,直到發送停止信號結束
5.2讀時序介紹
當隨機讀一個字節時,先發送第一個起始信號,然后寫入0XA0設備地址和要讀的地址值,
接着發送第二個起始信號,然后寫入0XA1設備地址,接着就是要讀的data,如果需要連續讀數據,只需要連續讀出data,地址會自動加1,直到發送停止信號結束
接下來,下節開始學習:
Linux下如何利用linux下I2C驅動體系結構來操作24C02 http://www.cnblogs.com/lifexy/p/7816324.html