Из серии F1 стянул алгоритм работы в лоб считал модифицировал стер всю страницу записал.
Но на F4 страницы гораздо большего размера и стирания страницы занимает приличное время.
Подумываю сделать запись в кольце типа, записал сдвинул адрес, записал.. и так далее но, от стирания не куда не деться, вот думаю как его в фоне можно сделать.
stm32f405 запись конфигурации во flash
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: stm32f405 запись конфигурации во flash
Что останавливает?
- AlanDrakes
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Пн июл 04, 2016 16:51:22
- Откуда: Россия, Омск
Re: stm32f405 запись конфигурации во flash
В фоне - никак.
Во время стирания/записи страницы доступ к flash памяти будет автоматически приостановлен.
Плюс, размеры страниц довольно большие - 64кБ+, а это значит что для надёжного хранения потребуется вдвое больше (кольцевой буфер на две страницы).
Как вариант - могу подсказать использование первых страниц для хранения данных (страницы 0-3 чаще всего имеют меньший размер). В нулевой, естественно, будет загрузчик, который будет переводить исполнение кода после сброса на то место, где находится собственно, код (например, 4 страница).
Хотя и это тоже не самый рациональный вариант. Удобнее использовать внешнюю микросхему EEPROM.
Во время стирания/записи страницы доступ к flash памяти будет автоматически приостановлен.
Плюс, размеры страниц довольно большие - 64кБ+, а это значит что для надёжного хранения потребуется вдвое больше (кольцевой буфер на две страницы).
Как вариант - могу подсказать использование первых страниц для хранения данных (страницы 0-3 чаще всего имеют меньший размер). В нулевой, естественно, будет загрузчик, который будет переводить исполнение кода после сброса на то место, где находится собственно, код (например, 4 страница).
Хотя и это тоже не самый рациональный вариант. Удобнее использовать внешнюю микросхему EEPROM.
Re: stm32f405 запись конфигурации во flash
AlanDrakes писал(а):В фоне - никак.
Это я имел ввиду что бы для пользователя было не заметно, после того как записал и выдал что ок записал, проверил свободное место и если его мало то стер. Но я уже отбросил такой вариант, так как он может не неожиданно, остановить программу это не очень хорошо.
Да на начальные страницы, я тоже смотрел, но там bootloader сидит, а без дефолтных настроек устройство не работает, ну и самая проблема то что не всегда надо перезаписывать дефолтные настройки , по этому, их надо выделить в отдельную секцию и линкеру как-то указать что в этот секцию нечего больше не помешать ну и размер как-то задать, чего особо не получилось.
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: stm32f405 запись конфигурации во flash
В линкере указываем после секции data точку с выравниванием на размер страницы — это будет начало свободного флеша.
В структуре данных, которую надо писать, добавляем в самое начало magick number, отличный от 0xffffffff, например, 0xdeadbeef. Используем бинарный поиск, чтобы найти последнюю запись. Как флеш кончилась, стираем нафиг все страницы и начинаем с первой. В этом случае операция стирания флеша будет производиться достаточно редко.
Если поможет, вот мой сниппет.
В структуре данных, которую надо писать, добавляем в самое начало magick number, отличный от 0xffffffff, например, 0xdeadbeef. Используем бинарный поиск, чтобы найти последнюю запись. Как флеш кончилась, стираем нафиг все страницы и начинаем с первой. В этом случае операция стирания флеша будет производиться достаточно редко.
Если поможет, вот мой сниппет.