Цитата(_4afc_ @ Dec 16 2010, 14:24)

Поподробнее порядок действий опишите. Как вы одновременно работаете в Windows и микроконтроллером? Windows какой?
Есть мой девайс с подключенным разъемом SD. Вставляю карту в него и выполняю все вышеописанные операции форматирования и записи. Вставляю затем эсдшку в картридер и удаляю некоторые файлы. Windows XP (если форматировать с ее помощью - то карта форматируется как дискета, без MBR). На карте FAT32.
Цитата
Что делает функция f_getfree? Считывает всю FAT таблицу и пробегая по ней суммирует все свободные кластеры? Обе таблицы?
Вызывает chk_mount, а та в свою очередь вычитывает fsi сектор (его адрес находит в PBR, кажется) и по внутреннему полю этого сектора определяет количество свободных кластеров:
Код
/* Get fsinfo if available */
if (fmt == FS_FAT32) {
fs->fsi_flag = 0;
fs->fsi_sector = bsect + LD_WORD(fs->win+BPB_FSInfo);
if (disk_read(fs->drv, fs->win, fs->fsi_sector, 1) == RES_OK &&
LD_WORD(fs->win+BS_55AA) == 0xAA55 &&
LD_DWORD(fs->win+FSI_LeadSig) == 0x41615252 &&
LD_DWORD(fs->win+FSI_StrucSig) == 0x61417272) {
fs->last_clust = LD_DWORD(fs->win+FSI_Nxt_Free);
fs->free_clust = LD_DWORD(fs->win+FSI_Free_Count);
}
}
Я подозреваю, конечно, что Windows это делает по другому, но как не знаю. Если можно расскажите, как делать правильно.