Document zc_sd_driver's feature set beyond the bare CORE ABI

MBR/partition detection, SDSC/SDHC/SDXC auto-addressing, LBA range
guard, BPB/FAT32 validation, FAT mirroring, free-cluster search with
FSInfo hint, LFN support, RTC-based real date/time stamping, and
multi-cluster streaming read/write.
This commit is contained in:
2026-09-10 11:19:17 +03:00
parent bade87a094
commit c466013e69
+30
View File
@@ -23,6 +23,36 @@
`SEEK0`. Остальные точки входа таблицы — заглушки (не используются
ZiFi).
## Что реализовано сверх голого CORE ABI
- **MBR/раздел**: автоматически определяет, есть ли на карте
партиция (тип `0x0B`/`0x0C`), или BPB лежит прямо в LBA0; смещение
партиции (`ADDTOP`) прибавляется ко всем последующим LBA.
- **SDSC/SDHC/SDXC**: сама определяет байтовую или блочную адресацию
по биту CCS из CMD8/ACMD41/CMD58, а не считает её заранее известной.
- **Защита от выхода за границу LBA**: перед любым чтением сверяет
номер сектора с реальным размером тома (посчитанным из BPB) —
ошибка в арифметике не уйдёт в CMD17/25 как заведомо неверный адрес.
- **Проверка BPB/FAT32**: сигнатура `55 AA`, `BytesPerSector==512`,
`FATSz16==0`, `RootEntryCount==0`, `SectorsPerCluster` — степень
двойки, прежде чем доверять остальным полям.
- **Зеркалирование FAT**: запись FAT-записи дублируется во все копии
(`NumFATs`), не только в первую.
- **Поиск свободного кластера**: сессионный кэш "куда искать дальше"
плюс чтение/запись `FSInfo`-подсказки (`FSI_Nxt_Free`) — не
пересканирует FAT с кластера 2 при каждой аллокации на разделах с
большим количеством уже занятых кластеров.
- **Длинные имена (LFN)**: генерация уникального короткого имени 8.3
с суффиксом `~N` при коллизии, полноценные LFN-записи для
MKFILE/MKDIR.
- **Дата/время создания**: читает реальные RTC (DS1685-совместимые,
порты `#EFF7`/`#DFF7`/`#BFF7`) и проставляет их в создаваемые
записи каталога вместо фиксированной заглушки.
- **Многокластерные файлы/каталоги**: потоковое чтение и запись
(`stream_open`/`stream_read_sector`/`stream_write_sector`) следует
цепочке FAT и доращивает её по мере необходимости — не ограничено
одним кластером.
## Адресация
Драйвер загружается в физическую страницу `#0F`, отображается в CPU