Найти в Дзене
TehnoZet-2

SPI шина, GPIO на плате ESP8266, режимы прошивки (DOUT, DIO, QOUT, QIO)

Сегодня мы поговорим о том как выжать максимум из ESPешек по количеству GPIO. Возможно ли это? Нам придется затронуть SPI шину, память, и настройку программ для прошивки модулей.

Что такое SPI?

Serial Peripheral Interface, SPI bus - последовательный периферийный интерфейс, шина SPI

Это последовательный синхронный стандарт передачи данных в режиме полного дуплекса.

Предназначенный для обеспечения высокоскоростного сопряжения микроконтроллеров и периферии.

В простейшем случае состоит из четырех цифровых сигналов (для DIO)

  • MOSI — выход ведущего, вход ведомого (от ведущего к ведомому)
  • MISO — вход ведущего, выход ведомого (от ведомого к ведущему)
  • SCLK или SCK — последовательный тактовый сигнал (служит для передачи тактового сигнала для ведомых устройств)
  • CS или SS — выбор микросхемы, выбор ведомого.
Как работает интерфейс SPI
Как работает интерфейс SPI

Для примера на схеме указаны чип ESP8266 и флеш память, но на само деле эти устройства могут быть любыми.

В ESP8266 данный интерфейс поддерживается аппаратно, там даже два модуля SPI

Два модуля SPI:

  • General SPI (SPI общего назначения)

Максимальная скорость работы – 80 мегагерц.

  • HSPI

Максимальная скорость работы – 20 мегагерц.

Обратимся к распиновки чипа ESP8266EX

Распиновка чипа ESP8266
Распиновка чипа ESP8266

Нас будут интересовать эти выводы. Что это такое?

А это этот самый SPI только не простейшая его реализация по двум цифровым сигналам SD_DATA_1, SD_DATA_2,(отбрасывая тактовый генератор и выбор чипа), а по четырем SD_DATA_1, SD_DATA_2, SD_DATA_3, SD_DATA_4

Вот так это будет выглядеть на схеме, режим QIO передача по четырем линиям

QIO режим (четыре линии)
QIO режим (четыре линии)

Самые внимательные уже обратили внимание на надписи:

  • SD_DATA_2 - GPIO9 - D2
  • SD_DATA_3 - GPIO10 - D3

И если перейти от четырех сигнальных линий к двум отбрасывая SD_DATA_2, SD_DATA_3 то мы получим режим "DIO" - передача по двум линиям освобождая тем самым GPIO9 и GPIO10

На схеме это будет выглядеть так

DIO Режим (минус две линии)
DIO Режим (минус две линии)

В руководстве к ESP8266 написано: "Цифровые контакты 6-11 используются для подключения флэш-памяти чипа на большинстве модулей"

Где же они находятся в реальности? А вот где.

Обратимся к модулю ESP-12E

Вот его распайка

Распайка ESP-12
Распайка ESP-12

А вот как это выглядит в реальности.

Во они эти контакты

GPIO9-10
GPIO9-10

И модули семейства Семейство плат WeMos, подсемейство NodeMcu

WeMos NodeMcu GPIO 6-11
WeMos NodeMcu GPIO 6-11

На схеме выделено GPIO 6-11 те которые находятся на боковой грани модуля ESP-12 и вынесены на пины модуля NodeMcu

Как же используются эти контакты (GPIO) и их значение?

А вот как, я написал чуть по другому, обозначив каналы MOSI, MISO номерами 1, 2. А не SD_DATA или не SDD2, SDD3, или D2, D3, так будет понятнее, а то с этими обозначениями кто во что горазд!

Назначение GPIO 6-11:

  • GPIO 6 SCLK (тактовый сигнал)
  • GPIO 7 MISO (от ведомого к ведущему канал 1)
  • GPIO 8 MOSI (от ведущего к ведомому канал 1)
  • GPIO 9 MISO (от ведущего к ведомому канал 2)
  • GPIO 10 MOSI (от ведущего к ведомому канал 2)
  • GPIO 11 CS0 (выбор микросхемы, выбор ведомого)

Почему то на GPIO 10 будет работать при прошивке модуля в режиме "DIO" или его модификации "DOUT", а вот GPIO 9 не работает все виснет возможно это связано с режимами MOSI, MISO

Но лучше не использовать ни один из контактов GPIO с 6 по 11.

GPIO 9 и 10 можно использовать на ESP8285, поскольку этот чип имеет встроенную флэш-память 1 МБ и соответственно не использует эти контакты. Один или оба GPIO 9, 10 иногда могут быть доступны на платах ESP8266, в зависимости от используемой прошивки и режима ее работы.

И кроме того в руководстве по ESP8266 пишут: "GPIO 10 можно использовать в качестве светового сигнала для индикации состояния связи между устройством и сервером".

А теперь рассмотрим прошивку модуля ESP8266 из среды Arduino IDE

Какой «Flash Mode» выбрать при прошивке модуля в среде IDE Arduino или при прошивки через Nodemcu Flasher?

Дело в том что если зайти в среде Arduino IDE в "инструменты", выбрать Generic ESP8266 module.

-10

То в «Flash Mode» появится выбор из DOUT, DIO, QOUT, QIO

-11

Что это такое?

А это режимы работы с памятью о которых мы говорили выше

DOUT > DIO >QOUT > QIO

По скорости, от менее скоростных к более скоростным

  • DOUT - адрес задается стандартным путем используя только MOSI, а для получения данных используются две линии
  • DIO - (Dual IO) использует 2 линии для данных
  • QOUT – адрес задается стандартным путем используя только MOSI, а для получения данных используются четыре линии
  • QIO - (Quad IO) использует 4 линии для данных

Дело в том, что не все платы имеют подключение к памяти по четырем линиям (хотя более-менее современные умеют)

Контакты чипа для работы с памятью в DIO (используются только две линии)

  • D0 GPIO 7 (MISO канал1)
  • D1 GPIO 8 (MOSI канал1)
  • D2 -GPIO 9(MISO канал2)
  • D3 - GPIO 10 (MOSI канал2)
  • CLK - GPIO 6
  • CMD - GPIO 11

Контакты чипа для работы с памятью в QIO (используют четыре линии):

  • D0 (MISO канал1)
  • D1 (MOSI канал1)
  • D2 -GPIO 9 (MISO канал2)
  • D3 - GPIO 10 (MOSI канал2)
  • CLK - GPIO 6
  • CMD - GPIO 11

Понятно, что при таком использовании скорость увеличивается в 2 раза.

Становится очевидно если вы задаете режим "DIO" то тем самым вы срезаете две линии софтовым образом и высвобождаются два GPIO 9 и 10

Только вот почему то 10 GPIO работает, а 9 все вешает, возможно это связано с ведущим\ведомым (см. выше)

А вообще интересные эксперименты можно попробовать провести, например подключить внешнюю память к модулю ESP 8266 (вообще внешнюю) Но возможно это будет в будущем.

Продолжение следует...

Статьи по близким темам:

Об использовании и особенностях подключения к GPIO модуля ESP8266

Подписывайтесь на наш канал TehnoZet-2, нажимайте кнопку

-12

там много чего интересного! Мы только развиваемся!
Понравилась статья, хотите продолжения - ставьте лайки, жмите палец вверх!

-13

Что-то пошло не так, и нам не удалось загрузить комментарии. Попробуйте ещё раз
Рекомендуем почитать
Оперативка вместо свалки! Как за 15 минут превратить старые DDR3-модули в сверхбыстрый RAM-диск для временных файлов ⚡🧠💾
Привет! Я Евгения — коллекционер «устаревших», но ещё бодрых планок памяти и защитница SSD от лишних циклов перезаписи. Уверена, у тебя (как и у меня) в ящике лежит горстка DDR3 или даже DDR4, которая после апгрейда компьютера грустит и собирает пыль. Выбросить — жалко, продать — копейки, а между тем эти крошки готовы снова поработать на скорость! Сегодня мы сделаем из обновлённой или «запасной» оперативки RAM-диск — виртуальный супер-быстрый накопитель в памяти компьютера. Скорость > 6000 МБ/с,...
Что такое DRAM-кэш в SSD и нужен ли он?
Доброго времени, господа. Уже довольно давно существует вопрос - а нужен ли мне (пользователю) SSD с DRAM-кэшем? И если нужен, то насколько? Что это такое - ваш кэш, и как он влияет на работу? На эти вопросы сегодня и ответим! Это отдельная микросхема памяти на SSD, которая обладает намного большей скоростью и настолько же меньшим объемом, по сравнению с чипами памяти. Ее главная задача - быть, собственно, кэшем, то есть хранить какие-то данные, которые часто используются, при этом обеспечивать доступ к ним быстрее, чем к самой памяти...
Кому и для чего нужны древние сборки на 370/478 сокете?
В эпоху процессоров с едва ли не сотнями ядер, терабайтных SSD и трассировки лучей кажется, что древним сборкам на старых платформах место в музее. Однако вот что странно: спрос на «динозавров» от года к году только увеличивается! Это странно, ведь кому может быть нужна немощная машина на базе старых и слабых Pentium lll и 4? Разобрался в вопросе Игорь Позняев, создатель и автор канала «Блог системного администратора». Настало время окунуться в нулевые! Мало ли, может, были какие-то «секретные» процессоры, которые способны заткнуть за пояс современные i9? Шучу, таких не было...
Следующая статья
Документы, вакансии и контакты