Страница 1 из 1
stm32f405 запись конфигурации во flash
Добавлено: Чт апр 30, 2020 07:22:47
pokk
Из серии F1 стянул алгоритм работы в лоб считал модифицировал стер всю страницу записал.
Но на F4 страницы гораздо большего размера и стирания страницы занимает приличное время.
Подумываю сделать запись в кольце типа, записал сдвинул адрес, записал.. и так далее но, от стирания не куда не деться, вот думаю как его в фоне можно сделать.
Re: stm32f405 запись конфигурации во flash
Добавлено: Чт апр 30, 2020 07:34:13
VladislavS
Что останавливает?
Re: stm32f405 запись конфигурации во flash
Добавлено: Чт апр 30, 2020 16:39:19
AlanDrakes
В фоне - никак.
Во время стирания/записи страницы доступ к flash памяти будет автоматически приостановлен.
Плюс, размеры страниц довольно большие - 64кБ+, а это значит что для надёжного хранения потребуется вдвое больше (кольцевой буфер на две страницы).
Как вариант - могу подсказать использование первых страниц для хранения данных (страницы 0-3 чаще всего имеют меньший размер). В нулевой, естественно, будет загрузчик, который будет переводить исполнение кода после сброса на то место, где находится собственно, код (например, 4 страница).
Хотя и это тоже не самый рациональный вариант. Удобнее использовать внешнюю микросхему EEPROM.
Re: stm32f405 запись конфигурации во flash
Добавлено: Пт май 01, 2020 06:48:58
pokk
AlanDrakes писал(а):В фоне - никак.
Это я имел ввиду что бы для пользователя было не заметно, после того как записал и выдал что ок записал, проверил свободное место и если его мало то стер. Но я уже отбросил такой вариант, так как он может не неожиданно, остановить программу это не очень хорошо.
Да на начальные страницы, я тоже смотрел, но там bootloader сидит, а без дефолтных настроек устройство не работает, ну и самая проблема то что не всегда надо перезаписывать дефолтные настройки , по этому, их надо выделить в отдельную секцию и линкеру как-то указать что в этот секцию нечего больше не помешать ну и размер как-то задать, чего особо не получилось.
Re: stm32f405 запись конфигурации во flash
Добавлено: Пт май 01, 2020 11:28:29
Eddy_Em
В линкере указываем после секции data точку с выравниванием на размер страницы — это будет начало свободного флеша.
В структуре данных, которую надо писать, добавляем в самое начало magick number, отличный от 0xffffffff, например, 0xdeadbeef. Используем бинарный поиск, чтобы найти последнюю запись. Как флеш кончилась, стираем нафиг все страницы и начинаем с первой. В этом случае операция стирания флеша будет производиться достаточно редко.
Если поможет,
вот мой сниппет.