Alex_Golubev 0 14 октября, 2020 Опубликовано 14 октября, 2020 · Жалоба Поправите меня если не прав. Читал reference manual и как понял стирается перед записью только сектор размером 128 кБайт. Если мне надо записать кластер размером 4096 байт то мне нужно сначала удалить 128 кбайт только потом записать 4096 байт, как-то неправильно мне кажется. В ранних сериях были размеры куда меньше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 129 14 октября, 2020 Опубликовано 14 октября, 2020 · Жалоба Ну я RM не смотрел. Но Flash стирается страницами (page). У разных контроллеров разная гранулярность страниц. Так что, если в вашем МК страница 128кБ, то да, стирается сразу 128кБ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 14 октября, 2020 Опубликовано 14 октября, 2020 · Жалоба 1 hour ago, Alex_Golubev said: Поправите меня если не прав. Читал reference manual и как понял стирается перед записью только сектор размером 128 кБайт. Если мне надо записать кластер размером 4096 байт то мне нужно сначала удалить 128 кбайт только потом записать 4096 байт, как-то неправильно мне кажется. В ранних сериях были размеры куда меньше. Все верно, стирается только по 128 кБайт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 32 14 октября, 2020 Опубликовано 14 октября, 2020 · Жалоба 1 hour ago, Alex_Golubev said: как-то неправильно мне кажется Конечно неправильно. Напишите претензию в ST - пусть они для Вас сделают страницу в 4096. И построже с ними. А то делают черти что. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба Есть что-то типа обновление байта без стирания сектора в stm32h743 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 56 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 58 минут назад, Alex_Golubev сказал: Есть что-то типа обновление байта без стирания сектора в stm32h743 ? Да. Прочитать и посмотреть какие единички можно изменить на нолики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба Так не интересно, не все единичке можно заменить на нолики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 59 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 22 minutes ago, Alex_Golubev said: Так не интересно, не все единичке можно заменить на нолики. Не пытаетесь ли вы использовать внутренню флешку для хранения данных? Тогда да, наверное проблема, потому что найти 128 кБ ОЗУ, чтобы вычитать сектор, стереть его, изменить некоторые данные и записать назад - не так просто. Может быть подумаете о внешенй SPIFI NOR? Типа n25q128 какой-нить? Они и на обычном SPI могут работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба Да вы правы я хочу использовать внутреннею флешь для записи данных. Которые могут меняться со временем. И да нужно куда-то резервировать данные из флешки. Внешнею ставить не хочу. Может есть какой режим для модификации данных без стирания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 59 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 7 minutes ago, Alex_Golubev said: Может есть какой режим для модификации данных без стирания. Да какой же режим, это же физика) Ну невозможно вернуть единички только в определённуй байт FLASH-памяти. Её нужно стереть куском, в который входит N байт. Точно не помню, как это работает, но почитайте как устроена эта память. Поэтому, в вашем случае только внешняя NOR, NAND или EEPROM. Смотря, сколько вам данных нужно хранить, и как часто их модифицировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 10 минут назад, Alex_Golubev сказал: Может есть какой режим для модификации данных без стирания. Если бы он был, он был бы описан. Выделяйте один сектор целиком под ваши данные. Пишите новые данные рядом со старыми, когда заполните весь сектор - стирайте его и пишите новые данные опять с начала сектора. Ну и сами придумывайте варианты поиска последнего записанного блока и проверки коректности его записи. У ST есть пример применения, назывался примерно как "эмуляция ЭСПЗУ (EEPROM) во флеше контроллеров STM32", поищите у них на сайте. Не скажу, что описанное там решение идеально, но какие-то идеи взять оттуда можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 59 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба Во! В тему: 1. Ссыль раз. 2. Вторую ссыль не могу найти. Но там тоже было про организацию отказоустойчивого хранения данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 1 час назад, haker_fox сказал: Не пытаетесь ли вы использовать внутренню флешку для хранения данных? Тогда да, наверное проблема, потому что найти 128 кБ ОЗУ, чтобы вычитать сектор, стереть его, изменить некоторые данные и записать назад 128кБ ОЗУ нужно только если совсем фантазии нет. А если зарезервировать 2 сектора flash и хранить в них кольцевой буфер из записей, то никаких 128кБ ОЗУ не нужно. Нужно изменить данные? Читаем запись, модифицируем её и пишем обратно в кольцо. ОЗУ нужно только == размеру записи. PS: Сколько уж раз обсуждали способы хранения во флешь в кольце и опять по-новой.... 2 часа назад, HardEgor сказал: Да. Прочитать и посмотреть какие единички можно изменить на нолики. Скорее всего так не получится, потому как flash программ МК как правило имеет ECC-защиту с дискретностью в несколько байт (например ==16). И изменить данные меньше этой дискретности не затронув остальные будет невозможно. Так что: делаем кольцевой буфер из записей кратных по размеру блоку ECC-защиты и работаем с кольцом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 59 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 6 minutes ago, jcxz said: 128кБ ОЗУ нужно только если совсем фантазии нет. Закончилась сегодня 7 minutes ago, jcxz said: PS: Сколько уж раз обсуждали способы хранения во флешь в кольце и опять по-новой.... Ну я их не использую, поэтому забываю нюансы. Но ссылку на статью я автору дал. Да и сам он уже наверное выполнил гуглом поиск по форуму, нашёл 100500 этих тем и теперь читает и анализирует. Я обычно для себя таки делаю: ищу все доступные материалы сначала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 56 15 октября, 2020 Опубликовано 15 октября, 2020 · Жалоба 6 минут назад, jcxz сказал: Скорее всего так не получится, потому как flash программ МК как правило имеет ECC-защиту с дискретностью в несколько байт (например ==16). И изменить данные меньше этой дискретности не затронув остальные будет невозможно. Так что: делаем кольцевой буфер из записей кратных по размеру блоку ECC-защиты и работаем с кольцом. Да ладно, надо же человеку чем-то заняться, а вы ему в лоб сразу решением :) У stm32h7 64-битный блок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться