Приветствую всех! Вопрос следующий у SD карт есть такой параметр как блок стирания. И размер этого блока (пробовал на двух 1гиговых картах) у одной 32 другой 64 КБ. Правильно ли я понимаю что при записи командами CMD24 или CMD25 карта предварительно стирает сектора в которые будет идти запись но так как у нее блок стирания например 64 килобайта то она стирает все 128 секторов (пусть сектор 512 байт) и не меньше. С того адреса который в качестве аргумента отправлен с командой CMD24/25 даже если пишется один сектор или несколько но их количество например 20 (некий блок по 10240 байт).
Тогда если я буду писать через fatfs файлы на такой карте. Может ли получится следующая ситуация. Файл существует он открывается для дозаписи в него. На уровне fatfs единица измерения уже кластер и пусть например этот кластер 16 КВ. Далее я вызываю f_write c количеством байт 10240. Внутри вызывается disk_write из которой вызывается уже моя реализация SD_MultiBlockWrite() и там предварительно стираются сектора на карте для ускорения процесса записи командой ACMD23. И вот карта стирает не только те сектора которые я запросил (10240 байт) не только тот кластер в который будет дописываться но и соседние следующие 3 кластера ( если кластер 16 КБ а блок очистки 64КБ ) Но ведь следующие соседние кластеры могут принадлежать другому файлу. Про это fatfs известно но самой то карте нет. Она чистит с заданного адреса +64КБ.
Или файлы пишутся не впритык и между ними есть несколько кластеров некая прослойка куда ничто не пишется. И при стирании картой своего блока стиралась бы эта прослойка и не затрагивались соседние файлы.
Если это так то подскажите кто как реализовывал. Слышал что нужно писать большими блоками но контроллер у меня stm32f103 там 20КБ ОЗУ но даже 16 не получится выделить под буфер для записи на карту.