mirror of
https://github.com/espressif/esp-idf.git
synced 2026-06-04 20:26:38 +03:00
nvs_flash: Version compatibility check for nvs storage
This change adds a check for compatibility between the nvs version found on nvs flash and the one assumed by running code during nvs initialization. Any mismatch is reported to the user using new error code ESP_ERR_NVS_NEW_VERSION_FOUND.
This commit is contained in:
@@ -64,6 +64,11 @@ esp_err_t Page::load(uint32_t sectorNumber)
|
||||
} else {
|
||||
mState = header.mState;
|
||||
mSeqNumber = header.mSeqNumber;
|
||||
if(header.mVersion < NVS_VERSION) {
|
||||
return ESP_ERR_NVS_NEW_VERSION_FOUND;
|
||||
} else {
|
||||
mVersion = header.mVersion;
|
||||
}
|
||||
}
|
||||
|
||||
switch (mState) {
|
||||
@@ -633,6 +638,7 @@ esp_err_t Page::initialize()
|
||||
Header header;
|
||||
header.mState = mState;
|
||||
header.mSeqNumber = mSeqNumber;
|
||||
header.mVersion = mVersion;
|
||||
header.mCrc32 = header.calculateCrc32();
|
||||
|
||||
auto rc = spi_flash_write(mBaseAddress, &header, sizeof(header));
|
||||
@@ -826,6 +832,15 @@ esp_err_t Page::setSeqNumber(uint32_t seqNumber)
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t Page::setVersion(uint8_t ver)
|
||||
{
|
||||
if (mState != PageState::UNINITIALIZED) {
|
||||
return ESP_ERR_NVS_INVALID_STATE;
|
||||
}
|
||||
mVersion = ver;
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t Page::erase()
|
||||
{
|
||||
auto sector = mBaseAddress / SPI_FLASH_SEC_SIZE;
|
||||
|
||||
Reference in New Issue
Block a user