NAND-флеш-память
Флеш-память бывает двух архитектур — NOR и NAND. Микроконтроллер хранит программу в NOR: её можно читать по любому адресу и выполнять код прямо из неё. NAND дешевле в пересчёте на бит и пишется быстрее, но требует от программы управлять плохими блоками и ошибками.
Обновлено Редакция GAW
NAND-флеш — архитектура флеш-памяти, в которой ячейки соединены последовательными цепочками, а чтение и запись идут целыми страницами. Её противоположность — NOR-флеш с произвольным доступом к любому байту. Микроконтроллеры хранят программу во встроенной NOR-памяти или во внешней микросхеме SPI-флеш — это тоже NOR. NAND берут, когда нужен объём для данных: журналов, файловой системы, звука, изображений.
Как устроена NAND на примере W25N01GV
По даташиту Winbond W25N01GV (разд. 1 и 7), микросхема на 1 Гбит состоит из 1 024 блоков по 64 страницы. Страница — 2 048 байт данных и 64 байта запасной области, всего 2 112 байт. Чтение идёт в два шага: команда Page Data Read (13h) переносит страницу из массива во внутренний буфер, затем данные читают из буфера по SPI. Запись — тоже через буфер, целой страницей. Стирание — только блоком 128 КБ.
| NOR, W25Q128JV | NAND, W25N01GV | |
|---|---|---|
| Единица чтения | любой байт | страница 2 048 + 64 байта через буфер |
| Единица программирования | от 1 до 256 байт | страница, до 4 частичных записей |
| Наименьшее стирание | сектор 4 КБ | блок 128 КБ |
| Время программирования | 0,4 мс тип. на страницу 256 байт | 250 мкс тип. на страницу 2 048 байт |
| Время стирания | 45 мс тип. на сектор | 2 мс тип. на блок |
| Выполнение кода на месте | да, XIP | нет |
| Плохие блоки с завода | нет | до 2 % |
| Ресурс | 100 000 циклов на сектор | 100 000 циклов при работе ECC |
Из таблицы видно, за что выбирают NAND: на страницу в восемь раз больше и стирание блока в двадцать с лишним раз быстрее сектора NOR (своё сравнение типовых значений по двум даташитам). Цена — более сложное обращение.
Чего требует NAND от программы
- Учёт плохих блоков. Winbond допускает до 2 % плохих блоков при поставке — у W25N01GV до 20. Метка — байт, отличный от FFh, в байте 0 страницы 0 блока и в первом байте запасной области (разд. 8.2.7). Перед первой записью память сканируют, а метки не стирают, иначе информация потеряется. У W25N01GV есть таблица подмены блоков (BBM LUT) на 20 связей «логический блок → физический», но заполняет её хост: найдя плохой блок, программа сама записывает пару адресов командой Bad Block Management (A1h), после чего микросхема перенаправляет обращения; когда все 20 связей заняты, ставится бит LUT-F (разд. 7.3.1, 8.2.7).
- Коррекция ошибок. Встроенная ECC микросхемы включена после подачи питания и исправляет ошибки при чтении; биты состояния ECC проверяют после каждого чтения. Ресурс 100 000 циклов в даташите указан именно при работе ECC.
- Порядок записи. Страницы внутри блока программируют строго по возрастанию адреса, одну страницу — не больше четырёх раз частями (разд. 8.2.13).
- Распределение износа. Поверх блоков работает файловая система или слой выравнивания износа, который не даёт стирать одни и те же блоки.
Для выполнения кода прямо из внешней памяти NAND не подходит: его копируют в ОЗУ. Выполнение на месте — свойство NOR-флеш, подробнее в терминах XIP и QSPI.
Частые вопросы
Чем NAND отличается от NOR?
Способом доступа и единицей записи. NOR вроде W25Q128JV читается с любого адреса и годится для выполнения кода прямо из памяти, программируется порциями от 1 байта и стирается секторами по 4 КБ. NAND вроде W25N01GV читается и пишется только целыми страницами по 2 048 байт через внутренний буфер, стирается блоками по 128 КБ, приходит с завода с плохими блоками и полагается на ECC.
Что такое плохие блоки NAND?
Блоки, которые не прошли заводской контроль или вышли из строя в работе. Winbond допускает у W25N01GV до 2 % плохих блоков при поставке, то есть до 20 из 1 024. Такой блок помечен байтом, отличным от FFh, в байте 0 страницы 0 и в начале запасной области. Перед первой записью память сканируют и составляют таблицу плохих блоков; стирать метки нельзя.
Можно ли выполнять программу прямо из NAND?
Нет, NAND читается целыми страницами через буфер: у W25N01GV команда Page Data Read переносит страницу в буфер за 25–60 мкс, и только потом данные выходят на шину. Поэтому код из NAND сначала копируют в ОЗУ. Для выполнения на месте (XIP) берут NOR-флеш, у которой чтение идёт с любого адреса.
Источники
- Winbond. W25N01GVxxIG/IT 3V 1G-bit Serial SLC NAND Flash Memory with Dual/Quad SPI, Revision L, May 09, 2018 — разд. 1: 65 536 страниц по 2 048 байт, программирование целой страницы из внутреннего буфера 2 048 байт, стирание группами по 64 страницы (блок 128 КБ), 1 024 стираемых блока; разд. 2: более 100 000 циклов стирания/программирования (сноска 4: при использовании встроенной ECC или ECC 1 бит на 528 байт), хранение данных более 10 лет, встроенная ECC 1 бит; разд. 7: буфер 2 112 байт (2 048 + 64 запасных), ECC-E включена после подачи питания; разд. 7.3.1: таблица BBM на 20 блоков; разд. 8.2.7: до 2 % блоков, то есть до 20, могут быть плохими при поставке, метка — байт не FFh в байте 0 страницы 0 и в первом байте запасной области; разд. 8.2.13: не больше 4 частичных программирований страницы, страницы блока программируются строго по порядку; разд. 8.2.14: Page Data Read (13h) переносит страницу в буфер за tRD; разд. 9.6: tRD 25 мкс без ECC и 60 мкс с ECC, tPP 250 мкс тип. и 700 мкс макс., tBE 2 мс тип. и 10 мс макс.
- Winbond. W25Q128JV 3V 128M-bit Serial Flash Memory with Dual/Quad SPI, Revision F, March 27, 2018 — разд. 1: 65 536 страниц по 256 байт, программирование от 1 до 256 байт, стирание секторами 4 КБ, блоками 32 и 64 КБ или целиком, выполнение кода прямо из флеш (XIP); разд. 2: не меньше 100 000 циклов на сектор, хранение данных более 20 лет; разд. 9.6: tPP 0,4 мс тип. и 3 мс макс., tSE 45 мс тип. и 400 мс макс.
Нашли ошибку?
Смотрите также
- SPI-флеш-памятьВыводы, страницы и секторы, команды, статус BUSY, время записи и стирания
- Сектор и страница флеш-памятиНаименьшая стираемая область флеш: страницы STM32F1, секторы STM32F4, W25Q
- Выравнивание износаКак распределяют стирания по секторам флеш: ESP-IDF, littlefs, NAND
- XIP (execute in place)Выполнение кода из внешней флеш через кэш: устройство, кэш, скорость
- QSPISPI с четырьмя линиями данных для флеш-памяти и PSRAM