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

SPI-флеш-память на примере W25Q128 и GD25Q128

Микросхемы SPI-флеш серии 25 — W25Q от Winbond, GD25Q от GigaDevice и их аналоги — хранят прошивки, шрифты, звук и журналы данных. Разбираем по даташитам W25Q128JV и GD25Q128E, как они подключаются, как устроена память, какими командами её читают, программируют и стирают и сколько это занимает времени.

Обновлено Редакция GAW

SPI-флеш — последовательная NOR-флеш-память с интерфейсом SPI. Микросхемы серии 25 выпускают многие производители: W25Q у Winbond, GD25Q у GigaDevice и другие. Внутри — массив флеш-ячеек и логика, которая принимает команды по SPI, а снаружи в корпусах SOIC и WSON всего восемь выводов. Ниже — по даташитам 128-мегабитных W25Q128JV и GD25Q128E; микросхемы другого объёма и других производителей устроены похоже, но таблицы команд и тайминги перед использованием сверяют с их даташитами.

Выводы и подключение

W25Q128JV и GD25Q128E питаются от 2,7 до 3,6 В, то есть подключаются к микроконтроллеру с логикой 3,3 В. В 8-выводных корпусах SOIC и WSON назначение выводов одинаковое:

ВыводW25Q128JVНазначение
1/CSвыбор микросхемы, активен низкий уровень
2DO (IO1)выход данных
3/WP (IO2)защита от записи, активен низкий уровень
4GNDобщий
5DI (IO0)вход данных
6CLKтактовый сигнал
7/HOLD или /RESET (IO3)пауза обмена или сброс
8VCCпитание

Микросхема работает в режимах SPI 0 и 3 — при неактивной линии /CS сигнал CLK может быть и низким, и высоким. Данные передаются старшим битом вперёд, команда начинается со спада /CS и заканчивается его фронтом (W25Q128JV, 6.1 и 8). В режимах Dual и Quad SPI выводы DI и DO, а в Quad — ещё /WP и /HOLD превращаются в двунаправленные линии IO0–IO3. У W25Q128JV в исполнениях IQ и JQ бит QE установлен на заводе, режим Quad включён, и функции /HOLD нет — вывод 7 работает как IO3 (W25Q128JV, 7.1.4).

Как устроена память

W25Q128JV — 128 Мбит, то есть 16 МБ. Массив разделён так (W25Q128JV, разд. 1):

ЕдиницаРазмерСколько ихОперация
Страница256 байт65 536программирование, команда 02h
Сектор4 КБ (16 страниц)4096стирание, 20h
Блок32 КБ512стирание, 52h
Блок64 КБ256стирание, D8h
Вся микросхема16 МБ1стирание, C7h или 60h

Главное правило флеш-памяти: программирование только сбрасывает биты из 1 в 0, а вернуть их в 1 может только стирание, которое заполняет сектор, блок или всю микросхему байтами FFh. Поэтому перед записью сектор стирают, а за один раз программируют от 1 до 256 байт в пределах одной страницы. Если передать больше, чем осталось до конца страницы, адрес вернётся к её началу и перезапишет только что переданные байты (W25Q128JV, 8.2.13). Адрес передаётся тремя байтами: A23–A16, A15–A8, A7–A0.

Команды

Основные команды одинаковы у W25Q128JV и GD25Q128E (W25Q128JV, таблицы 8.1.2 и 8.1.3; GD25Q128E, разд. 7):

КомандаКодЧто передаётся после кода
Разрешение записи (Write Enable)06h—
Запрет записи04h—
Чтение регистров состояния 1, 2, 305h, 35h, 15hмикросхема выдаёт регистр
Запись регистров состояния 1, 2, 301h, 31h, 11hзначение регистра
Чтение данных03hадрес, затем данные подряд
Быстрое чтение (Fast Read)0Bhадрес, один пустой байт, данные
Чтение по двум и четырём линиям3Bh, 6Bh, BBh, EBhадрес, пустые такты, данные
Программирование страницы02hадрес, 1–256 байт данных
Программирование страницы по четырём линиям32hадрес, данные по IO0–IO3
Стирание сектора 4 КБ20hадрес
Стирание блока 32 КБ и 64 КБ52h, D8hадрес
Стирание всей микросхемыC7h или 60h—
Идентификатор JEDEC9Fhмикросхема выдаёт 3 байта
Уникальный номер4Bh4 пустых байта, номер
Таблица параметров SFDP5Ahадрес, пустой байт, данные
Пауза и продолжение записи или стирания75h, 7Ah—
Сон и выход из снаB9h, ABh—
Программный сброс66h, затем 99h—

Команда 03h работает только на пониженной частоте: у W25Q128JV — до 50 МГц, у GD25Q128E — до 80 МГц. Остальные команды чтения допускают до 133 МГц при питании 3,0–3,6 В; за это 0Bh требует один пустой байт между адресом и данными (W25Q128JV, 8.2.7 и 9.6; GD25Q128E, 8.6). Последовательность кадра SPI с командой, адресом и данными можно разложить по тактам в конструкторе кадра SPI.

Идентификатор

Команда 9Fh — первое, что стоит отправить новой микросхеме: в ответ приходят код производителя и два байта типа и объёма.

МикросхемаОтвет на 9Fh
W25Q128JV-IQ, JQEFh 40h 18h
W25Q128JV-IM, JMEFh 70h 18h
GD25Q128EC8h 40h 18h

Если вместо этого приходят 00h или FFh, микросхема не отвечает: проверяют питание, линию /CS, режим SPI и то, не перепутаны ли DI и DO.

Запись и стирание

Перед каждым программированием, стиранием и записью регистров состояния нужна команда 06h: она устанавливает бит WEL (S1) регистра состояния 1, а сама операция его сбрасывает. Пока микросхема программирует или стирает, бит BUSY (S0) равен 1 и она игнорирует все команды, кроме чтения состояния и паузы 75h (W25Q128JV, 7.1.1 и 7.1.2). Поэтому запись данных выглядит так:

  1. 06h — разрешить запись.
  2. 20h и три байта адреса — стереть сектор 4 КБ.
  3. Читать регистр состояния командой 05h, пока бит BUSY не станет 0.
  4. 06h — снова разрешить запись.
  5. 02h, три байта адреса и до 256 байт данных — запрограммировать страницу.
  6. Ждать сброса BUSY так же, как после стирания.

Сколько это занимает (W25Q128JV, 9.6; GD25Q128E, 8.6, исполнения на −40…85 °C):

ОперацияW25Q128JV, тип. / макс.GD25Q128E, тип. / макс.
Программирование страницы (tPP)0,4 / 3 мс0,5 / 2,4 мс
Стирание сектора 4 КБ (tSE)45 / 400 мс45 / 300 мс
Стирание блока 32 КБ (tBE1)120 / 1600 мс150 / 1200 мс
Стирание блока 64 КБ (tBE2)150 / 2000 мс250 / 1600 мс
Стирание микросхемы (tCE)40 / 200 с50 / 100 с
Запись регистра состояния (tW)10 / 15 мс5 / 30 мс

Программа должна ждать именно бит BUSY, а не типичное время: максимальное в 5–10 раз больше. Для примера, запись всех 65 536 страниц W25Q128JV занимает 65 536 · 0,4 мс ≈ 26 с типично и до 65 536 · 3 мс ≈ 197 с в худшем случае — плюс время стирания. Чтение идёт гораздо быстрее: 16 МБ командой 03h на 50 МГц — это 16 777 216 · 8 / 50 МГц ≈ 2,7 с. Ресурс обеих микросхем — не меньше 100 000 циклов стирания и программирования на сектор, хранение данных — 20 лет.

Защита от записи

Биты BP0–BP2, TB, SEC и CMP регистра состояния 1 защищают от программирования и стирания часть массива — от сектора 4 КБ до всей микросхемы; с завода защита выключена (W25Q128JV, 7.1.3). Вывод /WP вместе с битами SRP запрещает менять сами биты защиты, пока на нём низкий уровень. Если стирание или запись «не работают», а BUSY сразу возвращается в 0, проверьте эти биты: команда для защищённого адреса просто не выполняется (W25Q128JV, 8.2.13).

Частые вопросы

Как проверить, что SPI-флеш подключена правильно?

Прочитать идентификатор командой 9Fh: после неё микросхема выдаёт три байта — код производителя и два байта типа и объёма. У W25Q128JV-IQ это EFh 40h 18h (у исполнений IM и JM — EFh 70h 18h), у GD25Q128E — C8h 40h 18h. Если приходят 00h или FFh, проверьте линию /CS, питание 3,3 В, режим SPI (0 или 3) и то, не перепутаны ли DI и DO.

Почему после записи в SPI-флеш данные не совпадают?

Чаще всего — из-за отсутствия стирания или перехода через границу страницы. Программирование меняет только единицы на нули, поэтому записывают только в стёртые ячейки (FFh) — сначала стирают сектор 4 КБ командой 20h. Команда 02h пишет не больше 256 байт и только в пределах одной страницы: если данные выходят за её конец, адрес возвращается к началу той же страницы и затирает уже записанное. Перед каждой записью и стиранием нужна команда 06h, а после — ожидание сброса бита BUSY.

Сколько времени стирается и записывается W25Q128?

По даташиту W25Q128JV стирание сектора 4 КБ занимает 45 мс типично и до 400 мс, блока 64 КБ — 150 мс и до 2 с, всей микросхемы — 40 с и до 200 с. Программирование страницы 256 байт — 0,4 мс типично и до 3 мс, поэтому запись всех 16 МБ страницами занимает около 26 с типично и до 3,3 мин в худшем случае, не считая стирания.

Чем отличаются W25Q128 и GD25Q128?

Основной набор команд, страницы 256 байт и секторы 4 КБ у них одинаковы, поэтому одну микросхему обычно ставят вместо другой. Отличаются код производителя (EFh и C8h), время операций — у GD25Q128E программирование страницы до 2,4 мс, стирание сектора до 300 мс, — частота команды чтения 03h (50 и 80 МГц) и размеры регистров безопасности. Перед заменой сверяйте таблицы команд и битов регистров состояния обоих даташитов.

Источники

  1. Winbond. W25Q128JV 3V 128M-bit Serial Flash Memory with Dual/Quad SPI. Datasheet, Revision F, 27.03.2018 — разд. 1–2 (организация: 65 536 страниц по 256 байт, 4096 секторов по 4 КБ, 256 блоков по 64 КБ; питание 2,7–3,6 В; 133 МГц; 100 000 циклов, более 20 лет хранения), 3.3 (выводы SOIC-8 и WSON-8), 6.1 (режимы SPI 0 и 3), 7.1 (биты BUSY, WEL, BP, QE), 8.1 (идентификаторы EFh, 4018h, 7018h; таблицы команд), 8.2.6, 8.2.7 и 8.2.13 (чтение 03h и 0Bh, программирование страницы 02h), 8.2.26 и 8.2.28 (уникальный номер 4Bh, таблица SFDP 5Ah), 9.6 (частоты и время программирования и стирания)
  2. GigaDevice. GD25Q128E Uniform Sector Dual and Quad Serial Flash. Datasheet DS-00480, Rev 1.4, April 2024 — разд. 1 (128 Мбит, страница 256 байт, секторы 4 КБ, блоки 32 и 64 КБ, 2,7–3,6 В, 100 000 циклов, 20 лет), 4.1 (режимы SPI 0 и 3), 7 (команды, идентификатор C8h 40h 18h), 8.6 (частоты и время программирования и стирания для −40…85 °C)

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