Перейти к содержанию

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, W25Q128JVNAND, 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-флеш, у которой чтение идёт с любого адреса.

Источники

  1. 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 мс макс.
  2. 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 мс макс.

Нашли ошибку?