1.24C02介紹
24C02 現(xiàn)在基本是開發(fā)板的標配,對于需要掉電存儲的應(yīng)用來說確是不二選擇?,F(xiàn)在單片機因為內(nèi)部集成了Flash存儲器,一般也都支持數(shù)據(jù)的掉電保存,但相對于 24C02 這種 EEPROM 來說,使用單片機內(nèi)部的 Flash 有一些需要注意的問題:
a.Flash 寫入數(shù)據(jù)之前需要先執(zhí)行擦除操作,而且擦除以扇區(qū)為單位。
b.Flash讀寫次數(shù)比 EEPROM 少很多。
c.容易誤操作,把 Flash 內(nèi)部的代碼擦除掉。
d.影響中斷的響應(yīng)時間。
24C02 有 256 字節(jié)的數(shù)據(jù),一般說來也夠用了。它的地址是可以通過引腳配置的,這樣一條 I2C 總線上就可以掛多個 24C02。如下:
我們把 A2,A1,A0 都接地,這樣地址為 A0。然后 SCL,SDA 腳接 MCU 的 PB8 和 PB9。需要注意 SCL,和 SDA 需要加上拉電阻。
2.代碼
下面我們在一個 I2C 例程上面修改代碼來實現(xiàn) 24C02 的讀寫。大家可以看到使用庫函數(shù)的好處,基本上不用看 STM32F030 的手冊,很快就能實現(xiàn)我們想要實現(xiàn)的功能。我們用 Keil 打開下面這個工程:
STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\I2C\I2C_TwoBoards_ComPolling\MDK-ARM\Project.uvprojx
Step 1, 把 I2C 地址改為跟我們硬件一致:
Step 2, 根據(jù)實際使用的 I2C 模塊和引腳進行配置:
Step 3, 把地址模式改為 7BIT:
Step 4, 操作EEPROM,我們不使用例子中的 HAL_I2C_Master_Transmit 和 HAL_I2C_Master_Receive,這兩個函數(shù)適用于兩個 I2C 器件之間進行數(shù)據(jù)傳輸。我們這里要用的是下面這兩個函數(shù):
在此我們寫入數(shù)據(jù)用的 24C02 的 Page Write 命令,每次寫入 8個字節(jié)的數(shù)據(jù),然后存儲器寫入地址加 8。要注意每次執(zhí)行完寫入命令后,需要有一個延時,等待 EEPROM 內(nèi)部處理完該指令后才能繼續(xù)寫入。這個延時要查手冊,不同的廠家可能有不同的數(shù)值。讀出時可以連續(xù)的讀出數(shù)據(jù),無需等待。
下面是寫入數(shù)據(jù)的波形,0xA0 是器件地址,0x28 是 24C02 內(nèi)部存儲器地址,之后是 8個字節(jié)數(shù)據(jù)。
讀出數(shù)據(jù)的波形:
注意:
在使用硬件 I2C 操作時,有時候會遇到死鎖問題。在此情況下,可以把 SCL,SDA 引腳初始化為 GPIO,如此例中的 PB8, PB9 然后連續(xù)翻轉(zhuǎn) SCL 引腳送出 9 個時鐘脈沖,既可以使 I2C 從死鎖的狀態(tài)復(fù)位。然后再重新初始化 I2C 模塊,進入正常 I2C 操作。
審核編輯:劉清
-
EEPROM
+關(guān)注
關(guān)注
9文章
1085瀏覽量
83542 -
Flash存儲器
+關(guān)注
關(guān)注
3文章
105瀏覽量
26346 -
GPIO
+關(guān)注
關(guān)注
16文章
1279瀏覽量
53839 -
STM32F030
+關(guān)注
關(guān)注
1文章
33瀏覽量
7014
發(fā)布評論請先 登錄
分享一個嵌入式linux讀寫24c02的i2c程序
MindSDK下的I2C讀寫24c02測試學(xué)習(xí)資料分享
24c02/24c01/24c04讀寫程序
24C02讀寫操作程序(C語言)
HL配套C實驗例程24c02存儲器讀寫基本驅(qū)動
單片機模擬I2C總線及24C02讀寫實例(c源代碼),24C02 read / write process
24C02讀寫操作程序設(shè)計實例,24C02 read / write process
24c02讀寫程序(已通過測試),24C02 read / write process
24C02讀寫匯編程序,24C02 read / write process
嵌入式linux應(yīng)用讀寫i2c示例

評論