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`. Остальные точки входа таблицы — заглушки (не используются
|
`SEEK0`. Остальные точки входа таблицы — заглушки (не используются
|
||||||
ZiFi).
|
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
|
Драйвер загружается в физическую страницу `#0F`, отображается в CPU
|
||||||
|
|||||||
Reference in New Issue
Block a user