• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
Возможно, тогда файл и как бонус простое редактирование через браузер.
пишем в защищенную область и как бонус редактируем как угодно и куча свободного места на флеш нет заморочки с файловой системой
и защита от ошибки( сбросе питания) при записи
 
Сверху Снизу