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:
Sagar Bijwe
2018-07-25 20:41:09 +05:30
committed by bot
parent 8ef7a49cc3
commit 1df85e0039
45 changed files with 86 additions and 47 deletions

View File

@@ -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;