Jump to content

    

Запись во FLASH.

23 hours ago, Forger said:

у вас семейство F3 :( , а для них действительно не требуется размещение в ОЗУ

Справедливости ради, на большинстве STM (из того, что лично трогал - F1, F2, F4) запись во флеш останавливает всё выполнение из неё. Т.е., если не считать "подвисания" всего камня, никаких проблем нет. Функция записи, как и многочисленные вектора прерываний - во флеше.

И про размер записи. На первых сериях было строго 16 бит за раз (откуда история про выравнивание источника? пофиг же). На F4 есть настройка, сколько писать - 1, 2, или 4 байта.

Share this post


Link to post
Share on other sites
32 минуты назад, KnightIgor сказал:

Я придерживаюсь противоположного мнения: именно флэш ультимативно удобна и надежна для хранения настроек.

Ну да как же - удобна... А ничего что на время стирания/записи этой самой внутренней флешь, устройство неработоспособно? И время такой неработоспособности может достигать нескольких секунд. И чтобы его сконфигурить, нужно остановить его работу. А если это невозможно?

Цитата

- настройки извне надо копировать в ОЗУ, а в микроконтроллерах его,  как правило, ощутимо меньше, чем флэш;

А для записи во внутреннюю флешь на многих МК нужно расположить код записи в ОЗУ. И размер этого кода может быть в разы больше чем этот самый конфиг.

Цитата

- флэш надежнее; если это опровергать, нужно смириться и с тем, что и сама прошитая программа ненадежна, к чему ей тогда настройки вообще, когда она рухнет?

Для надёжности обновления конфига нужно хранить его в двух копиях. С независимым стиранием. Т.е. - в двух секторах стирания флешь. Например на XMC47xx размер такого сектора == 256 КБ. Итого - под кофиг (даже из двух байт всего) придётся отдать 0.5 МБ флеша. Как-то жирновато....

Цитата

Мы проверили, и оказалось, что именно содержимое EEPROM потерялось.

И что? О чём это говорит? Что в том вашем ПО есть баг, из-за которого это содержимое может слетать при определённых условиях?

Share this post


Link to post
Share on other sites
34 минуты назад, KnightIgor сказал:

- требуется ощутимое время на считывание из внешних хранителей.

"Ощутимое" - это сколько? Пара мсек - ощутимо?  ;)

Share this post


Link to post
Share on other sites
12 minutes ago, jcxz said:

Ну да как же - удобна... А ничего что на время стирания/записи этой самой внутренней флешь, устройство неработоспособно? И время такой неработоспособности может достигать нескольких секунд. И чтобы его сконфигурить, нужно остановить его работу. А если это невозможно?

А для записи во внутреннюю флешь на многих МК нужно расположить код записи в ОЗУ. И размер этого кода может быть в разы больше чем этот самый конфиг.

Для надёжности обновления конфига нужно хранить его в двух копиях. С независимым стиранием. Т.е. - в двух секторах стирания флешь. На XMC47xx размер такого сектора == 256 КБ. Итого - под кофиг (даже из двух байт) придётся отдать 0.5 МБ флеша. Как-то жирновато....

И что? О чём это говорит? Что в том вашем ПО есть баг, из-за которого это содержимое может слетать при определённых условиях?

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

 

Код записи в ОЗУ не обязателен, по крайней мере для STM. Для EFM32 - да, но размер кода, что пишет, мал (там буквально пара операций). Размер конфига может быть разный. Например, таблицы подстроек могут быть большими.

 

Если у какого-то процессора проблемы с размером страниц - это его проблемы, и надо применять другие решения. Я ж не спорю. Для STM|EFM таких проблем нет.

 

Если ПО работает 20 лет, багов там нет. Точнее, по закону Мерфи, они там есть ("безошибочное ПО неработоспособно"), но прячутся по углам. Когда EEPROM потеряла содержимое, а модуль перегрузился и не смог загрузить настройки, он встал. PC обнаружило и сообщило. В чем проблема?

 

И не надо начинать Холивары. Я ж никому ничего не навязываю. Не знаю, как на России, но я привык к плюрализму.

Edited by KnightIgor

Share this post


Link to post
Share on other sites
29 minutes ago, KnightIgor said:

- внешние устройства хранения есть дополнительные компоненты, для них нужно место, к ним требуются шины коммуникации, которые занимают пины и могут сбоить;

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

29 minutes ago, KnightIgor said:

подвешивание автоматов I2C EEPROM общеизвестно.

Банальный ногодрыг полностью исключает эту проблему ;)

 

29 minutes ago, KnightIgor said:

- требуется ощутимое время на считывание из внешних хранителей.

Если при старте сначала вычитать данные в ОЗУ, то этой типа "проблемы" тоже нет.

 

29 minutes ago, KnightIgor said:

- настройки извне надо копировать в ОЗУ, а в микроконтроллерах его,  как правило, ощутимо меньше, чем флэш;

Проект, в котором подразумеваются настройки, как правило ни разу не детский, и потому контроллер обычно ставится туда тоже не разу не "детский".

А уж потратить на настройки от силы в сотню байт - ну, прям разорится можно, прям "пойти по миру" :D

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

В таких проектах хороши все решения, в т.ч. и хранение настроек во флэш. Но это, имхо, больше как "костыль" для жадного заказчика )))

 

29 minutes ago, KnightIgor said:

- размещение параметров во флэш позволяет использовать их непосредственно как константы в выражениях кода.

Тоже самое можно сказать и про встроенную EEPROM (например как в семействе STM32L1) ;)

Но даже в таких случаях я сначала вычитываю в ОЗУ все настройки из EEPROM, проверяю контрольную сумму и уже потом работаю с этой копией настроек.

При сохранении настроек переписываются только те настройки, которые изменились, ну и сама контрольная сумма.

Не нужно перетирать весь сектор флэши, поскольку EEPROM позволяет писать по-байтно ;)

 

29 minutes ago, KnightIgor said:

- флэш надежнее; если это опровергать, нужно смириться и с тем, что и сама прошитая программа ненадежна,

В этом мире нет ничего действительно надежного ;)

 

29 minutes ago, KnightIgor said:

 

 когда она рухнет?

У меня и это предусмотрено, но только в серьезных проектах, где это действительно важно ;)

 

 

 

Share this post


Link to post
Share on other sites
9 minutes ago, jcxz said:

"Ощутимое" - это сколько? Пара мсек - ощутимо?  ;)

миллисекунда для процессоров - это вечность! Может для какой задачи и пофиг, но как по мне, иметь константы под рукой в наносекундной досягаемости значительно удобнее, чем молотить протоколы снаружи.

Share this post


Link to post
Share on other sites
5 минут назад, KnightIgor сказал:

Если невозможно остановить, применяйте другие решения. Я ж не заставляю. Для моих разнообразных систем остановка для записи параметров некритична: это настройки, как правило, имеют место быть при вводе в экплуатацию.

Просто Вы написали так, как будто у хранения настроек во внутренней флешь одни только плюсы. А про минусы случайно забыли.  :wink:

5 минут назад, KnightIgor сказал:

Код записи в ОЗУ не обязателен, по крайней мере для STM. Для EFM32 - да, но размер кода, что пишет, мал (там буквально пара операций). Размер конфига может быть разный. Например, таблицы подстроек могут быть большими.

Во всех STM разве flash разделена на 2 независимых банка? Я сам не знаю, но слышал тут говорили что нет. А если банк один, то как стирать?

5 минут назад, KnightIgor сказал:

Если у какого-то процессора проблемы с размером страниц - это его проблемы, и надо применять другие решения. Я ж не спорю. Для STM|EFM таких проблем нет.

ну-ну.... гладко было на бумаге да забыли про овраги.... :biggrin:

Share this post


Link to post
Share on other sites
8 minutes ago, Forger said:

Банальный ногодрыг полностью исключает эту проблему ;)

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

Share this post


Link to post
Share on other sites
7 minutes ago, KnightIgor said:

миллисекунда для процессоров - это вечность! Может для какой задачи и пофиг, но как по мне, иметь константы под рукой в наносекундной досягаемости значительно удобнее, чем молотить протоколы снаружи.

Имхо, тема плавно переросла в обсуждение нюансов известной поговорки: "каждый др...ит, как хочет" :biggrin:

Share this post


Link to post
Share on other sites
5 minutes ago, jcxz said:

Во всех STM разве flash разделена на 2 независимых банка? Я сам не знаю, но слышал тут говорили что нет. А если банк один, то как стирать?

Можно постранично стирать. Размер страниц зависит от общего объема, как правило, и лежит от 512 байт до 2К, может до 4-х для каких-нибудь мегабайтников - не знаю, не работал.

Edited by KnightIgor

Share this post


Link to post
Share on other sites
55 минут назад, KnightIgor сказал:

- размещение параметров во флэш позволяет использовать их непосредственно как константы в выражениях кода.

Здесь воспользуюсь Вашим же приёмом: если STM/EFM не умеет отображать память внешней FLASH на адресное пространство CPU, то это уже его проблемы. :biggrin:

Например многие LPC это умеют.

3 минуты назад, KnightIgor сказал:

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

ну Вы этого не знаете, а многие тут не знают про:

59 минут назад, KnightIgor сказал:

подвешивание автоматов I2C EEPROM общеизвестно

:biggrin:

4 минуты назад, KnightIgor сказал:

Можно постранично стирать. Размер страниц зависит от общего объема, как правило, и лежит от 512 байт до 2К, может до 4-х для каких-нибуть мегабайтников - не знаю, не работал.

ну да - вместе с программой. Или с угрозой потери этих самых настроек при сбое питания.

Share this post


Link to post
Share on other sites
13 minutes ago, jcxz said:

Здесь воспользуюсь Вашим же приёмом: если STM/EFM не умеет отображать память внешней FLASH на адресное пространство CPU, то это уже его проблемы. :biggrin:

Например многие LPC это умеют.

С такими монстрами не работал. Я ж говорю: мне внутренняя память ближе, чем что снаружи. И речь о EEPROM внешней была, а не о какой quad spi flash в десятки мегов. EEPROM не отображается даже Вашими горячо любимыми LPC.

P.S. И, кстати, я никаких "приёмов" в этой дискуссии не применяю: я же не пытаюсь кого-то тут унизить или обманом вовлечь в ряды последователей моих решений. Вы же, коллега, мной замечены в очень бурных реакциях на мнение постеров.

Edited by KnightIgor

Share this post


Link to post
Share on other sites
6 minutes ago, Forger said:

Имхо, тема плавно переросла в обсуждение нюансов известной поговорки: "каждый др...ит, как хочет" :biggrin:

Ага. И застрельщики те же, что и обычно :biggrin:

Share this post


Link to post
Share on other sites
4 minutes ago, jcxz said:

ну Вы этого не знаете, а многие тут не знают про:

"Подвешивание автоматов I2C EEPROM" легко лечится питанием той самой EEPROM от любой свободной ноги МК. Это чтобы уж совсем наверняка ;)

 

Share this post


Link to post
Share on other sites
Just now, scifi said:

Ага. И застрельщики те же, что и обычно :biggrin:

я вообще то ищу решение конкретной проблемы :)  - флаг у вас в руках :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now