-
Notifications
You must be signed in to change notification settings - Fork 7.6k
EEPROM_library_ported_Partition_table_updated #535
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
2edcd25
EEPROM_library_ported_Partition_table_updated
pbecchi deb4e13
Cleanup & formal corrections
pbecchi c8d009c
Make formatting of file consistent.
lonerzzz 6c5c00e
Code formatting cleanup
lonerzzz a27f139
Code formatting cleanup
lonerzzz 6b2bbcb
Code formatting cleanup
lonerzzz 09b91da
Remove commented out code
lonerzzz 355e094
Restore dropped bracket
lonerzzz 4f1f9e3
Update EEPROM.cpp
pbecchi fd316c9
Format Corrections
pbecchi 92345da
deletedExample
pbecchi 2d51387
Merge branch 'EEprom_library' of https://github.com/pbecchi/arduino-e…
pbecchi a503574
Corrected example
pbecchi c4e629e
Deleted interrupts/nointerrupts
pbecchi 6a8e0e0
Update EEPROM.cpp
pbecchi File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
/* | ||
EEPROM.cpp -ported by Paolo Becchi to Esp32 | ||
Op | ||
from esp8266 EEPROM emulation | ||
|
||
Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. | ||
This file is part of the esp8266 core for Arduino environment. | ||
|
||
This library is free software; you can redistribute it and/or | ||
modify it under the terms of the GNU Lesser General Public | ||
License as published by the Free Software Foundation; either | ||
version 2.1 of the License, or (at your option) any later version. | ||
|
||
This library is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
Lesser General Public License for more details. | ||
|
||
You should have received a copy of the GNU Lesser General Public | ||
License along with this library; if not, write to the Free Software | ||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
*/ | ||
|
||
#include "Arduino.h" | ||
#include "EEPROM.h" | ||
|
||
#include <esp_log.h> | ||
|
||
static const char* TAG = "eeprom"; | ||
|
||
EEPROMClass::EEPROMClass(uint32_t sector) | ||
: _sector(sector) | ||
, _data(0) | ||
, _size(0) | ||
, _dirty(false) | ||
{ | ||
} | ||
|
||
EEPROMClass::EEPROMClass(void) | ||
: _sector(0)// (((uint32_t)&_SPIFFS_end - 0x40200000) / SPI_FLASH_SEC_SIZE)) | ||
, _data(0) | ||
, _size(0) | ||
, _dirty(false) | ||
{ | ||
} | ||
|
||
bool EEPROMClass::begin(size_t size) { | ||
if (size <= 0) { | ||
return false; | ||
} | ||
if (size > SPI_FLASH_SEC_SIZE) { | ||
size = SPI_FLASH_SEC_SIZE; | ||
} | ||
_mypart = esp_partition_find_first(ESP_PARTITION_TYPE_DATA,ESP_PARTITION_SUBTYPE_ANY, EEPROM_FLASH_PARTITION_NAME); | ||
if (_mypart == NULL) { | ||
return false; | ||
} | ||
size = (size + 3) & (~3); | ||
|
||
if (_data) { | ||
delete[] _data; | ||
} | ||
|
||
_data = new uint8_t[size]; | ||
_size = size; | ||
bool ret = false; | ||
if (esp_partition_read (_mypart,0, (void *) _data,_size)==ESP_OK) { | ||
ret=true; | ||
} | ||
|
||
return ret; | ||
} | ||
|
||
void EEPROMClass::end() { | ||
if (!_size) { | ||
return; | ||
} | ||
|
||
commit(); | ||
if (_data) { | ||
delete[] _data; | ||
} | ||
_data = 0; | ||
_size = 0; | ||
} | ||
|
||
uint8_t EEPROMClass::read(int address) { | ||
if (address < 0 || (size_t)address >= _size) { | ||
return 0; | ||
} | ||
if (!_data) { | ||
return 0; | ||
} | ||
|
||
return _data[address]; | ||
} | ||
|
||
void EEPROMClass::write(int address, uint8_t value) { | ||
if (address < 0 || (size_t)address >= _size) | ||
return; | ||
if(!_data) | ||
return; | ||
|
||
// Optimise _dirty. Only flagged if data written is different. | ||
uint8_t* pData = &_data[address]; | ||
if (*pData != value) | ||
{ | ||
*pData = value; | ||
_dirty = true; | ||
} | ||
} | ||
|
||
bool EEPROMClass::commit() { | ||
bool ret = false; | ||
if (!_size) | ||
return false; | ||
if (!_dirty) | ||
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_partition_write(_mypart, 0, (void *)_data, _size) == ESP_ERR_INVALID_SIZE) | ||
{ | ||
log_e( "error in Write"); | ||
} | ||
else | ||
{ | ||
_dirty = false; | ||
ret = true; | ||
} | ||
} | ||
|
||
return ret; | ||
} | ||
|
||
uint8_t * EEPROMClass::getDataPtr() { | ||
_dirty = true; | ||
return &_data[0]; | ||
} | ||
|
||
#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_EEPROM) | ||
EEPROMClass EEPROM; | ||
#endif |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
/* | ||
EEPROM.h -ported by Paolo Becchi to Esp32 | ||
|
||
use a one sector flash partition defined in partition table | ||
|
||
from esp8266 EEPROM | ||
|
||
Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. | ||
This file is part of the esp8266 core for Arduino environment. | ||
|
||
This library is free software; you can redistribute it and/or | ||
modify it under the terms of the GNU Lesser General Public | ||
License as published by the Free Software Foundation; either | ||
version 2.1 of the License, or (at your option) any later version. | ||
|
||
This library is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
Lesser General Public License for more details. | ||
|
||
You should have received a copy of the GNU Lesser General Public | ||
License along with this library; if not, write to the Free Software | ||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
*/ | ||
|
||
#ifndef EEPROM_h | ||
#define EEPROM_h | ||
#ifndef EEPROM_FLASH_PARTITION_NAME | ||
#define EEPROM_FLASH_PARTITION_NAME "eeprom" | ||
#endif | ||
extern "C" { | ||
|
||
#include <stddef.h> | ||
#include <stdint.h> | ||
#include <string.h> | ||
#include <esp_partition.h> | ||
} | ||
|
||
// | ||
// need to define a flash partition for EEPROM with above name | ||
// | ||
// eeprom , data , 0x99, start address, 0x1000 | ||
// | ||
class EEPROMClass { | ||
public: | ||
EEPROMClass(uint32_t sector); | ||
EEPROMClass(void); | ||
|
||
bool begin(size_t size); | ||
uint8_t read(int address); | ||
void write(int address, uint8_t val); | ||
bool commit(); | ||
void end(); | ||
|
||
uint8_t * getDataPtr(); | ||
|
||
template<typename T> | ||
T &get(int address, T &t) { | ||
if (address < 0 || address + sizeof(T) > _size) | ||
return t; | ||
|
||
memcpy((uint8_t*) &t, _data + address, sizeof(T)); | ||
return t; | ||
} | ||
|
||
template<typename T> | ||
const T &put(int address, const T &t) { | ||
if (address < 0 || address + sizeof(T) > _size) | ||
return t; | ||
|
||
memcpy(_data + address, (const uint8_t*) &t, sizeof(T)); | ||
_dirty = true; | ||
return t; | ||
} | ||
|
||
protected: | ||
uint32_t _sector; | ||
uint8_t* _data; | ||
size_t _size; | ||
bool _dirty; | ||
const esp_partition_t * _mypart; | ||
}; | ||
|
||
#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_EEPROM) | ||
extern EEPROMClass EEPROM; | ||
#endif | ||
|
||
#endif | ||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
/* | ||
EEPROM Write | ||
|
||
Stores random values into the EEPROM. | ||
These values will stay in the EEPROM when the board is | ||
turned off and may be retrieved later by another sketch. | ||
*/ | ||
|
||
#include "EEPROM.h" | ||
|
||
// the current address in the EEPROM (i.e. which byte | ||
// we're going to write to next) | ||
int addr = 0; | ||
#define EEPROM_SIZE 64 | ||
void setup() | ||
{ | ||
Serial.begin(115200); | ||
Serial.println("start..."); | ||
if (!EEPROM.begin(EEPROM_SIZE)) | ||
{ | ||
Serial.println("failed to initialise EEPROM"); delay(1000000); | ||
} | ||
Serial.println(" bytes read from Flash . Values are:"); | ||
for (int i = 0; i < EEPROM_SIZE; i++) | ||
{ | ||
Serial.print(byte(EEPROM.read(i))); Serial.print(" "); | ||
} | ||
Serial.println(); | ||
Serial.println("writing random n. in memory"); | ||
} | ||
|
||
void loop() | ||
{ | ||
// need to divide by 4 because analog inputs range from | ||
// 0 to 1023 and each byte of the EEPROM can only hold a | ||
// value from 0 to 255. | ||
// int val = analogRead(10) / 4; | ||
int val = byte(random(10020)); | ||
// write the value to the appropriate byte of the EEPROM. | ||
// these values will remain there when the board is | ||
// turned off. | ||
EEPROM.write(addr, val); | ||
Serial.print(val); Serial.print(" "); | ||
// advance to the next address. there are 512 bytes in | ||
// the EEPROM, so go back to 0 when we hit 512. | ||
// save all changes to the flash. | ||
addr = addr + 1; | ||
if (addr == EEPROM_SIZE) | ||
{ | ||
Serial.println(); | ||
addr = 0; | ||
EEPROM.commit(); | ||
Serial.print(EEPROM_SIZE); | ||
Serial.println(" bytes written on Flash . Values are:"); | ||
for (int i = 0; i < EEPROM_SIZE; i++) | ||
{ | ||
Serial.print(byte(EEPROM.read(i))); Serial.print(" "); | ||
} | ||
Serial.println(); Serial.println("----------------------------------"); | ||
} | ||
|
||
delay(100); | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
####################################### | ||
# Syntax Coloring Map For Ultrasound | ||
####################################### | ||
|
||
####################################### | ||
# Datatypes (KEYWORD1) | ||
####################################### | ||
|
||
EEPROM KEYWORD1 | ||
|
||
####################################### | ||
# Methods and Functions (KEYWORD2) | ||
####################################### | ||
|
||
####################################### | ||
# Constants (LITERAL1) | ||
####################################### | ||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
name=EEPROM | ||
version=1.0 | ||
author=Ivan Grokhotkov | ||
maintainer=Paolo Becchi <pbecchi@aerobusiness.it> | ||
sentence=Enables reading and writing data to the permanent FLASH storage, up to 4kb. | ||
paragraph= | ||
category=Data Storage | ||
url=http://arduino.cc/en/Reference/EEPROM | ||
architectures=esp32 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It may be a better idea to shrink app partition instead. Otherwise SPIFFS partition will need to be re-uploaded after this change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Initially I had the EEprom partition after the Nvs one shrinking Nvs partition 4kbytes.
Then I change it for me-no-dev comment on #525
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since spiffs is not running yet and the app partitions are purposly enlarged to fit BT and WIFI it is better to do it like that ;)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Otherwise you are correct
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also giving the 0x99 SubType value a name would be helpful
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What shall I do?
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As @igrr say, the address change will cause some problems in the Unofficial SPIFFS library
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Else we should cause problems with bigger sketches?