Jump to content

    
Sign in to follow this  
jenya7

Запись во FLASH.

Recommended Posts

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this