SergeyVas 0 5 мая, 2015 Опубликовано 5 мая, 2015 · Жалоба Какую память использовать для хранение настроек в stm32f407? Думал прицепить память spi но в самом микроконтроллере 1мб памяти, для всех настроек 10кб хватит вполне. Опасение если использовать память программ вдруг в момент записи пропадет питание или еще что то, не хотелось бы что бы повредилась программа, как правильнее сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 5 мая, 2015 Опубликовано 5 мая, 2015 · Жалоба Вообще делать контроллер без еепрома это свинство (не могу опять не пнуть СТМ), но если у вас именно настройки, значит они пишутся под контролем юзера (при подключении к хосту через юсб, скажем), так что вполне можно во флэш писать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 5 мая, 2015 Опубликовано 5 мая, 2015 · Жалоба Вообще делать контроллер без еепрома это свинство (не могу опять не пнуть СТМ) Дык, эстешники вам в ответ апликуху - "эмуляция eeprom". Если питание пропало и какая-то настройка не сохранилась остается ее предыдущее значение. Я правда, эмулирую eeprom по-своему (не как ST предлагают), но за много лет использования косяков не заметил. Даже циклический журнал событий держу в контроллере. Кста, с записью событий "появилось питание", "пропало питание" - по сработке PVD, времени сохранить запись хватает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 2 5 мая, 2015 Опубликовано 5 мая, 2015 · Жалоба Я тоже изменяемые данные сохраняю во флеш. Правда, в отличие от, скажем, STM8, STM32 не позволяют перезаписывать области произвольного размера — только кратные размеру страницы. На STM32F103 о 100 ногах мне пришлось пойти на хитрость: выравнять не только размер структуры на 2кБ, но и ее начало (чтобы четко 1 страницу заняла). И вот так из-за десятка новых байт приходится 2кБ перезаписывать. Благо, нечасто. Кстати, для обозначения конца структуры (а также выравнивания) мне подсказали интересную штуку, которую я и использовал: "массив нулевого размера". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 5 мая, 2015 Опубликовано 5 мая, 2015 · Жалоба приходится 2кБ перезаписывать В F407 страница вообще по 16кБ, а настройки у меня 64 байта занимают (степень 2). Страниц минимум две (больше - лучше). Находим первое пустое место после записей. Пишем туда. Если при этом запись попадает на новую страницу, то предыдущую стираем. Все разумеется в терминах "кольца". Надежность (10к перезаписей страницы) * (16к размер страницы / 64 байта размер структуры) * (2 число страниц) > 5М перезаписей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 2 5 мая, 2015 Опубликовано 5 мая, 2015 · Жалоба Если писать по кругу, то где-то придется как-то сохранять указатель на актуальную запись. Как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба Если писать по кругу, то где-то придется как-то сохранять указатель на актуальную запись. Как? Не придется, если записи внутри пронумерованы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 2 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба И как узнать номер последней актуальной? Перебирать по NULL-terminated все? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба Да, перебрать все. Выполняется один раз на старте и много времени не занимает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба И как узнать...? Поддерживаю мысль. Так-же реализовал. Кольцевой, по три банки. одну пишем, вторую переносим в ту что пишем(лениво), третью по надобности стираем. Хвост ищем при подъёме. Времени не очень много занимает. Для бОльшей скорости записи делаю индекс в памяти на существующую картину. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 6 мая, 2015 Опубликовано 6 мая, 2015 (изменено) · Жалоба Думал прицепить память spi но в самом микроконтроллере 1мб памяти, для всех настроек 10кб хватит вполне. Если подужать до 4кб, и используете встроенные часы с батарейкой, то можно просто писать в backup RAM. Изменено 6 мая, 2015 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба Если подужать до 4кб, и используете встроенные часы с батарейкой, то можно просто писать в backup RAM. Ой. Так не всегда годится. Что будет при смене батарейки? Все настройки потеряются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба Если подужать до 4кб, и используете встроенные часы с батарейкой, то можно просто писать в backup RAM. Ненадёжно. При сбое питания/перезагрузке в момент записи потеряете все данные. Журнал с несколькими записями однозначно надёжнее: если не валидна последняя запись (из-за прерывания записи перезагрузкой), читаете предыдущую, валидную. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба Ненадёжно. При сбое питания/перезагрузке в момент записи потеряете все данные. Ни разу не терялись, батарейку меняю при включенном основном питании, и ее очень надолго хватает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quasar 20 6 мая, 2015 Опубликовано 6 мая, 2015 · Жалоба Я во флеш храню настройки как на старых железках на LPC23xx, так и на новых на процессорах STM 407/417, целостность данных контролирую CRC, жалоб на пропадание настроек пока не поступало. Партии около 1000 изделий, но это правда на LPC23xx, думаю на STM будет результат не хуже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться