Jump to content

    
Alex_Golubev

STM32h743 стирание данных из флешь

Recommended Posts

Поправите меня если не прав.

Читал reference manual и как понял стирается перед записью только сектор размером 128 кБайт. Если мне надо записать кластер размером 4096 байт то мне нужно сначала удалить 128 кбайт только потом записать 4096 байт, как-то неправильно мне кажется. В ранних сериях были размеры куда меньше. 

Share this post


Link to post
Share on other sites

Ну я RM не смотрел.
Но Flash стирается страницами (page).
У разных контроллеров разная гранулярность страниц.
Так что, если в вашем МК страница 128кБ, то да, стирается сразу 128кБ.

Share this post


Link to post
Share on other sites
1 hour ago, Alex_Golubev said:

Поправите меня если не прав.

Читал reference manual и как понял стирается перед записью только сектор размером 128 кБайт. Если мне надо записать кластер размером 4096 байт то мне нужно сначала удалить 128 кбайт только потом записать 4096 байт, как-то неправильно мне кажется. В ранних сериях были размеры куда меньше. 

Все верно, стирается только по 128 кБайт.

Share this post


Link to post
Share on other sites
1 hour ago, Alex_Golubev said:

как-то неправильно мне кажется

Конечно неправильно. Напишите претензию в ST - пусть они для Вас сделают страницу в 4096. И построже с ними. А то делают черти что.

Share this post


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

Есть что-то типа обновление байта без стирания сектора в stm32h743 ?

Да. Прочитать и посмотреть какие единички можно изменить на нолики.

Share this post


Link to post
Share on other sites
22 minutes ago, Alex_Golubev said:

Так не интересно, не все единичке можно заменить на нолики.

Не пытаетесь ли вы использовать внутренню флешку для хранения данных? Тогда да, наверное проблема, потому что найти 128 кБ ОЗУ, чтобы вычитать сектор, стереть его, изменить некоторые данные и записать назад - не так просто. Может быть подумаете о внешенй SPIFI NOR? Типа n25q128 какой-нить? Они и на обычном SPI могут работать.

Share this post


Link to post
Share on other sites

Да вы правы я хочу использовать внутреннею флешь для записи данных. Которые могут меняться со временем. И да нужно куда-то резервировать данные из флешки. Внешнею ставить не хочу. Может есть какой режим для модификации данных без стирания. 

Share this post


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

Может есть какой режим для модификации данных без стирания. 

Да какой же режим, это же физика) Ну невозможно вернуть единички только в определённуй байт FLASH-памяти. Её нужно стереть куском, в который входит N байт. Точно не помню, как это работает, но почитайте как устроена эта память. Поэтому, в вашем случае только внешняя NOR, NAND или EEPROM. Смотря, сколько вам данных нужно хранить, и как часто их модифицировать.

Share this post


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

Может есть какой режим для модификации данных без стирания. 

Если бы он был, он был бы описан.

Выделяйте один сектор целиком под ваши данные. Пишите новые данные рядом со старыми, когда заполните весь сектор - стирайте его и пишите новые данные опять с начала сектора. Ну и сами придумывайте варианты поиска последнего записанного блока и проверки коректности его записи. У ST есть пример применения, назывался примерно как "эмуляция ЭСПЗУ (EEPROM) во флеше контроллеров STM32", поищите у них на сайте. Не скажу, что описанное там решение идеально, но какие-то идеи взять оттуда можно.

Share this post


Link to post
Share on other sites

Во! В тему:

1. Ссыль раз.

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

Share this post


Link to post
Share on other sites
1 час назад, haker_fox сказал:

Не пытаетесь ли вы использовать внутренню флешку для хранения данных? Тогда да, наверное проблема, потому что найти 128 кБ ОЗУ, чтобы вычитать сектор, стереть его, изменить некоторые данные и записать назад

128кБ ОЗУ нужно только если совсем фантазии нет. :wink:

А если зарезервировать 2 сектора flash и хранить в них кольцевой буфер из записей, то никаких 128кБ ОЗУ не нужно. Нужно изменить данные? Читаем запись, модифицируем её и пишем обратно в кольцо. ОЗУ нужно только == размеру записи.

PS: Сколько уж раз обсуждали способы хранения во флешь в кольце и опять по-новой.... :russian_ru:

2 часа назад, HardEgor сказал:

Да. Прочитать и посмотреть какие единички можно изменить на нолики.

Скорее всего так не получится, потому как flash программ МК как правило имеет ECC-защиту с дискретностью в несколько байт (например ==16). И изменить данные меньше этой дискретности не затронув остальные будет невозможно.

Так что: делаем кольцевой буфер из записей кратных по размеру блоку ECC-защиты и работаем с кольцом.

Share this post


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

128кБ ОЗУ нужно только если совсем фантазии нет:wink:

Закончилась сегодня:angel:

7 minutes ago, jcxz said:

PS: Сколько уж раз обсуждали способы хранения во флешь в кольце и опять по-новой.... 

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

Share this post


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

Скорее всего так не получится, потому как flash программ МК как правило имеет ECC-защиту с дискретностью в несколько байт (например ==16). И изменить данные меньше этой дискретности не затронув остальные будет невозможно.

Так что: делаем кольцевой буфер из записей кратных по размеру блоку ECC-защиты и работаем с кольцом.

Да ладно, надо же человеку чем-то заняться, а вы ему в лоб сразу решением :)

У stm32h7 64-битный блок.

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.