feat: sync current parallel NAND implementation from templates
This commit is contained in:
24
README.md
24
README.md
@@ -76,10 +76,28 @@ void memory_init(void)
|
||||
[docs/MEMORY_GAS.md](docs/MEMORY_GAS.md). Электрические соединения — в README
|
||||
соответствующего порта и [docs/EMPTY_BOARD_PINOUT.md](docs/EMPTY_BOARD_PINOUT.md).
|
||||
|
||||
## PROGRAM и ERASE
|
||||
|
||||
- `parallel_nand_program_page()` записывает полную main-область и, при
|
||||
необходимости, полную OOB-область страницы.
|
||||
- `parallel_nand_erase_block()` стирает один физический блок.
|
||||
- Перед изменением ядро проверяет заводской bad-block marker, на время операции
|
||||
снимает `WP#`, ждёт `R/B#`, проверяет fail-бит статуса и снова включает
|
||||
защиту при любом результате.
|
||||
- Порт обязан объявить `write_supported = 1`; иначе возвращается
|
||||
`PNAND_ERROR_WRITE_PROTECTED`. Это защищает платы, где `WP#` постоянно
|
||||
соединён с GND.
|
||||
- Через GAS разрушительные команды требуют записи `0xA55A` в `CONFIRM`
|
||||
непосредственно перед `PROGRAM_PAGE` или `ERASE_BLOCK`.
|
||||
|
||||
NAND можно программировать только из `1` в `0`; для повторной записи сначала
|
||||
стирается весь блок. Не стирайте заводские bad-блоки и не используйте raw-запись
|
||||
как файловую систему без ECC, wear leveling и защиты загрузочных блоков.
|
||||
|
||||
## Текущие границы
|
||||
|
||||
- Реализовано безопасное чтение, RESET, READ ID, STATUS и bad-block marker.
|
||||
- PROGRAM/ERASE намеренно отсутствуют; ядро включает аппаратную защиту `WP#`.
|
||||
- Реализованы чтение, программирование страницы, стирание блока, RESET,
|
||||
READ ID, STATUS и проверка bad-block marker.
|
||||
- ECC пока не исправляет данные. GUI получает физические main/OOB и должен
|
||||
помечать дамп как raw.
|
||||
- В полном дампе bad-блоки не пропускаются: сохраняется физический порядок.
|
||||
@@ -95,3 +113,5 @@ void memory_init(void)
|
||||
5. Записать номер страницы в `0xE005/0xE006`, затем `3` в `0xE004`.
|
||||
6. Дождаться `READY | PAGE_VALID` в `0xE002`.
|
||||
7. Прочитать main из `0xE100..0xE4FF`, OOB из `0xE500..0xE51F`.
|
||||
8. PROGRAM/ERASE проверять только на заведомо расходном блоке после сохранения
|
||||
полного raw-дампа.
|
||||
|
||||
Reference in New Issue
Block a user