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

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

Ни разу не терялись,

Это не довод. Вероятность низкая, но всё равно не годится если нужна надёжность. 1000раз не случилось в 1001й раз попадёт сбой во время записи.

Если не проблема переконфигурить устройство при таком случае - то тогда на страшно.

Но если ответственная область, где важна надёжность работы и трудно будет переконфигурить заново - не годится.

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


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

 

Это не довод. Вероятность низкая, но всё равно не годится если нужна надёжность. 1000раз не случилось в 1001й раз попадёт сбой во время записи.

Если не проблема переконфигурить устройство при таком случае - то тогда на страшно.

Но если ответственная область, где важна надёжность работы и трудно будет переконфигурить заново - не годится.

 

Ну в таком случае, конечно хорошо бы иметь резервную копию последних настроек, запись основных и запись копии происходит соответственно в разное время. Я такое делал, но правда не с целью защитить от потери, а с целью защитить пользователя от неумелых действий. Настроил что-то не то, откатил назад, на предыдущую конфигурацию.

 

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


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

Буду использовать внутреннюю память. Скачал исходники eeprom emulation протестировал немного мне не подходит как там реализовано, переделал вроде все работает, только почему то FLASH_EraseSector() не стирает, стирание должно заполнять сектор 0xff ? А там прошлая запись остается. Если вначале стираю потом записываю данные, данные сохраняются проблем нет. Но после стирания должно же быть 0xff? Не писать же в цикле 0xff если есть стирание.

FLASH_Unlock();

    while(FLASH_EraseSector(FLASH_Sector_2,VoltageRange_3)!=FLASH_COMPLETE);
    for(copyf = SECTOR2_ADRESS_0,dtaindex = 0; copyf<(SECTOR2_ADRESS_0+SIZE_ROM_DATA);copyf++,dtaindex++){
        while(FLASH_ProgramByte(copyf,DBROM.byte[dtaindex])!=FLASH_COMPLETE);
    }//for
FLASH_Lock();

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


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

1000раз не случилось в 1001й раз попадёт сбой во время записи.

 

Это запись в обычную память, вероятность сбоя не больше, чем запись в любую ячейку памяти и уж куда меньше, чем процедура записи во флеш, т.к. там пишет не байтами, а страницами. Если произойдет сбой при записи в память, то потеряете байт или 4 байта, а в случае флеши - всю страницу.

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


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

Если произойдет сбой при записи в память, то потеряете байт или 4 байта, а в случае флеши - всю страницу.

Забавная выдумка. Не обманывайте неокрепшие умы.

Флеш стирается постранично. А запись происходит гораздо меньшими порциями. У тех же STM32 в зависимости от подсемейства может быть и побайтовая запись, и запись 16-битными словами. Это очень удобно для эмуляции EEPROM, реализации всяческих журналов и т.п.

Это только убогие флеши типа как у LPC требуют записывать гораздо более крупными пачками, потому что каждая пачка защищается кодом коррекции ошибок.

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


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

Это только убогие флеши типа как у LPC требуют записывать гораздо более крупными пачками, потому что каждая пачка защищается кодом коррекции ошибок.

О как! Оказывается, наличие ECC свидетельствует об убогости.

 

Пачка 16 байт всего. Не сказал бы, что это сильно мешает эмулировать EEPROM.

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


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

Это запись в обычную память, вероятность сбоя не больше, чем запись в любую ячейку памяти и уж куда меньше, чем процедура записи во флеш, т.к. там пишет не байтами, а страницами. Если произойдет сбой при записи в память, то потеряете байт или 4 байта, а в случае флеши - всю страницу.

Под "сбоем" я имел в виду сбой питания (или перезагрузку по иной причине: помеха и т.п.).

И вообще это относилось к Вашему подужать до 4кб, и используете встроенные часы с батарейкой, то можно просто писать в backup RAM

Если так сделать, то при любом прерывании записи потеряется вся структура хранения (так как резерва по ёмкости нет).

Будут потеряны все настройки и устройство возможно перестанет функционировать.

Если использовать журнал, с несколькими записями и несколькими минимальными элементами стирания (>=2), то потеряется только последняя структура хранения.

Но всегда будет валидная предыдущая.

И при сбое питания не портится вся страница, только записываемая часть её.

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


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

потому что каждая пачка защищается кодом коррекции ошибок.

Ирония в том, что при эмуляции EEPROM в STM32 я это тоже делаю, но своими ручками.

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


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

Пачка 16 байт всего. Не сказал бы, что это сильно мешает эмулировать EEPROM.

Если в такой флешь хранится журнал, минимальным элементом хранения (запись) которого является структура с настройками устройства,

то такая запись обычно имеет размер десятки байт (или больше). Ничего не мешает её размер подровнять до 16 байт - потери минимальны.

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


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

О как! Оказывается, наличие ECC свидетельствует об убогости.

Именно так. Приблизительно как калека легко распознаётся по наличию костылей. А здоровый человек и без костылей может передвигаться.

 

Ирония в том, что при эмуляции EEPROM в STM32 я это тоже делаю, но своими ручками.

Что, прямо настоящий код, исправляющий ошибки? Или банальная контрольная сумма, как у всех?

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


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

Пачка 16 байт всего. Не сказал бы, что это сильно мешает эмулировать EEPROM.
LPC177x, 178x вроде достаточно свежий? Упоминания про 16 байт в руководстве пользователя не нашел.

Param2: Number of bytes to be written. Should be 256 | 512 | 1024 | 4096.
Нет, я помню про раскрученный много лет назад встроенный загрузчик, и тем не менее 16 байт можно записать только недокументированными методами. Или я что-то неправильно понял?

 

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


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

Именно так. Приблизительно как калека легко распознаётся по наличию костылей. А здоровый человек и без костылей может передвигаться.

То, что выглядит как костыль, совсем не обязательно таковым является.

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


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

То, что выглядит как костыль, совсем не обязательно таковым является.

Конечно, калека может внушить себе, что его костыли - вовсе не костыли, и вообще это классно и модно. Но это его личные проблемы :-)

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


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

LPC177x, 178x вроде достаточно свежий? Упоминания про 16 байт в руководстве пользователя не нашел.

Действительно, у них такого нет. Для LPC11, LPC13 написано явно.

 

Конечно, калека может внушить себе, что его костыли - вовсе не костыли, и вообще это классно и модно. Но это его личные проблемы :-)

То есть серверную технику и всякие поделия на Cortex-R4 с ECC всего и вся записываем в калеки автоматом?

 

Тут уж надо или представлять данные о (не)надежности флеш NXP, или не заниматься домыслами.

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


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

Тут уж надо или представлять данные о (не)надежности флеш NXP, или не заниматься домыслами.

У нас свобода слова, так что извините. Что хочу, то и говорю.

Ну и то, что мнения по этому вопросу у нас отличаются, - тоже не проблема, у нас же разрешён плюрализм мнений :-)

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


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

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

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

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

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

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

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

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

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

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