IIC介面下的24C02 驅動分析

2021-09-11 08:24:00 字數 3615 閱讀 3276

come from : 

本節來學習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頁位址

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來講:

5. at24c02時序圖介紹

5.1寫時序介紹

當隨機寫乙個位元組時,只需要先傳送乙個起始訊號,然後跟上0xa0裝置位址,以及要寫的起始位址值,後面便是要寫入位址的data,如果需要連續寫資料,只需要連續寫入data,位址會自動加1,直到傳送停止訊號結束

5.2讀時序介紹

當隨機讀乙個位元組時,先傳送第乙個起始訊號,然後寫入0xa0裝置位址和要讀的位址值,

接著傳送第二個起始訊號,然後寫入0xa1裝置位址,接著就是要讀的data,如果需要連續讀資料,只需要連續讀出data,位址會自動加1,直到傳送停止訊號結束

E2PROM晶元24C02的讀寫程式

一 實驗目的 給24c02的內部ram寫入一組資料0xb0,資料從24c02內部ram的0x01開始存放。然後再把這組資料讀出來,來點亮led燈,檢驗寫入和讀出是否正確。二 理論知識準備 下面我們先介紹一下i2c匯流排的相關理論知識。一 i2c匯流排概念 i2c匯流排是一種雙向二線制匯流排,它的結構...

IIC實現對EEPROM(24C02)的讀寫

概述 eeprom晶元型號為24c02,該晶元的總容量是256個位元組,該晶元通過iic匯流排與外部連線。實驗功能 通過key1按鍵來控制24c02的寫入,通過另外乙個按鍵key0來控制24c02的讀取。硬體電路 iic配置 初始化iic void iic init void 產生iic起始訊號 v...

基於51微控制器IIC通訊的AT24C02學習筆記

最近在學習幾種序列通訊協議,感覺收穫很多,這篇文章是學習iic匯流排協議的第一篇文章,以後還會再寫一篇關於pcf8591 iic通訊的adda轉換晶元的文章.iic 即inter integrated circuit 積體電路匯流排 這種匯流排型別是由飛利浦半導體公司在八十年代初設計出來的一種簡單 ...