1.24C02介紹
24C02 現在基本是開發板的標配,對于需要掉電存儲的應用來說確是不二選擇。現在單片機因為內部集成了Flash存儲器,一般也都支持數據的掉電保存,但相對于 24C02 這種 EEPROM 來說,使用單片機內部的 Flash 有一些需要注意的問題:
a.Flash 寫入數據之前需要先執行擦除操作,而且擦除以扇區為單位。
b.Flash讀寫次數比 EEPROM 少很多。
c.容易誤操作,把 Flash 內部的代碼擦除掉。
d.影響中斷的響應時間。
24C02 有 256 字節的數據,一般說來也夠用了。它的地址是可以通過引腳配置的,這樣一條 I2C 總線上就可以掛多個 24C02。如下:
我們把 A2,A1,A0 都接地,這樣地址為 A0。然后 SCL,SDA 腳接 MCU 的 PB8 和 PB9。需要注意 SCL,和 SDA 需要加上拉電阻。
2.代碼
下面我們在一個 I2C 例程上面修改代碼來實現 24C02 的讀寫。大家可以看到使用庫函數的好處,基本上不用看 STM32F030 的手冊,很快就能實現我們想要實現的功能。我們用 Keil 打開下面這個工程:
STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\I2C\I2C_TwoBoards_ComPolling\MDK-ARM\Project.uvprojx
Step 1, 把 I2C 地址改為跟我們硬件一致:
Step 2, 根據實際使用的 I2C 模塊和引腳進行配置:
Step 3, 把地址模式改為 7BIT:
Step 4, 操作EEPROM,我們不使用例子中的 HAL_I2C_Master_Transmit 和 HAL_I2C_Master_Receive,這兩個函數適用于兩個 I2C 器件之間進行數據傳輸。我們這里要用的是下面這兩個函數:
在此我們寫入數據用的 24C02 的 Page Write 命令,每次寫入 8個字節的數據,然后存儲器寫入地址加 8。要注意每次執行完寫入命令后,需要有一個延時,等待 EEPROM 內部處理完該指令后才能繼續寫入。這個延時要查手冊,不同的廠家可能有不同的數值。讀出時可以連續的讀出數據,無需等待。
下面是寫入數據的波形,0xA0 是器件地址,0x28 是 24C02 內部存儲器地址,之后是 8個字節數據。
讀出數據的波形:
注意:
在使用硬件 I2C 操作時,有時候會遇到死鎖問題。在此情況下,可以把 SCL,SDA 引腳初始化為 GPIO,如此例中的 PB8, PB9 然后連續翻轉 SCL 引腳送出 9 個時鐘脈沖,既可以使 I2C 從死鎖的狀態復位。然后再重新初始化 I2C 模塊,進入正常 I2C 操作。
審核編輯:劉清
-
EEPROM
+關注
關注
9文章
1019瀏覽量
81561 -
Flash存儲器
+關注
關注
3文章
104瀏覽量
25753 -
GPIO
+關注
關注
16文章
1204瀏覽量
52055 -
STM32F030
+關注
關注
1文章
33瀏覽量
6656
發布評論請先 登錄
相關推薦
評論