Converted EEPROM library to use nvs instead of partition. (#2678)
* Converted EEPROM library to use nvs instead of partition. Removed eeprom partition from all partition table CSV files. * Changed variable names, added some comments, formatting as per me-no-dev's requests * Checks for memory on malloc * Moved include nvs.h from header to code * Reworked the extra example to make it more clear how to actually use the library and persist data
This commit is contained in:
parent
0202ba7c21
commit
619568db5b
4
libraries/EEPROM/README.md
Normal file
4
libraries/EEPROM/README.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
## EEPROM
|
||||||
|
|
||||||
|
EEPROM is deprecated. For new applications on ESP32, use Preferences. EEPROM is provided for backwards compatibility with existing Arduino applications.
|
||||||
|
EEPROM is implemented using a single blob within NVS, so it is a container within a container. As such, it is not going to be a high performance storage method. Preferences will directly use nvs, and store each entry as a single object therein.
|
@ -26,8 +26,8 @@
|
|||||||
#include "EEPROM.h"
|
#include "EEPROM.h"
|
||||||
|
|
||||||
// Instantiate eeprom objects with parameter/argument names and size same as in the partition table
|
// Instantiate eeprom objects with parameter/argument names and size same as in the partition table
|
||||||
EEPROMClass NAMES("eeprom0", 0x1000);
|
EEPROMClass NAMES("eeprom0", 0x500);
|
||||||
EEPROMClass HEIGHT("eeprom1", 0x500);
|
EEPROMClass HEIGHT("eeprom1", 0x200);
|
||||||
EEPROMClass AGE("eeprom2", 0x100);
|
EEPROMClass AGE("eeprom2", 0x100);
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
|
@ -13,75 +13,124 @@ void setup() {
|
|||||||
// put your setup code here, to run once:
|
// put your setup code here, to run once:
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
Serial.println("\nTesting EEPROM Library\n");
|
Serial.println("\nTesting EEPROM Library\n");
|
||||||
if (!EEPROM.begin(EEPROM.length())) {
|
if (!EEPROM.begin(1000)) {
|
||||||
Serial.println("Failed to initialise EEPROM");
|
Serial.println("Failed to initialise EEPROM");
|
||||||
Serial.println("Restarting...");
|
Serial.println("Restarting...");
|
||||||
delay(1000);
|
delay(1000);
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
int address = 0; // Same address is used through the example
|
int address = 0;
|
||||||
|
|
||||||
EEPROM.writeByte(address, -128); // -2^7
|
EEPROM.writeByte(address, -128); // -2^7
|
||||||
Serial.println(EEPROM.readByte(address));
|
address += sizeof(byte);
|
||||||
|
|
||||||
EEPROM.writeChar(address, 'A'); // Same as writyByte and readByte
|
EEPROM.writeChar(address, 'A'); // Same as writyByte and readByte
|
||||||
Serial.println(char(EEPROM.readChar(address)));
|
address += sizeof(char);
|
||||||
|
|
||||||
EEPROM.writeUChar(address, 255); // 2^8 - 1
|
EEPROM.writeUChar(address, 255); // 2^8 - 1
|
||||||
Serial.println(EEPROM.readUChar(address));
|
address += sizeof(unsigned char);
|
||||||
|
|
||||||
EEPROM.writeShort(address, -32768); // -2^15
|
EEPROM.writeShort(address, -32768); // -2^15
|
||||||
Serial.println(EEPROM.readShort(address));
|
address += sizeof(short);
|
||||||
|
|
||||||
EEPROM.writeUShort(address, 65535); // 2^16 - 1
|
EEPROM.writeUShort(address, 65535); // 2^16 - 1
|
||||||
Serial.println(EEPROM.readUShort(address));
|
address += sizeof(unsigned short);
|
||||||
|
|
||||||
EEPROM.writeInt(address, -2147483648); // -2^31
|
EEPROM.writeInt(address, -2147483648); // -2^31
|
||||||
Serial.println(EEPROM.readInt(address));
|
address += sizeof(int);
|
||||||
|
|
||||||
EEPROM.writeUInt(address, 4294967295); // 2^32 - 1
|
EEPROM.writeUInt(address, 4294967295); // 2^32 - 1
|
||||||
Serial.println(EEPROM.readUInt(address));
|
address += sizeof(unsigned int);
|
||||||
|
|
||||||
EEPROM.writeLong(address, -2147483648); // Same as writeInt and readInt
|
EEPROM.writeLong(address, -2147483648); // Same as writeInt and readInt
|
||||||
Serial.println(EEPROM.readLong(address));
|
address += sizeof(long);
|
||||||
|
|
||||||
EEPROM.writeULong(address, 4294967295); // Same as writeUInt and readUInt
|
EEPROM.writeULong(address, 4294967295); // Same as writeUInt and readUInt
|
||||||
Serial.println(EEPROM.readULong(address));
|
address += sizeof(unsigned long);
|
||||||
|
|
||||||
int64_t value = -9223372036854775808; // -2^63
|
int64_t value = -9223372036854775808; // -2^63
|
||||||
EEPROM.writeLong64(address, value);
|
EEPROM.writeLong64(address, value);
|
||||||
value = 0; // Clear value
|
address += sizeof(int64_t);
|
||||||
value = EEPROM.readLong64(value);
|
|
||||||
Serial.printf("0x%08X", (uint32_t)(value >> 32)); // Print High 4 bytes in HEX
|
|
||||||
Serial.printf("%08X\n", (uint32_t)value); // Print Low 4 bytes in HEX
|
|
||||||
|
|
||||||
uint64_t Value = 18446744073709551615; // 2^64 - 1
|
uint64_t Value = 18446744073709551615; // 2^64 - 1
|
||||||
EEPROM.writeULong64(address, Value);
|
EEPROM.writeULong64(address, Value);
|
||||||
|
address += sizeof(uint64_t);
|
||||||
|
|
||||||
|
EEPROM.writeFloat(address, 1234.1234);
|
||||||
|
address += sizeof(float);
|
||||||
|
|
||||||
|
EEPROM.writeDouble(address, 123456789.123456789);
|
||||||
|
address += sizeof(double);
|
||||||
|
|
||||||
|
EEPROM.writeBool(address, true);
|
||||||
|
address += sizeof(bool);
|
||||||
|
|
||||||
|
String sentence = "I love ESP32.";
|
||||||
|
EEPROM.writeString(address, sentence);
|
||||||
|
address += sentence.length() + 1;
|
||||||
|
|
||||||
|
char gratitude[21] = "Thank You Espressif!";
|
||||||
|
EEPROM.writeString(address, gratitude);
|
||||||
|
address += 21;
|
||||||
|
|
||||||
|
// See also the general purpose writeBytes() and readBytes() for BLOB in EEPROM library
|
||||||
|
EEPROM.commit();
|
||||||
|
address = 0;
|
||||||
|
|
||||||
|
Serial.println(EEPROM.readByte(address));
|
||||||
|
address += sizeof(byte);
|
||||||
|
|
||||||
|
Serial.println((char)EEPROM.readChar(address));
|
||||||
|
address += sizeof(char);
|
||||||
|
|
||||||
|
Serial.println(EEPROM.readUChar(address));
|
||||||
|
address += sizeof(unsigned char);
|
||||||
|
|
||||||
|
Serial.println(EEPROM.readShort(address));
|
||||||
|
address += sizeof(short);
|
||||||
|
|
||||||
|
Serial.println(EEPROM.readUShort(address));
|
||||||
|
address += sizeof(unsigned short);
|
||||||
|
|
||||||
|
Serial.println(EEPROM.readInt(address));
|
||||||
|
address += sizeof(int);
|
||||||
|
|
||||||
|
Serial.println(EEPROM.readUInt(address));
|
||||||
|
address += sizeof(unsigned int);
|
||||||
|
|
||||||
|
Serial.println(EEPROM.readLong(address));
|
||||||
|
address += sizeof(long);
|
||||||
|
|
||||||
|
Serial.println(EEPROM.readULong(address));
|
||||||
|
address += sizeof(unsigned long);
|
||||||
|
|
||||||
|
value = 0;
|
||||||
|
value = EEPROM.readLong64(value);
|
||||||
|
Serial.printf("0x%08X", (uint32_t)(value >> 32)); // Print High 4 bytes in HEX
|
||||||
|
Serial.printf("%08X\n", (uint32_t)value); // Print Low 4 bytes in HEX
|
||||||
|
address += sizeof(int64_t);
|
||||||
|
|
||||||
Value = 0; // Clear Value
|
Value = 0; // Clear Value
|
||||||
Value = EEPROM.readULong64(Value);
|
Value = EEPROM.readULong64(Value);
|
||||||
Serial.printf("0x%08X", (uint32_t)(Value >> 32)); // Print High 4 bytes in HEX
|
Serial.printf("0x%08X", (uint32_t)(Value >> 32)); // Print High 4 bytes in HEX
|
||||||
Serial.printf("%08X\n", (uint32_t)Value); // Print Low 4 bytes in HEX
|
Serial.printf("%08X\n", (uint32_t)Value); // Print Low 4 bytes in HEX
|
||||||
|
address += sizeof(uint64_t);
|
||||||
|
|
||||||
EEPROM.writeFloat(address, 1234.1234);
|
|
||||||
Serial.println(EEPROM.readFloat(address), 4);
|
Serial.println(EEPROM.readFloat(address), 4);
|
||||||
|
address += sizeof(float);
|
||||||
|
|
||||||
EEPROM.writeDouble(address, 123456789.123456789);
|
|
||||||
Serial.println(EEPROM.readDouble(address), 8);
|
Serial.println(EEPROM.readDouble(address), 8);
|
||||||
|
address += sizeof(double);
|
||||||
|
|
||||||
EEPROM.writeBool(address, true);
|
|
||||||
Serial.println(EEPROM.readBool(address));
|
Serial.println(EEPROM.readBool(address));
|
||||||
|
address += sizeof(bool);
|
||||||
|
|
||||||
String sentence = "I love ESP32.";
|
|
||||||
EEPROM.writeString(address, sentence);
|
|
||||||
Serial.println(EEPROM.readString(address));
|
Serial.println(EEPROM.readString(address));
|
||||||
|
address += sentence.length() + 1;
|
||||||
|
|
||||||
char gratitude[] = "Thank You Espressif!";
|
|
||||||
EEPROM.writeString(address, gratitude);
|
|
||||||
Serial.println(EEPROM.readString(address));
|
Serial.println(EEPROM.readString(address));
|
||||||
|
address += 21;
|
||||||
// See also the general purpose writeBytes() and readBytes() for BLOB in EEPROM library
|
|
||||||
// To avoid data overwrite, next address should be chosen/offset by using "address =+ sizeof(previousData)"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
EEPROM.h -ported by Paolo Becchi to Esp32 from esp8266 EEPROM
|
EEPROM.h -ported by Paolo Becchi to Esp32 from esp8266 EEPROM
|
||||||
-Modified by Elochukwu Ifediora <ifedioraelochukwuc@gmail.com>
|
-Modified by Elochukwu Ifediora <ifedioraelochukwuc@gmail.com>
|
||||||
|
-Converted to nvs lbernstone@gmail.com
|
||||||
|
|
||||||
Uses a one sector flash partition defined in partition table
|
Uses a nvs byte array to emulate EEPROM
|
||||||
OR
|
|
||||||
Multiple sector flash partitions defined by the name column in the partition table
|
|
||||||
|
|
||||||
Copyright (c) 2014 Ivan Grokhotkov. All rights reserved.
|
Copyright (c) 2014 Ivan Grokhotkov. All rights reserved.
|
||||||
This file is part of the esp8266 core for Arduino environment.
|
This file is part of the esp8266 core for Arduino environment.
|
||||||
@ -25,72 +24,115 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "EEPROM.h"
|
#include "EEPROM.h"
|
||||||
|
#include <nvs.h>
|
||||||
#include <esp_log.h>
|
#include <esp_log.h>
|
||||||
|
|
||||||
EEPROMClass::EEPROMClass(uint32_t sector)
|
EEPROMClass::EEPROMClass(void)
|
||||||
: _sector(sector)
|
: _data(0)
|
||||||
, _data(0)
|
|
||||||
, _size(0)
|
, _size(0)
|
||||||
, _dirty(false)
|
, _dirty(false)
|
||||||
, _mypart(NULL)
|
, _handle(NULL)
|
||||||
|
, _name("eeprom")
|
||||||
|
, _user_defined_size(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
EEPROMClass::EEPROMClass(uint32_t sector)
|
||||||
|
// Only for compatiility, no sectors in nvs!
|
||||||
|
: _data(0)
|
||||||
|
, _size(0)
|
||||||
|
, _dirty(false)
|
||||||
|
, _handle(NULL)
|
||||||
, _name("eeprom")
|
, _name("eeprom")
|
||||||
, _user_defined_size(0)
|
, _user_defined_size(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
EEPROMClass::EEPROMClass(const char* name, uint32_t user_defined_size)
|
EEPROMClass::EEPROMClass(const char* name, uint32_t user_defined_size)
|
||||||
: _sector(0)
|
: _data(0)
|
||||||
, _data(0)
|
|
||||||
, _size(0)
|
, _size(0)
|
||||||
, _dirty(false)
|
, _dirty(false)
|
||||||
, _mypart(NULL)
|
, _handle(NULL)
|
||||||
, _name(name)
|
, _name(name)
|
||||||
, _user_defined_size(user_defined_size)
|
, _user_defined_size(user_defined_size)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
EEPROMClass::EEPROMClass(void)
|
|
||||||
: _sector(0)// (((uint32_t)&_SPIFFS_end - 0x40200000) / SPI_FLASH_SEC_SIZE))
|
|
||||||
, _data(0)
|
|
||||||
, _size(0)
|
|
||||||
, _dirty(false)
|
|
||||||
, _mypart(NULL)
|
|
||||||
, _name("eeprom")
|
|
||||||
, _user_defined_size(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
EEPROMClass::~EEPROMClass() {
|
EEPROMClass::~EEPROMClass() {
|
||||||
// end();
|
// end();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EEPROMClass::begin(size_t size) {
|
bool EEPROMClass::begin(size_t size) {
|
||||||
if (size <= 0) {
|
if (!size) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (size > SPI_FLASH_SEC_SIZE) {
|
|
||||||
size = SPI_FLASH_SEC_SIZE;
|
esp_err_t res = nvs_open(_name, NVS_READWRITE, &_handle);
|
||||||
}
|
if (res != ESP_OK) {
|
||||||
// _mypart = esp_partition_find_first(ESP_PARTITION_TYPE_DATA,ESP_PARTITION_SUBTYPE_ANY, EEPROM_FLASH_PARTITION_NAME);
|
log_e("Unable to open NVS namespace: %d", res);
|
||||||
_mypart = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, _name);
|
|
||||||
if (_mypart == NULL) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
size = (size + 3) & (~3);
|
|
||||||
|
size_t key_size = 0;
|
||||||
|
res = nvs_get_blob(_handle, _name, NULL, &key_size);
|
||||||
|
if(res != ESP_OK && res != ESP_ERR_NVS_NOT_FOUND) {
|
||||||
|
log_e("Unable to read NVS key: %d", res);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (size < key_size) { // truncate
|
||||||
|
log_w("truncating EEPROM from %d to %d", key_size, size);
|
||||||
|
uint8_t* key_data = (uint8_t*) malloc(key_size);
|
||||||
|
if(!key_data) {
|
||||||
|
log_e("Not enough memory to truncate EEPROM!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
nvs_get_blob(_handle, _name, key_data, &key_size);
|
||||||
|
nvs_set_blob(_handle, _name, key_data, size);
|
||||||
|
nvs_commit(_handle);
|
||||||
|
free(key_data);
|
||||||
|
}
|
||||||
|
else if (size > key_size) { // expand or new
|
||||||
|
size_t expand_size = size - key_size;
|
||||||
|
uint8_t* expand_key = (uint8_t*) malloc(expand_size);
|
||||||
|
if(!expand_key) {
|
||||||
|
log_e("Not enough memory to expand EEPROM!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// check for adequate free space
|
||||||
|
if(nvs_set_blob(_handle, "expand", expand_key, expand_size)) {
|
||||||
|
log_e("Not enough space to expand EEPROM from %d to %d", key_size, size);
|
||||||
|
free(expand_key);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
free(expand_key);
|
||||||
|
nvs_erase_key(_handle, "expand");
|
||||||
|
uint8_t* key_data = (uint8_t*) malloc(size);
|
||||||
|
if(!key_data) {
|
||||||
|
log_e("Not enough memory to expand EEPROM!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
memset(key_data, 0, size);
|
||||||
|
if(key_size) {
|
||||||
|
log_i("Expanding EEPROM from %d to %d", key_size, size);
|
||||||
|
// hold data while key is deleted
|
||||||
|
nvs_get_blob(_handle, _name, key_data, &key_size);
|
||||||
|
nvs_erase_key(_handle, _name);
|
||||||
|
} else {
|
||||||
|
log_i("New EEPROM of %d bytes", size);
|
||||||
|
}
|
||||||
|
nvs_commit(_handle);
|
||||||
|
nvs_set_blob(_handle, _name, key_data, size);
|
||||||
|
free(key_data);
|
||||||
|
nvs_commit(_handle);
|
||||||
|
}
|
||||||
|
|
||||||
if (_data) {
|
if (_data) {
|
||||||
delete[] _data;
|
delete[] _data;
|
||||||
}
|
}
|
||||||
|
|
||||||
_data = new uint8_t[size];
|
_data = new uint8_t[size];
|
||||||
_size = size;
|
nvs_get_blob(_handle, _name, _data, &_size);
|
||||||
bool ret = false;
|
return true;
|
||||||
if (esp_partition_read (_mypart, 0, (void *) _data, _size) == ESP_OK) {
|
|
||||||
ret = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EEPROMClass::end() {
|
void EEPROMClass::end() {
|
||||||
@ -134,30 +176,22 @@ void EEPROMClass::write(int address, uint8_t value) {
|
|||||||
|
|
||||||
bool EEPROMClass::commit() {
|
bool EEPROMClass::commit() {
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
if (!_size)
|
if (!_size) {
|
||||||
return false;
|
return false;
|
||||||
if (!_dirty)
|
}
|
||||||
|
if (!_data) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!_dirty) {
|
||||||
return true;
|
return true;
|
||||||
if (!_data)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
|
|
||||||
if (esp_partition_erase_range(_mypart, 0, SPI_FLASH_SEC_SIZE) != ESP_OK)
|
|
||||||
{
|
|
||||||
log_e( "partition erase err.");
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if (ESP_OK != nvs_set_blob(_handle, _name, _data, _size)) {
|
||||||
if (esp_partition_write(_mypart, 0, (void *)_data, _size) == ESP_ERR_INVALID_SIZE)
|
log_e( "error in write");
|
||||||
{
|
} else {
|
||||||
log_e( "error in Write");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_dirty = false;
|
_dirty = false;
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
EEPROM.h -ported by Paolo Becchi to Esp32 from esp8266 EEPROM
|
EEPROM.h -ported by Paolo Becchi to Esp32 from esp8266 EEPROM
|
||||||
-Modified by Elochukwu Ifediora <ifedioraelochukwuc@gmail.com>
|
-Modified by Elochukwu Ifediora <ifedioraelochukwuc@gmail.com>
|
||||||
|
-Converted to nvs lbernstone@gmail.com
|
||||||
|
|
||||||
Uses a one sector flash partition defined in partition table
|
Uses a nvs byte array to emulate EEPROM
|
||||||
OR
|
|
||||||
Multiple sector flash partitions defined by the name column in the partition table
|
|
||||||
|
|
||||||
Copyright (c) 2014 Ivan Grokhotkov. All rights reserved.
|
Copyright (c) 2014 Ivan Grokhotkov. All rights reserved.
|
||||||
This file is part of the esp8266 core for Arduino environment.
|
This file is part of the esp8266 core for Arduino environment.
|
||||||
@ -30,19 +29,9 @@
|
|||||||
#define EEPROM_FLASH_PARTITION_NAME "eeprom"
|
#define EEPROM_FLASH_PARTITION_NAME "eeprom"
|
||||||
#endif
|
#endif
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
extern "C" {
|
|
||||||
|
|
||||||
#include <stddef.h>
|
typedef uint32_t nvs_handle;
|
||||||
#include <stdint.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <esp_partition.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// need to define AT LEAST a flash partition for EEPROM with above name
|
|
||||||
//
|
|
||||||
// eeprom , data , 0x99, start address, 0x1000
|
|
||||||
//
|
|
||||||
class EEPROMClass {
|
class EEPROMClass {
|
||||||
public:
|
public:
|
||||||
EEPROMClass(uint32_t sector);
|
EEPROMClass(uint32_t sector);
|
||||||
@ -117,11 +106,10 @@ class EEPROMClass {
|
|||||||
template <class T> T writeAll (int address, const T &);
|
template <class T> T writeAll (int address, const T &);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
uint32_t _sector;
|
nvs_handle _handle;
|
||||||
uint8_t* _data;
|
uint8_t* _data;
|
||||||
size_t _size;
|
size_t _size;
|
||||||
bool _dirty;
|
bool _dirty;
|
||||||
const esp_partition_t * _mypart;
|
|
||||||
const char* _name;
|
const char* _name;
|
||||||
uint32_t _user_defined_size;
|
uint32_t _user_defined_size;
|
||||||
};
|
};
|
||||||
|
@ -3,5 +3,4 @@ nvs, data, nvs, 0x9000, 0x5000,
|
|||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x140000,
|
app0, app, ota_0, 0x10000, 0x140000,
|
||||||
app1, app, ota_1, 0x150000,0x140000,
|
app1, app, ota_1, 0x150000,0x140000,
|
||||||
eeprom, data, 0x99, 0x290000,0x1000,
|
spiffs, data, spiffs, 0x290000,0x170000,
|
||||||
spiffs, data, spiffs, 0x291000,0x16F000,
|
|
||||||
|
|
@ -3,5 +3,4 @@ nvs, data, nvs, 0x9000, 0x5000,
|
|||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x640000,
|
app0, app, ota_0, 0x10000, 0x640000,
|
||||||
app1, app, ota_1, 0x650000,0x640000,
|
app1, app, ota_1, 0x650000,0x640000,
|
||||||
eeprom, data, 0x99, 0xc90000,0x1000,
|
spiffs, data, spiffs, 0xc90000,0x370000,
|
||||||
spiffs, data, spiffs, 0xc91000,0x36F000,
|
|
||||||
|
|
@ -3,5 +3,4 @@ nvs, data, nvs, 0x9000, 0x5000,
|
|||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x330000,
|
app0, app, ota_0, 0x10000, 0x330000,
|
||||||
app1, app, ota_1, 0x340000,0x330000,
|
app1, app, ota_1, 0x340000,0x330000,
|
||||||
eeprom, data, 0x99, 0x670000,0x1000,
|
spiffs, data, spiffs, 0x670000,0x190000,
|
||||||
spiffs, data, spiffs, 0x671000,0x18F000,
|
|
||||||
|
|
@ -3,5 +3,4 @@ nvs, data, nvs, 0x9000, 0x5000,
|
|||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x140000,
|
app0, app, ota_0, 0x10000, 0x140000,
|
||||||
app1, app, ota_1, 0x150000,0x140000,
|
app1, app, ota_1, 0x150000,0x140000,
|
||||||
eeprom, data, 0x99, 0x290000,0x1000,
|
ffat, data, fat, 0x291000,0x170000,
|
||||||
ffat, data, fat, 0x291000,0x16F000,
|
|
||||||
|
|
@ -3,6 +3,5 @@ nvs, data, nvs, 0x9000, 0x5000,
|
|||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x200000,
|
app0, app, ota_0, 0x10000, 0x200000,
|
||||||
app1, app, ota_1, 0x210000,0x200000,
|
app1, app, ota_1, 0x210000,0x200000,
|
||||||
eeprom, data, 0x99, 0x410000,0x1000,
|
ffat, data, fat, 0x410000,0xBEF000,
|
||||||
ffat, data, fat, 0x411000,0xBEE000,
|
|
||||||
# to create/use ffat, see https://github.com/marcmerlin/esp32_fatfsimage
|
# to create/use ffat, see https://github.com/marcmerlin/esp32_fatfsimage
|
||||||
|
|
@ -2,5 +2,4 @@
|
|||||||
nvs, data, nvs, 0x9000, 0x5000,
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x300000,
|
app0, app, ota_0, 0x10000, 0x300000,
|
||||||
eeprom, data, 0x99, 0x310000,0x1000,
|
spiffs, data, spiffs, 0x310000,0xF0000,
|
||||||
spiffs, data, spiffs, 0x311000,0xEF000,
|
|
||||||
|
|
@ -3,5 +3,4 @@ nvs, data, nvs, 0x9000, 0x5000,
|
|||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x480000,
|
app0, app, ota_0, 0x10000, 0x480000,
|
||||||
app1, app, ota_1, 0x490000,0x480000,
|
app1, app, ota_1, 0x490000,0x480000,
|
||||||
eeprom, data, 0x99, 0x910000,0x1000,
|
spiffs, data, spiffs, 0x910000,0x6F0000,
|
||||||
spiffs, data, spiffs, 0x911000,0x6EF000,
|
|
||||||
|
|
@ -3,5 +3,4 @@ nvs, data, nvs, 0x9000, 0x5000,
|
|||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x1E0000,
|
app0, app, ota_0, 0x10000, 0x1E0000,
|
||||||
app1, app, ota_1, 0x1F0000,0x1E0000,
|
app1, app, ota_1, 0x1F0000,0x1E0000,
|
||||||
eeprom, data, 0x99, 0x3D0000,0x1000,
|
spiffs, data, spiffs, 0x3D0000,0x30000,
|
||||||
spiffs, data, spiffs, 0x3D1000,0x2F000,
|
|
||||||
|
|
@ -2,5 +2,4 @@
|
|||||||
nvs, data, nvs, 0x9000, 0x5000,
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x140000,
|
app0, app, ota_0, 0x10000, 0x140000,
|
||||||
eeprom, data, 0x99, 0x150000, 0x1000,
|
spiffs, data, spiffs, 0x150000, 0xB0000,
|
||||||
spiffs, data, spiffs, 0x151000, 0xAF000,
|
|
||||||
|
|
@ -2,5 +2,4 @@
|
|||||||
nvs, data, nvs, 0x9000, 0x5000,
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x200000,
|
app0, app, ota_0, 0x10000, 0x200000,
|
||||||
eeprom, data, 0x99, 0x210000,0x1000,
|
spiffs, data, spiffs, 0x210000,0x1F0000,
|
||||||
spiffs, data, spiffs, 0x211000,0x1EF000,
|
|
||||||
|
|
@ -2,5 +2,4 @@
|
|||||||
nvs, data, nvs, 0x9000, 0x5000,
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x100000,
|
app0, app, ota_0, 0x10000, 0x100000,
|
||||||
eeprom, data, 0x99, 0x110000,0x1000,
|
spiffs, data, spiffs, 0x110000,0x2F0000,
|
||||||
spiffs, data, spiffs, 0x111000,0x2EF000,
|
|
||||||
|
|
@ -2,6 +2,5 @@
|
|||||||
nvs, data, nvs, 0x9000, 0x5000,
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x100000,
|
app0, app, ota_0, 0x10000, 0x100000,
|
||||||
eeprom, data, 0x99, 0x110000,0x1000,
|
ffat, data, fat, 0x110000,0x2F0000,
|
||||||
ffat, data, fat, 0x111000,0x2EF000,
|
|
||||||
# to create/use ffat, see https://github.com/marcmerlin/esp32_fatfsimage
|
# to create/use ffat, see https://github.com/marcmerlin/esp32_fatfsimage
|
||||||
|
|
@ -2,6 +2,5 @@
|
|||||||
nvs, data, nvs, 0x9000, 0x5000,
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
otadata, data, ota, 0xe000, 0x2000,
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
app0, app, ota_0, 0x10000, 0x200000,
|
app0, app, ota_0, 0x10000, 0x200000,
|
||||||
eeprom, data, 0x99, 0x210000,0x1000,
|
ffat, data, fat, 0x210000,0x1F0000,
|
||||||
ffat, data, fat, 0x211000,0x1EF000,
|
|
||||||
# to create/use ffat, see https://github.com/marcmerlin/esp32_fatfsimage
|
# to create/use ffat, see https://github.com/marcmerlin/esp32_fatfsimage
|
||||||
|
|
Loading…
Reference in New Issue
Block a user