Каково "стертое" значение ячейки памяти на SDHC-карте?

Я пишу на карту Micro SD (SDHC) для встроенного приложения. Приложение должно иметь возможность очень быстро записывать на карту в режиме реального времени.

Я видел, что предварительное стирание блоков памяти делает запись намного быстрее. К сожалению, я изо всех сил пытаюсь заставить команду стирания (и ACMD23) работать, поскольку драйвер, предоставленный для платы разработки, которую я использую, не завершен.

Есть ли способ стереть карту, возможно, предварительно записав "стертое" значение в блоки памяти? Например, если после стирания блока он становится 0x12345678, могу ли я просто написать это значение вместо него, чтобы стереть его, чтобы обойти с помощью команды стирания? Или есть какой-то другой способ, которым карта помечает блок как стертый?

Спасибо

Я попытался написать 0xffffffff как стертое значение, но это не помогло.

1 ответ

Решение

Я думаю, вы неправильно понимаете, как работает флэш-память.

Флэш-память имеет блоки, которые намного больше, чем ожидают типичные файловые системы. Кроме того, они имеют ограниченное количество циклов стирания. Следовательно, контроллер флэш-памяти предоставляет абстракцию, которая отображает виртуальные сектора в физические блоки.

Сектор, который "стирается", вообще не стирается активно. Он просто не сопоставлен, и вместо него отображается пустой блок (если имеется). В фоновом режиме контроллер флэш-памяти перетасовывает сектора вокруг и стирает физические блоки, когда они полностью не используются.

Как видите, качество контроллера вспышки здесь имеет значение. Обычно это даже не проблема с драйверами. Водитель просто посылает команду; флэш-контроллер выполняет их. Если вам нужна лучшая производительность, получите лучшую SD-карту.

Другие вопросы по тегам