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 | выбор микросхемы, активен низкий уровень |
| 2 | DO (IO1) | выход данных |
| 3 | /WP (IO2) | защита от записи, активен низкий уровень |
| 4 | GND | общий |
| 5 | DI (IO0) | вход данных |
| 6 | CLK | тактовый сигнал |
| 7 | /HOLD или /RESET (IO3) | пауза обмена или сброс |
| 8 | VCC | питание |
Микросхема работает в режимах 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, 3 | 05h, 35h, 15h | микросхема выдаёт регистр |
| Запись регистров состояния 1, 2, 3 | 01h, 31h, 11h | значение регистра |
| Чтение данных | 03h | адрес, затем данные подряд |
| Быстрое чтение (Fast Read) | 0Bh | адрес, один пустой байт, данные |
| Чтение по двум и четырём линиям | 3Bh, 6Bh, BBh, EBh | адрес, пустые такты, данные |
| Программирование страницы | 02h | адрес, 1–256 байт данных |
| Программирование страницы по четырём линиям | 32h | адрес, данные по IO0–IO3 |
| Стирание сектора 4 КБ | 20h | адрес |
| Стирание блока 32 КБ и 64 КБ | 52h, D8h | адрес |
| Стирание всей микросхемы | C7h или 60h | — |
| Идентификатор JEDEC | 9Fh | микросхема выдаёт 3 байта |
| Уникальный номер | 4Bh | 4 пустых байта, номер |
| Таблица параметров SFDP | 5Ah | адрес, пустой байт, данные |
| Пауза и продолжение записи или стирания | 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, JQ | EFh 40h 18h |
| W25Q128JV-IM, JM | EFh 70h 18h |
| GD25Q128E | C8h 40h 18h |
Если вместо этого приходят 00h или FFh, микросхема не отвечает: проверяют питание, линию /CS, режим SPI и то, не перепутаны ли DI и DO.
Запись и стирание
Перед каждым программированием, стиранием и записью регистров состояния нужна команда 06h: она устанавливает бит WEL (S1) регистра состояния 1, а сама операция его сбрасывает. Пока микросхема программирует или стирает, бит BUSY (S0) равен 1 и она игнорирует все команды, кроме чтения состояния и паузы 75h (W25Q128JV, 7.1.1 и 7.1.2). Поэтому запись данных выглядит так:
06h— разрешить запись.20hи три байта адреса — стереть сектор 4 КБ.- Читать регистр состояния командой
05h, пока бит BUSY не станет 0. 06h— снова разрешить запись.02h, три байта адреса и до 256 байт данных — запрограммировать страницу.- Ждать сброса 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 МГц) и размеры регистров безопасности. Перед заменой сверяйте таблицы команд и битов регистров состояния обоих даташитов.
Источники
- 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 (частоты и время программирования и стирания)
- 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)
Нашли ошибку?