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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user