Каково "стертое" значение ячейки памяти на SDHC-карте?
Я пишу на карту Micro SD (SDHC) для встроенного приложения. Приложение должно иметь возможность очень быстро записывать на карту в режиме реального времени.
Я видел, что предварительное стирание блоков памяти делает запись намного быстрее. К сожалению, я изо всех сил пытаюсь заставить команду стирания (и ACMD23) работать, поскольку драйвер, предоставленный для платы разработки, которую я использую, не завершен.
Есть ли способ стереть карту, возможно, предварительно записав "стертое" значение в блоки памяти? Например, если после стирания блока он становится 0x12345678, могу ли я просто написать это значение вместо него, чтобы стереть его, чтобы обойти с помощью команды стирания? Или есть какой-то другой способ, которым карта помечает блок как стертый?
Спасибо
Я попытался написать 0xffffffff как стертое значение, но это не помогло.
1 ответ
Я думаю, вы неправильно понимаете, как работает флэш-память.
Флэш-память имеет блоки, которые намного больше, чем ожидают типичные файловые системы. Кроме того, они имеют ограниченное количество циклов стирания. Следовательно, контроллер флэш-памяти предоставляет абстракцию, которая отображает виртуальные сектора в физические блоки.
Сектор, который "стирается", вообще не стирается активно. Он просто не сопоставлен, и вместо него отображается пустой блок (если имеется). В фоновом режиме контроллер флэш-памяти перетасовывает сектора вокруг и стирает физические блоки, когда они полностью не используются.
Как видите, качество контроллера вспышки здесь имеет значение. Обычно это даже не проблема с драйверами. Водитель просто посылает команду; флэш-контроллер выполняет их. Если вам нужна лучшая производительность, получите лучшую SD-карту.