Цитата(sonycman @ Jul 5 2010, 14:52)

Конечно интересно, опишите пожалуйста

Хорошо.
Используются две структуры:
Код
struct SD_CACHE_ENTRY
{
struct SD_CACHE_ENTRY *next;
unsigned int sec;
unsigned char *data;
};
struct SD_WRITE_BUFFER_ENTRY
{
unsigned int sec;
unsigned char *data;
};
Первая описывает строку кэша, из этих записей формируется односвязный список. Вторая - для буфера записи, сложены в виде массива. Отдельно вводим переменную, указывающую текущее заполнение буфера записи - sd_wbuff_level.
Данные отделены от списка для более эффективной работы кэша самого процессора, для STM32 можно буферы внести в структуру.
При инициализации диска формируется список из SD_CACHE_ENTRY, поля sec заполняются значением SD_CACHE_INVALID_SEC (0xffffffff); переменную sd_wbuff_level устанавливаем в 0.
Число секторов в строке у меня выбрано равным 8.
Чтение:
1. Последовательно проходим по списку, если запрашиваемый сектор находится внутри имеющейся в кэш строки:
1.1. Копируем данные из кэш
1.2. Переставляем строку в начало списка (это нужно для увеличения производительности - редко использующиеся строки будут постепенно падать в конец списка)
2. Если данные в кэш отсутствуют, то:
2.1. Сбрасываем на диск буфер записи (некоторое упрощение, чтобы не искать данные в буфере)
2.2. Читаем с карты строку, заполняя при этом последнюю из записей, по которым ходили в п.1
2.3. Переставляем заполненную строку в начало списка
Запись:
1. Проходим по списку. Если нужная строка найдена, заменяем в ней данные и запоминаем адрес
2. Проходим по буферу записи до уровня sd_wbuff_level, добавляем запись и увеличиваем sd_wbuff_level, если целевой сектор отсутствует
3. При заполнении структуры буфера записи заменяем адрес в SD_WRITE_BUFFER_ENTRY на адрес в кэше, если в п.1 строка была найдена (исключаем лишнее копирование)
Очистка буфера записи:
1. Сортируем записи в буфере по возрастанию номеров блоков
2. Пишем данные с использованием мультиблочной записи
Вот как-то так.
P.S. У меня, правда, файловая система написана в расчете на кэшируемый диск, поэтому не стесняется что-то прочитать или записать, когда надо. Если над этой системой будет надстроена еще одна, то производительность несколько снизится.