• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Как лучше сохранить строку (150 байт) в ESP8266?

CCat

Member
Мне нужно сохранить URL длиной примерно 150 байт (не больше) в ESP.
У меня наличествует также в скетче и ESP8266HTTPUpdateServer.h, то есть возможность обновить "прошивку" по воздухе путем заливки файла прямо в ESP.
И вот как мне сохранить строку, чтобы она точно не была затерта при заливке прошивок?
Я не совсем разобрался - EEPROM же в ESP - это какой-то один выделенный сектор, он не затирается при всяких OTA и прочем? И каков его размер? 1024 байта? Если все так, то не подскажете ли функцию чтения/записи строки в EEPROM?
Мне абсолютно не лень искать, просто я слегка запутался - нахожу библиотеки, которые перемещают область EEPROM для предотвращения затирания и проч.
Не подключать же, в самом деле, из-за 150 байт модуль для хранения? :)
 

nikolz

Well-known member
Мне нужно сохранить URL длиной примерно 150 байт (не больше) в ESP.
У меня наличествует также в скетче и ESP8266HTTPUpdateServer.h, то есть возможность обновить "прошивку" по воздухе путем заливки файла прямо в ESP.
И вот как мне сохранить строку, чтобы она точно не была затерта при заливке прошивок?
Я не совсем разобрался - EEPROM же в ESP - это какой-то один выделенный сектор, он не затирается при всяких OTA и прочем? И каков его размер? 1024 байта? Если все так, то не подскажете ли функцию чтения/записи строки в EEPROM?
Мне абсолютно не лень искать, просто я слегка запутался - нахожу библиотеки, которые перемещают область EEPROM для предотвращения затирания и проч.
Не подключать же, в самом деле, из-за 150 байт модуль для хранения? :)
на самом деле это не EEPROM а RAM в RTC. Сохраняет данные во время сна . Но питание отключать нельзя.
Для пользователя 512 байт
---------------------------
system_rtc_mem_write
-----
Writes data to the RTC memory.
During Deep-sleep mode, the RTC is still operational and can store user data in the defined
user-data area.
|<------system data (256 bytes)------->|<-----------------user data (512 bytes)--------------->|
Prototype
bool system_rtc_mem_write (uint32 des_addr,void * src_addr,uint32 save_size)
Parameter
uint32 des_addr: destination address (block number) in RTC memory, des_addr >=64
void * src_addr: data pointer
uint32 save_size: data length ( byte)
Return true: Success false: Failure
Example os_printf("clk cal : %d \r\n",system_rtc_clock_cali_proc()>>12);
---------------------------------
Data read/write accesses to the RTC memory must be word-aligned (4-byte boundary
aligned). Parameter des_addr means block number (4 bytes per block). For example, to
save data at the beginning of user data area, des_addr will be 256/4 = 64, and save_size
will be data length.
----------------------------------------
system_rtc_mem_read
-------

Read user data from RTC memory. Only user data area should be accessed by the user.
|<------system data (256 bytes)------->|<-----------------user data (512 bytes)--------------->|
Prototype
bool system_rtc_mem_read (uint32 src_addr,void * des_addr,uint32 save_size)
Parameter
uint32 src_addr: source address (block number) in RTC memory, src_addr >= 64
void * des_addr: data pointer
uint32 save_size: data length; unit: byte
Return true: Success false: Failure
--------------------------
Data read/write accesses to the RTC memory must be word aligned (4 bytes boundary
aligned). Parameter src_addr means block number(4 bytes per block). For example, to
read data from the beginning of user data area, src_addr will be 256/4=64, save_size will
be data length.
 
Последнее редактирование:
  • Like
Реакции: CCat

CCat

Member
Спасибо за пример, а при чем здесь RTC? У меня в этой шайтан-машине RTC с EEPROM тоже есть, я в тот EEPROM пишу данные с Arduino Mega, с которой соединена по Serial ESP-шка, но вот именно один URL постоянно передавать с Меги не хочу, и поэтому хотел хранить его на ESP, причем чтобы хранилось и после выключения.
 

Алексей.

Active member
И вот как мне сохранить строку, чтобы она точно не была затерта при заливке прошивок?
Вы уверены что именно это вам нужно?
Для обновления ПО использую уло прибитое к коду, причем не одно а несколько, основное и резервные. Сервера иногда выводятся из эксплуатации (или просто переезжают с домена). Не получив обновление с основного, получим с резервного, после обновления может оказаться что этот резервный стал основным. :)
 
  • Like
Реакции: CCat

CCat

Member
Вы уверены что именно это вам нужно?
Для обновления ПО использую уло прибитое к коду, причем не одно а несколько, основное и резервные. Сервера иногда выводятся из эксплуатации (или просто переезжают с домена). Не получив обновление с основного, получим с резервного, после обновления может оказаться что этот резервный стал основным. :)
Да обновление я гружу не с внешних серверов, а со страницы /update, которая просто позволяет залить файл.
URL просто к другому ресурсу. Да нет, в общем-то проблем передавать его каждый раз с Меги на ESP, там-то всё есть...
 

nikolz

Well-known member
Попробуйте работать с файловой системой.
Судя по вопросом Вы не изучали внутренности ESP
В ESP есть RTC c памятью. RTC Используется для организации режимов сна.
------------------
можно записывать и во флеш, если предполагается отключать питание от ESP полностью.
-----------------
Это имеет смысл делать если ток потребления в режиме сна в 20 мка для вашей задачи большой.
---------------
Но записывать 150 байт во флеш существенно дольше чем в RAM RTC.
Файловая система на флеш тоже работает очень медленно по сравнению с RAM.
 
  • Like
Реакции: CCat

CCat

Member
Судя по вопросом Вы не изучали внутренности ESP
В ESP есть RTC c памятью. RTC Используется для организации режимов сна.
Да, вообще не знал, спасибо.

можно записывать и во флеш, если предполагается отключать питание от ESP полностью.
Но записывать 150 байт во флеш существенно дольше чем в RAM RTC.
Ну у меня эта коробка от сети работает, так что мало ли - все равно нужно хранить во флеш. Иначе придется вводить заново после отключения или пропадания света. А время записи - куда в данном случае торопиться, если эту строку потребуется менять раз в год, а то и реже.

Так все же - есть же в ESP какая-то ячейка, имитирующая EEPROM, которая не затирается при любых манипуляциях?
 

nikolz

Well-known member
Да, вообще не знал, спасибо.


Ну у меня эта коробка от сети работает, так что мало ли - все равно нужно хранить во флеш. Иначе придется вводить заново после отключения или пропадания света. А время записи - куда в данном случае торопиться, если эту строку потребуется менять раз в год, а то и реже.

Так все же - есть же в ESP какая-то ячейка, имитирующая EEPROM, которая не затирается при любых манипуляциях?
нет такой ячейки в ESP
В дурине так обзывается RAM в RTC ESP
 

tretyakov_sa

Moderator
Команда форума
Так все же - есть же в ESP какая-то ячейка, имитирующая EEPROM, которая не затирается при любых манипуляциях?
Создайте файловую систему. Положите строку в файл. При обновлении кода через ESP8266HTTPUpdateServer.h, файловая система не будет затронута при условии если вы не измените размер выделенной памяти.
 

nikolz

Well-known member
Создайте файловую систему. Положите строку в файл. При обновлении кода через ESP8266HTTPUpdateServer.h, файловая система не будет затронута при условии если вы не измените размер выделенной памяти.
1) В доке есть пример как использовать память RTC
RTC APIs Example
Demo code below shows how to get RTC time and to read and write to RTC memory.
-------------------------
2) прочитайте SDK.
SPI Flash Related APIs
и вы узнаете что
user_esp_platform_load_param - read data from flash user parameter area
user_esp_platform_save_param - write data to flash user parameter area
struct esp_platform_saved_param is the parameter Espressif used that stored in flash user parameter
area.
If you want to use this storage, add your parameters in the struct esp_platform_saved_param and call the
two APIs above to read/write.
------------------
нет надобности городить файловую систему которая работает очень медленно и занимает много места для сохранения 150 байт.
 

CodeNameHawk

Moderator
Команда форума
Не понятно почему эти 150 байт не держать в программе.
В новой прошивке они тоже будут на своем месте.
Возможно тс хочет просто защитить свою программу...
 

nikolz

Well-known member
Возможно, тогда файл и как бонус простое редактирование через браузер.
пишем в защищенную область и как бонус редактируем как угодно и куча свободного места на флеш нет заморочки с файловой системой
и защита от ошибки( сбросе питания) при записи
 
Сверху Снизу