STM32 Хранение данных и конфигурации во FLASH памяти.

preview_player
Показать описание
Видео для начинающих. Рассказывается об алгоритмах организации хранения текущей конфигурации и пользовательских данных во FLASH памяти процессора.
------------------------------------------
Поддержать автора канала можно перейдя по ссылке:

Или просто отправив перевод на Yandex.кошелек:
4100116547550395

А также переводом по номеру карты Сбер:
4279-3000-1033-0561
------------------------------------------
Рекомендации по теме
Комментарии
Автор

Здравствуйте, Владимир. Спасибо Вам огромное за то, что делитесь своим опытом в разработке ПО для STM32. Данное видео помогло мне структурировать в голове работу с конфигурацией и сохранением ее во FLASH микроконтроллера. Теперь программа для разрабатываемого устройства стала гораздо читабельнее, стало проще ее модифицировать в случае добавления новых параметров в конфигурацию. Всего Вам доброго.

АнтонБеляев-ну
Автор

спасибо, все работает, сделал себе генератор импульсов с автосохранением 😎

space_games
Автор

Спасибо Вам за полезную информацию !С Новым Годом!

raven
Автор

У себя использую попеременное хранение настроек в двух секторах. Один сектор заполнился, записываю на второй, потом первый стираю и записываю туда. Так исключается возможность остаться без настроек при отключении питания в момент, когда началось стирание/запись.

efimefimefim
Автор

Уточню 1:38: страниц 256. От 0 страницы и до 255 всего с нулевой 256 блоков.

ЕвгенийСторожев-чт
Автор

Добрый вечер, Большое спасибо за оперативность! очень актуально!
Надеюсь будет затронуты вопросы с сохранением структур с разношерстными параметрами(char, int, вложенные структуры) про упаковку структур, чтение после перегрузки из памяти с заполнением обратно этой структуры, и еще вопрос интересует про эмуляцию EEPROM.
Грубо говоря имеется
typedef struct{
int param1;
char str1[128];
char str2[256];
uint32_t param4;
};
Как мне ее записать всё в память, а после считать. Думаю, что просто делается, но пока никак. Заранее спасибо

aleksandrkozlov
Автор

Спасибо! В цикле сравнения сделать бы break после первого несовпадения. И наверное можно не ставить таймаут после записи во флешу слова, там внутри HAL_FLASH_Program есть ожидание завершения последней операции с флешой.

АлександрСпицын-хя
Автор

Владимир спасибо за труды. Вопрос прога занимает 24кб у STM32F4 флеша 512кб. посмотрел стлинком флеш память а там все разбросано. и немогу 16кб - один сектор найти - нужно впихивать в разные сектора по куску. Как то компилятору можно указать
или что сделать что бы 16кб сектор не трогал ???

NIKOLAY_PSHONIA
Автор

Здравствуйте, Спасибо.
А почему вы не используете в коде инкремент переменной на 1 как ++
Или это только для наглядности новичкам?

ArthurIslamRU
Автор

Когда кто-то говорил что AVR не проще, они просто другие... В авр для записи в ипром всего 1 функция с двумя параметрами (куда записывать и какие данные)

dmitriibannikovasx
Автор

Владимир, добрый день, очень полезное видео, можно ли выложить проект?

Илья-мс
Автор

спасибо. а есть документация о создании встроенной базы данных на флэше?

aleksandrzakutnyy
Автор

Подскажите, как организовать обновление прошивки, через программу виндовс? Хочу сделать ПО в windows forms для отправки настроек и обновления прошивки через vcp. Есть ли у вас примеры как это реализовать?

led-avto
Автор

Зачем искать ключ если у вас есть контрольная сумма? Сразу проверяйте целостность и если содержимое развалено восстанавливайте заводские значения.

ArtemKAD
Автор

static....EraseInitStruct она вроде так глобальная переменная...
1)для чего мы ещё делаем ее всегда-существующей?
2)почему мы создаём ее не указателем на структуру с инициализацией адресом страницы памяти, а переменной_структуры в hip-е всегда занимающей место?
3)она ли используется как эталонная-сравнения из RAM vs Flash(другими словами, раз она уже отела ОЗУ, ни в ней ли хранятся все 2к данных ОЗУ)?
ПС. спасибо за подробный ответ...может какие-то ответы и глупые на ваш взгляд...но только дурак не учится.

serggorod
Автор

Владимир, добрый день, запись во флеш останавливает выполнение остальной программы? Ранее я пытался сохранять во флеш и наблюдал такой эффект (возможно делал что-то принципиально неправильно). Присутствует ли он у вас?
upd: FreeRTOS использовал, сохраняет одна задача, останавливаются все

spookee
Автор

Где было это видео 3 года...когда я тонул в примерах на указатели типа указатили на вид типа_флеш...
обидно точто подписан 2мя устройствами... и нигде не всплвло.!!!! почему А?¿?
Жаль что не для адептов садо_cmsis....

serggorod
Автор

Возникло три вопроса.
1. А по таймингам не измеряли? Сколько времени займёт цикл чтения/записи? Чисто для интереса. Сам не пробовал, но читал, что достаточно долго. И, если EEPROM анлочен, то нельзя выполнять другие операции, пока не залочим.
2. Связан с количеством циклов перезаписи. Допустим, что мы превысили количество циклов перезаписи и переместили структуру в другой блок. Как программа узнАет, при следующем включении питания МК, что данные теперь на новом месте? Адрес начала чтения данных жестко вшит в тело программы. Или я где-то чего-то не понял?
3. Вытекает из второго. А не проще для целей автосохранения конфигурации использовать внешний EEPROM по I2C? Стоят копейки, а девайс, как вы говорите, сложный. А хранение основной конфы сделать в EEPROM МК. Меняться он будет раз в полгода, так что, можно не заморачиваться с количеством циклов перезаписи. Столько люди не живут, сколько девайс сможет работать. :-)
Или изменить алгоритм. К примеру, на питание поставить достаточно большой кондер, и контролировать отдельным входом наличие питания до кондера. Если питание пропало, вызываем алярм по прерыванию питания, где стопорим все задачи, пишем конфиг в EEPROM и отпускаем все задачи пока не разрядится кондер.

YuriyIY
Автор

лучше уж выкладывать видео как обычно. эти "премьеры" только сбивают с толку

beerbear
Автор

1. Вопрос. Запись во FLASH у Вас производится с некоего начального адреса до КОНЦА СТРАНИЦЫ. А надо ли ? Все таки структура конфигурации явно короче 2K.
2. Запись производится в цикле while. При этом - если HAL_FLASH_Program перестанет возвращать HAL_OK - произойдет зависание т.к. l_Address перестанет увеличиваться.
3. Применение ключа не гарантирует проверку на сбой памяти - сбой может произойти в какой-то другой области. Надо бы контрольную сумму

МихаилТиунов-сд