AT24C02存儲規格
總共32個page,每個page為8byte。總共256KB(2Kb),地址的長度需要使用8bit(剛好可以用來表示256個字節的地址)來表示。
AT24CC02的地址
設備的地址由8bit組成,前4 bit是固定的(1010);接著的3 bit是和A2 A1 A0的硬件連接相關,通過指定這3 bit可以在統一個I2C系統裡面最多連接8個AT24C02設備;第8bit用來表示讀/寫選擇,1表示讀/0表示寫。AT24C02會和總線上的設備地址進行比較,假如一直則AT24C02輸出一個0,不一致則返回的是standby狀態。
TQ2440開發板的A2 A1 A0地址線全接地,所以此處AT24C02的讀寫地址格式為:
讀AT24C02:1010 0001
寫AT24C02:1010 0000
AT24C02寫操作
1.1byte write
Byte write的操作時序如上圖所示。主機在發送完畢device address,並且接受到確定信息後再接著發送需要寫的地址(把這個數據寫到哪個地址上),然後再發送數據。當AT24C02接受到這個數據時,會輸出一個0,此時主機必須發送一個停止信號。然後AT24C02進入寫時序,將剛才接受到的數據寫到存儲單元中,並且在此期間不響應任何輸入,知道寫操作完成。
1.2 Pagewrite:
Page write前面幾步的操作和byteqrite操作類似,只是在成功發送第一個數據之後,主機在收到AT24C02發送的確認信息後,不會發送停止信號,而是接著發送剩余的數據,對AT24C02來說就再接著發送剩余的7個字節,直到1個page的數據發送完畢之後才發送停止信號。
在頁操作的時候dataword address用於表示業內的地址的低3bits會每收到一個數據就自動增長,頁地址維持不變。所以,當業內地址到頂端時,此時假如還有數據,則數據將會被放到頁的起始地址處,頁其實地址中之前存放的數據將被覆蓋。即AT24C02頁操作時,寫入的數據大於8 byte,則大於8 byte的數據將重新從此頁起始處存放,覆蓋掉之前寫入的數據。
AT24C02讀操作
2.1 從當前地址讀
AT24C02內部的data word address計數器會一直保存著最後一次讀/寫操作後自動變化的dataword address地址。此計數器中保存的地址值一直有效,直到AT24C02斷電。並且這個地址值在讀/寫過程中的roll over方式不一樣。讀操作時候,會從最後一頁的最後一個字節跳到第一頁的第一個字節然;寫操作時,會從當前頁的最後一個字節跳到當前頁的第一個字節。
所以從當前地址讀的意思,就是從當前data word address中保存的地址中讀取一個字節的數據。
2.2 從隨機地址讀
隨機讀寫的操作就是先用一個寫操作來騙過AT24C02器件,使其內部的data word address中的地址值修改,然後再通過current address reas操作來讀取所需地址上的數據。
如圖所示,先發送一個寫操作,但是發送完畢word address之並不發送數據,而是發送一個停止信號,此時at24c02中的data word address中的地址值就被修改了,然後通過current address read去讀取此地址上的數據。
2.3 連續讀
相關閱讀:
I2C子系統之at24c02讀寫測試 http://www.linuxidc.com/Linux/2012-08/68256.htm
I2C子系統之ioctl() http://www.linuxidc.com/Linux/2012-08/68257.htm
I2C子系統之at24c02簡介 http://www.linuxidc.com/Linux/2012-08/68258.htm
I2C子系統之總結 http://www.linuxidc.com/Linux/2012-08/68259.htm
I2C子系統之內核中I2C子系統的結構 http://www.linuxidc.com/Linux/2012-08/68260.htm
I2C子系統之I2C bus初始化——I2C_init() http://www.linuxidc.com/Linux/2012-08/68261.htm
I2C子系統之platfor_device初始化——smdk2440_machine_init() http://www.linuxidc.com/Linux/2012-08/68262.htm
I2C子系統之platform_driver初始化——I2C_adap_s3c_init() http://www.linuxidc.com/Linux/2012-08/68263.htm
I2C子系統之I2C總線時鐘頻率設置 http://www.linuxidc.com/Linux/2012-08/68264.htm
I2C子系統之adapter device和client device注冊——I2C_add_number_adapter() http://www.linuxidc.com/Linux/2012-08/68265.htm
I2C子系統之__I2C_first_dynamic_bus_num變量的相關分析 http://www.linuxidc.com/Linux/2012-08/68266.htm
I2C子系統之 adapter driver注冊——I2C_dev_init() http://www.linuxidc.com/Linux/2012-08/68267.htm
I2C子系統之write() http://www.linuxidc.com/Linux/2012-08/68268.htm