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

SDIO

Интерфейс карт памяти SD годится не только для памяти: по нему можно подключать и другие устройства. Этот вариант называется SDIO, и в чипах ESP32 он бывает как ведущим, так и ведомым.

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

SDIO (Secure Digital Input/Output) — вариант интерфейса карт памяти SD для устройств ввода-вывода. Физически это та же шина: линия такта, линия команд и одна или четыре линии данных. По ней процессор может работать не только с картой памяти, но и с периферией — например, с беспроводным модулем.

У шины есть ведущий (host), который ей управляет, и ведомые устройства. В чипах ESP32 встречаются оба:

ЧипРольРежимы и частота
ESP32ведущий SD/SDIO/MMC1, 4 или 8 бит, до 80 МГц, SDIO 3.0, две карты
ESP32ведомый SDIOSPI, 1 или 4 бита, до 50 МГц, SDIO 2.0
ESP32-C6ведомый SDIOSPI, 1 или 4 бита, до 50 МГц, SDIO 2.0

Ведомый SDIO превращает ESP32 в устройство для другого процессора: тот обращается к регистрам интерфейса напрямую и к общей памяти через DMA, не отвлекая ядра ESP32. Так ESP32 становится периферийным устройством для другого процессора. Блок данных — до 512 байт, прерывания идут в обе стороны.

Кроме режимов SDIO ведомый поддерживает и режим SPI.

Выводы. У классического ESP32 ведомый SDIO выведен на GPIO2, 4 и 6–15 через IO MUX, причём GPIO6–11 у модулей обычно заняты флеш-памятью. Фронты такта задают strapping-выводы: у ESP32 — MTDO и GPIO5, у ESP32-C6 — MTMS и MTDI. Подробности — на страницах ESP32 и ESP32-C6.

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

Что такое SDIO?

Вариант интерфейса карт SD, предназначенный не для памяти, а для устройств ввода-вывода: по нему ведущий процессор обменивается данными с периферийным устройством, например с Wi-Fi-модулем. Линии те же, что у карты SD: такт, команда и одна или четыре линии данных.

Чем ведущий SDIO отличается от ведомого?

Ведущий (host) управляет шиной и подключает карты и устройства — у классического ESP32 он работает с картами SD, SDIO и MMC на частоте до 80 МГц. Ведомый (slave) сам выступает устройством: внешний процессор обращается к его регистрам и памяти. Ведомый SDIO есть у ESP32 и ESP32-C6, до 50 МГц.

Зачем у ESP32 strapping-выводы для SDIO?

Уровни на них при сбросе задают, по какому фронту такта ведомый SDIO принимает и выдаёт данные. У ESP32 это MTDO и GPIO5, у ESP32-C6 — MTMS и MTDI. Если внешний ведущий работает с другими фронтами, эти выводы подтягивают нужным образом.

Источники

  1. Espressif. ESP32 Series Datasheet v5.3 — разд. 4.8.10 — ведущий SD/SDIO/MMC: две карты, SD 3.0 и 3.01, SDIO 3.0, MMC 4.41, eMMC 4.5 и 4.51, до 80 МГц, шина 1, 4 или 8 бит; разд. 4.8.11 — ведомый SDIO по спецификации SDIO Card 2.0: режимы SPI, SDIO 1 и 4 бита, 0–50 МГц, блок до 512 байт, прерывания в обе стороны, DMA; выводы — GPIO2, 4, 6–15 через IO MUX; разд. 3.4 — фронты ведомого задают MTDO и GPIO5
  2. Espressif. ESP32-C6 Series Datasheet v1.5 — разд. 4.2.1.8 — ведомый SDIO по SD Physical Layer 2.00 и SDIO 2.00: режимы SPI, SDIO 1 и 4 бита, 0–50 МГц, настраиваемые фронты, блок до 512 байт, DMA, пробуждение из сна; разд. 3.2 — фронты задают выводы MTMS и MTDI при сбросе

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