LINUX.ORG.RU

Правда ли что теперь во флеш нельзя затирать битики постепенно?

 ,


0

2

Раньше, когда трава была крепче а деревья мягче, во флешках можно было у каждой ячейки «постепенно» затирать битики, чем я активно пользовался для маркировки «многофазных коммитов». Но тут обнаружилось, что на современных контроллерах это не всегда так. Типа, один раз записал, а дальше кури писю до следующего стирания блока. Пишут, что на самом деле в железке битов больше чем видно, за счет кодов коррекции, и в память пишется совсем не то что что видно снаружи. Как-то я отстал от жизни. Это вообще давно и везде так или только в stm32 выпендрились?

★★★★★
Ответ на: комментарий от i-rinat

Спроси чего попроще. Знаю только что STM32F072CBT8 :). Делал эмулятор EEPROM (стандартный append-only log, чтобы продлить ресурс). На PC, c моками (вместо флешки просто память), тесты прошли, а в реальном железе все мои красивые алгоритмы накрылись нефритовым сосудом. Давно так мощно не промахивался в дизайне :)

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Я тут погуглил, почитал, и понял, что у меня в голове перемешались NOR flash и EEPROM. Я считал, что в NOR flash можно стирать по одной ячейке, а это оказалось не так. И NAND, и NOR стираются страницами.

i-rinat ★★★★★
()

Во многих случаях это так, так как флеш все чаще включает ECC.

И в некоторых случаях не рекомендуется последовательная запись из-за деградации ранее записанного, но это часто можно игнорировать.

alexru ★★★★
()
Ответ на: комментарий от alexru

Так что нужно смотреть на конкретный МК.

alexru ★★★★
()
Ответ на: комментарий от i-rinat

Там дело не в блочном стирании, а в ресурсе перезаписей. На флешках он значительно меньше, чем у EEPROM, поэтому приходится размазывать апдейты на большой блок. Поэтому и называется «эмулятор EEPROM» - позволяет записывать, не ушатывая ресурс слишком быстро.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

поэтому приходится размазывать апдейты на большой блок

Звучит как JFFS2/UBIFS.

i-rinat ★★★★★
()
Ответ на: комментарий от Vit

Перечитал начальный пост. Ну да, если они упоминают ECC, то нельзя записывать побитно. Данные пишутся напрямую, но к ним добавляют ECC, так что при записи новых битов ECC тоже новый запишется, что образует кашу. Так везде, так как большие объемы флеша требуют более мелких тех. процессов.

alexru ★★★★
()
Ответ на: комментарий от alexru

Хорошие новости в том, что реальный ресурс флеша значительно больше чем указано. Он указывается с огромным запасом с учетом работы во всем диапазоне температур и напряжений и удержанием данных 20 лет после записи.

alexru ★★★★
()
Ответ на: комментарий от alexru

Там как-то очень неявно упоминается.

Сначала на stm32f0 дебагер показал что с записью жопа, стали искать, нашли только в даташите на stm32f1, что перезаписывать можно только целиков в ноль, иначе ошибка. Потом еще на ST-шном форуме кто-то плакался про L0, что даже при перезаписи поверху FFFF FFFF тем же самым числом биты дырявились.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Если упоминается совсем, то даже думать не надо.

Но в F0 нет ECC. В RM написано «The main Flash memory can be programmed 16 bits at a time.» Но это ограничение контроллера, а не самого массива. Он определяет, что память уже запрограммирована и бросает ошибку.

У ST так было всегда и везеде на 32-бит.

alexru ★★★★
()

А что значит затирать? Стиранием меньше страницы не снести, а занулить битик по идее можно. Просто записать значение, где не установлен желаемый бит. В stm32 у разных кортексов вроде разная флешка, кстати. Сказанное актуально для 103-ей (M3).

Slavik763
()

Я не шарю, как тебе идея припаять внешний NAND без ECC, Илон Маск?

aspotashev ★★★
()
Последнее исправление: aspotashev (всего исправлений: 1)
Ответ на: комментарий от alexru

Пес его знает, в чем именно причина. В общем, я переписал логику транзакций, и все заработало. Правда одна запись теперь 8 байт вместо 6 занимает, но пофик.

Vit ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.