ESP8266 ESP32 NVS 基本操作

2021-09-25 09:06:34 字數 2401 閱讀 5419

nvs 介紹

nvs: non-volatile storage , 即將資料儲存到 flash 中, 掉電或重啟後資料仍然存在, flash 類似於 pc 上磁碟.

esp8266 和 esp32 上提供 nvs 介面給使用者, 來儲存和讀取使用者資料. 具體參考 nvs.h

nvs 更詳細的說明請參考: nvs 文件

nvs 優勢

介面更加安全

相比較於 spi_flash_read 和 spi_flash_write 等介面, nvs 不直接操作 address. 對於終端使用者而已, 更加安全.

例如: 應用複雜一點, 容易 spi_flash_write(address, src, size) 不小心寫到同乙個位址, 或位址寫覆蓋, 而導致長時間 debug

介面使用接近使用者習慣

nvs 介面類似於電腦上操作檔案一樣:

開啟檔案(nvs_open), 寫檔案(nvs_set_***), 儲存檔案(nvs_commit), 關閉檔案(nvs_close)

開啟檔案(nvs_open), 讀取檔案(nvs_get_***), 關閉檔案(nvs_close)

擦寫均衡, 使 flash 壽命更長

nvs 在操作少量資料上, nvs 分割槽更大時, 擦寫均衡表現的更為明顯.

例如: flash 乙個 sector 為 4kb, nvs 分配大小為乙個 sector, 寫同乙個 64 bytes 資料到 flash, 分別比較 spi_flash_*** 和 nvs 寫 64 次

spi_flash_write: 每次寫 flash 前, 需擦除 flash. 對應: 64 次擦除 flash, 64 次寫 flash

nvs: nvs 內部有擦寫均衡, 有標誌位記錄當前有效儲存. 如第一次擦除 sector, 再寫 sector 0-63 byte, 第二次寫 sector 64-127 bytes, 第 64 次(4kb/64bytes) 寫完 sector 最後乙個 64 byte. 對應: 1 次擦除 flash, 64 次寫 flash

這樣 nvs 減少 64 倍擦除操作, 對 flash 壽命有較大提公升.

在 nvs 分割槽更大, 儲存資訊少時, 表現的更為明顯.

nvs 寫

更多參考: nvs.h

void nvs_write_data_to_flash(void),};

printf("set size:%u\r\n", sizeof(wifi_config_to_store));

esp_error_check( nvs_open( nvs_customer, nvs_readwrite, &handle) );

esp_error_check( nvs_set_str( handle, data1, "i am a string.") );

esp_error_check( nvs_set_i32( handle, data2, value_for_store) );

esp_error_check( nvs_set_blob( handle, data3, &wifi_config_to_store, sizeof(wifi_config_to_store)) );

esp_error_check( nvs_commit(handle) );

nvs_close(handle);

}nvs 讀

更多參考: nvs.h

void nvs_read_data_from_flash(void)

;int32_t value = 0;

wifi_config_t wifi_config_stored;

memset(&wifi_config_stored, 0x0, sizeof(wifi_config_stored));

uint32_t len = sizeof(wifi_config_stored);

esp_error_check( nvs_open(nvs_customer, nvs_readwrite, &handle) );

esp_error_check ( nvs_get_str(handle, data1, str_data, &str_length) );

esp_error_check ( nvs_get_i32(handle, data2, &value) );

esp_error_check ( nvs_get_blob(handle, data3, &wifi_config_stored, &len) );

printf("[data1]: %s len:%u\r\n", str_data, str_length);

printf("[data2]: %d\r\n", value);

printf("[data3]: ssid:%s passwd:%s\r\n", wifi_config_stored.sta.ssid, wifi_config_stored.sta.password);

esp8266 esp8266 wiki記憶體對映

本文主要講述了esp8266 晶元系列的實際記憶體布局。復位向量是40000080h,對映到內部rom。位址 名稱大小 型別r w 描述00000000h exc讀取時產生錯誤。20000000h no00 80 00 00未被對映重複的模式。3ff00000h dport0 1000h i orw...

ESP8266 利用網頁控制ESP8266

說明 發出 gpio 1 就輸出 亮燈 gpio 0 就輸出 滅燈 include const char ssid jia 這裡輸入wifi名稱 const char password lm654321 這裡輸入wifi密碼 wifiserver server 80 開啟板子的80埠 int val...

ESP32 學習日誌(5) NVS

非易失性儲存 nvs 庫主要用於在 flash 中儲存鍵值格式的資料。本文件將詳細介紹 nvs 在esp32中的使用。nvs 的操作物件為鍵值對,其中鍵是 ascii 字串,當前支援最大鍵長為 15 個字元,值可以為以下幾種型別 include nvs flash.h void main void ...