Перейти к содержанию
    

stm32f407 хранение настроек

Какую память использовать для хранение настроек в stm32f407? Думал прицепить память spi но в самом микроконтроллере 1мб памяти, для всех настроек 10кб хватит вполне. Опасение если использовать память программ вдруг в момент записи пропадет питание или еще что то, не хотелось бы что бы повредилась программа, как правильнее сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще делать контроллер без еепрома это свинство (не могу опять не пнуть СТМ)

Дык, эстешники вам в ответ апликуху - "эмуляция eeprom". Если питание пропало и какая-то настройка не сохранилась остается ее предыдущее значение.

Я правда, эмулирую eeprom по-своему (не как ST предлагают), но за много лет использования косяков не заметил.

Даже циклический журнал событий держу в контроллере. Кста, с записью событий "появилось питание", "пропало питание" - по сработке PVD,

времени сохранить запись хватает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я тоже изменяемые данные сохраняю во флеш. Правда, в отличие от, скажем, STM8, STM32 не позволяют перезаписывать области произвольного размера — только кратные размеру страницы.

На STM32F103 о 100 ногах мне пришлось пойти на хитрость: выравнять не только размер структуры на 2кБ, но и ее начало (чтобы четко 1 страницу заняла). И вот так из-за десятка новых байт приходится 2кБ перезаписывать. Благо, нечасто.

Кстати, для обозначения конца структуры (а также выравнивания) мне подсказали интересную штуку, которую я и использовал: "массив нулевого размера".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

приходится 2кБ перезаписывать

В F407 страница вообще по 16кБ, а настройки у меня 64 байта занимают (степень 2).

Страниц минимум две (больше - лучше).

Находим первое пустое место после записей. Пишем туда. Если при этом запись попадает на новую страницу, то предыдущую стираем.

Все разумеется в терминах "кольца".

 

Надежность (10к перезаписей страницы) * (16к размер страницы / 64 байта размер структуры) * (2 число страниц) > 5М перезаписей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если писать по кругу, то где-то придется как-то сохранять указатель на актуальную запись. Как?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если писать по кругу, то где-то придется как-то сохранять указатель на актуальную запись. Как?

Не придется, если записи внутри пронумерованы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И как узнать номер последней актуальной? Перебирать по NULL-terminated все?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, перебрать все. Выполняется один раз на старте и много времени не занимает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И как узнать...?

 

Поддерживаю мысль.

Так-же реализовал. Кольцевой, по три банки. одну пишем, вторую переносим в ту что пишем(лениво), третью по надобности стираем.

Хвост ищем при подъёме. Времени не очень много занимает. Для бОльшей скорости записи делаю индекс в памяти на существующую картину.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думал прицепить память spi но в самом микроконтроллере 1мб памяти, для всех настроек 10кб хватит вполне.

 

Если подужать до 4кб, и используете встроенные часы с батарейкой, то можно просто писать в backup RAM.

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если подужать до 4кб, и используете встроенные часы с батарейкой, то можно просто писать в backup RAM.

Ой. Так не всегда годится. Что будет при смене батарейки? Все настройки потеряются?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если подужать до 4кб, и используете встроенные часы с батарейкой, то можно просто писать в backup RAM.

Ненадёжно. При сбое питания/перезагрузке в момент записи потеряете все данные.

Журнал с несколькими записями однозначно надёжнее: если не валидна последняя запись (из-за прерывания записи перезагрузкой), читаете предыдущую, валидную.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ненадёжно. При сбое питания/перезагрузке в момент записи потеряете все данные.

 

Ни разу не терялись, батарейку меняю при включенном основном питании, и ее очень надолго хватает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я во флеш храню настройки как на старых железках на LPC23xx, так и на новых на процессорах STM 407/417, целостность данных контролирую CRC, жалоб на пропадание настроек пока не поступало. Партии около 1000 изделий, но это правда на LPC23xx, думаю на STM будет результат не хуже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...