EEPROM (electrically erasable programmable read-only memory)是一種用戶可修改的ROM,又或者稱為閃存(Flash Memory)。它可以通過施加高于正常電壓的電壓,就可以反復(fù)擦除和重新編程(寫入)的閃存 。
EEPROM 是一種非易失性ROM,可以擦除和重新編程單個(gè)字節(jié)的數(shù)據(jù)。這就是 EEPROM芯片被稱為字節(jié)可擦除芯片的原因。EEPROM 通常用于在計(jì)算和其他電子設(shè)備中存儲(chǔ)少量數(shù)據(jù)。
Arduino Uno 的EEEROM大小為1024個(gè)字節(jié)。
ESP32的EEPROM大小為 512 字節(jié)。
這意味著使用 ESP32 和 EEPROM 庫可以有 512 個(gè)不同的地址,可以在每個(gè)地址位置保存一個(gè) 0 到 255 之間的值。
簡單來說EEPROM里面的數(shù)據(jù)是可以斷電保存的,重新上電數(shù)據(jù)并不會(huì)丟失。但是,閃存的一個(gè)限制是可刷寫數(shù)據(jù)的次數(shù)。你可以根據(jù)需要多次從閃存中讀取數(shù)據(jù),但大多數(shù)設(shè)備閃存的寫入次數(shù)設(shè)計(jì)為大約 100,000 到 1,000,000 次寫入操作。
在 ESP32 的閃存讀取和寫入將使用 EEPROM 庫。其實(shí)是和 Arduino EEPROM 一樣的,并沒有太大區(qū)別。
本示例,主要記錄ESP32/Arduino如何使用EEPROM,并且讀取和寫入數(shù)據(jù)。
程序提點(diǎn)
首先需要加載EEPROM的庫
// 加載EEPROM的庫 #include
在setup中初始化EEPROM的大小
// 定義EEPROM的大小 #define EEPROM_SIZE 1 // 這里定義1個(gè)字節(jié)的大小 void setup() { ... // 初始化EEPROM為預(yù)習(xí)定義的大小 EEPROM.begin(EEPROM_SIZE); ... }
讀取EEPROM指定位置的數(shù)據(jù)
例如,讀取第0位的數(shù)據(jù):
read_value = EEPROM.read(0); // 讀區(qū) EEPROM 第0位的數(shù)據(jù)
EEPROM刷寫指定位置的數(shù)據(jù)
例如,第0位的數(shù)據(jù)刷寫為read_value的值,最后,不要忘記EEPROM.commit();提交,運(yùn)行這句代碼才能正真刷寫數(shù)據(jù)。
EEPROM.write(0, read_value); // 把 變量read_value的數(shù)值寫入第0位 EEPROM.commit(); // 需要提交才能正真地把數(shù)據(jù)寫入EEPROM
完整代碼
該程序
實(shí)現(xiàn)每一秒都會(huì)把變量read_value + 1 ,并寫入EEPROM中。
當(dāng)中途斷電,重新通電也能繼續(xù)斷電前的數(shù)據(jù),而不是從0開始。
// welcome to lingshunlab.com // 加載EEPROM的庫 #include// 定義EEPROM的大小 #define EEPROM_SIZE 1 // 這里定義1個(gè)字節(jié)的大小 int read_value = 0; void setup() { Serial.begin(115200); // 初始化EEPROM為預(yù)習(xí)定義的大小 EEPROM.begin(EEPROM_SIZE); } void loop() { read_value = EEPROM.read(0); // 讀區(qū) EEPROM 第0位的數(shù)據(jù) Serial.println(read_value); read_value++; // read_value+1 ,但EEPROM只接受0~255的數(shù)值,超出的將會(huì)是255的取余值 EEPROM.write(0, read_value); // 把 變量read_value的數(shù)值寫入第0位 EEPROM.commit(); // 需要提交才能正真地把數(shù)據(jù)寫入EEPROM delay(1000); }
審核編輯:劉清
-
EEPROM
+關(guān)注
關(guān)注
9文章
1033瀏覽量
82014 -
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
187965 -
ESP32
+關(guān)注
關(guān)注
18文章
980瀏覽量
17566
原文標(biāo)題:ESP32 斷電數(shù)據(jù)保存 EEPROM數(shù)據(jù)讀取和寫入
文章出處:【微信號(hào):凌順實(shí)驗(yàn)室,微信公眾號(hào):凌順實(shí)驗(yàn)室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論