Если в примере кода под ESP32 встречаются константы VSPI или HSPI, речь идёт о двух аппаратных интерфейсах SPI микроконтроллера, которые различаются внутренним контроллером и выводами по умолчанию. Подключить дисплей, SD-карту или радиомодуль можно к любому из них, но перепутанные пины — самая частая причина, почему устройство «не видит» периферию при вроде бы правильной схеме.

В этой статье разберём, что скрывается за аббревиатурами, на какие GPIO выведены эти шины в типовых модулях, как задать интерфейс в коде и как проверить, что обмен данными действительно идёт. Материал ориентирован на тех, кто собирает проекты на ESP32 в среде Arduino IDE или аналогичных фреймворках.

Что такое SPI и зачем нужны VSPI и HSPI

SPI (Serial Peripheral Interface) — синхронный последовательный интерфейс для связи микроконтроллера с периферией: дисплеями, картами памяти, датчиками, АЦП, радиомодулями. Обмен идёт по четырём линиям: тактовый сигнал SCK, данные к ведомому MOSI, данные от ведомого MISO и выбор устройства CS (он же SS), который у каждой микросхемы на шине свой.

В классическом ESP32 есть несколько SPI-контроллеров. Часть из них задействована под внутреннюю flash-память и пользователю недоступна, а два свободных получили условные имена HSPI и VSPI. Буквы исторически связаны с внутренними блоками чипа (Host и «Versatile»), но для практики важно другое: это два независимых аппаратных контроллера, каждый со своими выводами по умолчанию.

Наличие двух шин удобно, когда нужно одновременно обслуживать, например, дисплей и SD-карту с разными настройками скорости и режима. Разведя их по разным контроллерам, вы избегаете конфликтов и постоянного переключения параметров шины.

💡

VSPI и HSPI — это два независимых аппаратных SPI-контроллера ESP32. Разница между ними — в выводах по умолчанию и внутренней реализации, а не в «качестве» интерфейса.