Ошибка «card did not respond to voltage select» появляется в мониторе порта при инициализации SD-карты на ESP32, Arduino или другом микроконтроллере и означает, что карта не ответила на команду выбора рабочего напряжения на этапе стартового рукопожатия. Хост отправляет карте команду ACMD41 (в режиме SD) или эквивалентную последовательность инициализации и ждёт подтверждения, что карта приняла условия питания — ответа не приходит, и монтирование файловой системы обрывается.

Проблема почти всегда носит аппаратный характер: питание, контакты, линии данных или сама карта. Программная часть (библиотека SD.h, SD_MMC) здесь лишь сообщает о результате неудачного обмена. Ниже разберём, что именно проверять и в каком порядке, чтобы не тратить время на перепрошивку там, где виноват резистор или «просевшее» питание.

Что означает эта ошибка на уровне протокола

При подаче питания SD-карта стартует в режиме 3,3 В и ждёт от хоста последовательность инициализации: сброс (CMD0), проверка условий работы (CMD8), затем команда выбора напряжения и запуска инициализации. Фраза «did not respond to voltage select» говорит о том, что на одном из этих шагов карта промолчала — хост не дождался корректного ответа в отведённый таймаут.

Причины молчания делятся на четыре группы: карта физически не получает питание, линии связи (CLK, CMD, DAT или MISO/MOSI в SPI-режиме) не доходят до карты, карта неисправна или не поддерживается, либо нарушены тайминги из-за слишком высокой частоты шины на старте.

💡

Ошибка voltage select — это симптом неудачного рукопожатия на старте, а не ошибка файловой системы. Искать нужно в питании, проводке и частоте шины, а не в форматировании.

Шаг 1. Проверка питания карты

Самая частая причина — нестабильное или недостаточное питание линии VCC карты (3,3 В). SD-карты в момент инициализации и записи потребляют заметные импульсные токи, и слабый стабилизатор или длинные тонкие провода вызывают просадку напряжения именно в момент ответа карты.

Вам нужно мультиметром измерить напряжение непосредственно на пинах питания карты (или на соответствующих контактах модуля) в момент инициализации, а не «в покое». Если напряжение проседает ниже допустимого диапазона при старте — карта молчит именно поэтому.

  • 🔋 Запитайте SD-модуль от вывода 3V3 платы, а не от 5V, если на модуле нет собственного стабилизатора.
  • 📏 Проверьте напряжение на пинах карты под нагрузкой в момент старта, а не только в idle.
  • 🔌 Сократите длину проводов питания и убедитесь в надёжном контакте (макетные «dupont»-перемычки часто дают плохой контакт).
  • 🧲 При питании от USB-порта компьютера учтите, что слабый порт или хаб может не вытягивать ESP32 вместе с картой.

⚠️ Внимание: не подавайте 5 В напрямую на питание SD-карты — карты рассчитаны на 3,3 В. Модули со встроенным стабилизатором и сдвигом уровней допускают 5 В на входе, но голая карта или переходник без стабилизатора от 5 В выйдет из строя.

Шаг 2. Проверка подключения и частоты шины

Второй по частоте источник проблемы — линии данных. В режиме SPI (самый распространённый на Arduino и ESP32) используются CS, MOSI, MISO, SCK; на ESP32 также доступен нативный режим SD_MMC с отдельными пинами. Перепутанные или «звенящие» на длинных проводах линии дают ровно тот же симптом — карта не отвечает на команды.

Ключевой момент: многие библиотеки по умолчанию стартуют обмен на высокой частоте. Для инициализации спецификация предполагает низкую стартовую частоту (порядка сотен кГц), и только после успешного рукопожатия частоту поднимают. Если библиотека позволяет задать частоту вручную, попробуйте снизить её.

// Пример для ESP32/Arduino: явное указание пинов и пониженной частоты

SPI.begin(18, 19, 23, 5); // SCK, MISO, MOSI, CS

if (!SD.begin(5, SPI, 4000000)) { // 4 МГц вместо частоты по умолчанию

Serial.println("Mount failed");

}

☑️ Проверка подключения SD-карты

Выполнено: 0 / 5

⚠️ Внимание: на ESP32 часть GPIO имеет ограничения (strapping-пины, пины только на вход). Перед назначением линий CS или CLK сверьтесь с распиновкой именно вашей платы — неудачный выбор пина может мешать загрузке или работе шины.

Шаг 3. Проверка самой карты и её формата

Если питание и проводка в порядке, подозрение падает на карту. Проверьте её в картридере компьютера: определяется ли она, читается ли, корректно ли отображается объём. Карта, которая не определяется даже на ПК, почти наверняка неисправна.

Для встраиваемых проектов надёжнее всего работают карты, отформатированные в FAT32. Карты большого объёма часто поставляются в exFAT, и не все библиотеки и не все карты одинаково хорошо инициализируются в таком виде. Переформатируйте карту официальной утилитой форматирования SD (SD Memory Card Formatter от SD Association) — она приводит карту к эталонному состоянию, отличному от штатного форматирования Windows.

  • 💾 Проверьте карту в картридере ПК: читается ли она вообще.
  • 🗂️ Отформатируйте в FAT32 через SD Memory Card Formatter, а не штатными средствами ОС.
  • 🔄 Протестируйте другую карту — желательно другого производителя и меньшего объёма.
  • 🧹 Осмотрите контактные площадки карты: окислы и загрязнения можно аккуратно протереть ластиком или спиртом.
📊 Где возникла ошибка voltage select в вашем проекте?
ESP32 (SPI-режим)
ESP32 (SD_MMC)
Arduino Uno/Nano/Mega
Другое устройство / картридер

Шаг 4. Диагностика модуля и конфликтов периферии

Дешёвые SD-модули для макетирования — отдельный источник проблем. На многих из них стоят упрощённые цепи согласования уровней, а качество пайки разъёма оставляет желать лучшего. Прозвоните мультиметром цепи от пинов модуля до контактов слота карты: обрыв дорожки или холодная пайка внешне незаметны.

Также проверьте, не конфликтует ли шина с другой периферией. Если на той же SPI-шине висит дисплей или другой датчик, некорректное управление линиями CS может сбивать обмен. Для теста отключите всю остальную периферию и оставьте только SD-карту.

💡

Для чистой диагностики соберите минимальную схему: плата + SD-модуль, короткие провода, пример SDTest из библиотеки. Если карта монтируется в минимальной конфигурации — проблема в вашей основной схеме или скетче.

Сводная таблица причин и решений

ПричинаКак проверитьРешение
Просадка питания 3,3 ВМультиметр на пинах карты при стартеОтдельный стабилизатор, короткие провода, конденсатор у модуля
Ошибка в распиновкеСверка с документацией платыИсправить назначение пинов в коде и на схеме
Слишком высокая частота шиныСнизить частоту в SD.begin()Старт на пониженной частоте, затем повышение
Карта в exFAT или неисправнаПроверка в картридере ПКФорматирование в FAT32, замена карты
Бракованный SD-модульПрозвонка цепей, замена модуляЗамена модуля или перепайка разъёма

Когда проблема не решается

Если после всех проверок карта по-прежнему молчит, полезно посмотреть на обмен логическим анализатором: виден ли вообще ответ на линии MISO после команд. Полная тишина на линии данных при живом CLK почти всегда указывает на питание, контакт в слоте или мёртвую карту. Хаотичные ответы — на целостность линий и согласование уровней.

Для ESP32 также имеет смысл попробовать альтернативный режим: если SPI не работает, проверьте SD_MMC (и наоборот) — это быстро разделяет проблемы шины и проблемы конкретного модуля. Учтите, что режим SD_MMC использует фиксированный набор пинов, который зависит от ревизии чипа, поэтому сверяйтесь с документацией на вашу плату.

Почему ошибка возникает «вчера работало, сегодня нет»

Типичный сценарий — деградация контакта: окислились площадки карты, разболтался слот, отошла dupont-перемычка. Вторая частая причина — изменение питания: проект перенесли с USB компьютера на powerbank или батарею, и стартовый бросок тока карты стал просаживать линию 3,3 В. Третья — обновление библиотеки или кода, где изменилась частота шины по умолчанию.

💡

Порядок диагностики: питание → проводка и пины → частота шины → формат и исправность карты → модуль и конфликты периферии. В большинстве случаев причина находится на первых двух шагах.

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

Ошибка voltage select — это программная или аппаратная проблема?

Почти всегда аппаратная: питание, контакты, распиновка или сама карта. Программная часть влияет лишь косвенно — через выбор пинов и частоту шины.

Поможет ли форматирование карты?

Только если карта исправна и корректно определяется на ПК. Форматирование в FAT32 через SD Memory Card Formatter решает проблемы несовместимости exFAT, но не вылечит просадку питания или плохой контакт.

Работают ли карты большого объёма (64–512 ГБ) с ESP32?

Зависит от библиотеки и карты. Карты SDXC поставляются в exFAT, и после переформатирования в FAT32 многие работают, но гарантии нет — надёжнее протестировать конкретную карту в вашей связке железа и библиотеки.

Можно ли подключать SD-модуль к 5 В?

Только если на модуле есть собственный стабилизатор и сдвиг уровней — это указано в описании конкретного модуля. Голая карта и простые переходники требуют строго 3,3 В.

Почему карта работает на ПК, но не на микроконтроллере?

Картридер ПК общается с картой по собственному контроллеру с качественным питанием и короткими трассами. На макетке длинные провода, просадки питания и высокая частота шины создают куда более жёсткие условия — поэтому исправная карта может «молчать» именно в вашем устройстве.