
В этой статье описан новый адаптер для атаки DaMAgeCard, позволяющий подключить NVMe-накопитель к Nintendo Switch 2 через слот SD Express.
С момента появления стандарта SD Express всё больше устройств оснащаются этим интерфейсом, и новая консоль Nintendo Switch 2 не стала исключением. Благодаря интеграции PCIe игры можно запускать непосредственно с карты памяти, что заметно ускоряет загрузку. Впрочем, возможности SD Express интересны не только игрокам: в одной из наших предыдущих публикаций подробно рассматривалась уязвимость DMA-атак, названная DaMAgeCard, и был описан адаптер «Express to PCIe». Для сохранения читабельности технические детали перенесены в блоки <details>.
Express to PCIe
Концепция адаптера состоит в том, чтобы сделать хост уверенным, что он взаимодействует с SD Express-картой. Ранее это реализовывалось на Raspberry Pi Pico: эмуляция SD-интерфейса, ответы на команды и соблюдение таймингов. Однако при подключении к Switch возникли дополнительные сложности в процессе инициализации.
Основные проблемы при отладке
-
Отсутствие выводов для подключения логического анализатора на исходной плате.
Решение: припаять проводники для снятия сигналов.
-
Недостаточный уровень питания Pi Pico, модуль не стартует.
Хотя адаптер питался от SD-разъёма, пришлось подключить дополнительное питание Pi Pico через USB.
-
Switch отправляет больше команд при инициализации, чем другие устройства.
Изначально адаптер отвечал лишь на CMD8, что хватало для ноутбуков и приставок AYANEO. Switch же требует корректных ответов на серию дополнительных запросов.
Подробности
До работы со Switch все устройства принимали минималистичный эмулятор, который отвечал только на CMD8 (указывая поддержку 1.8 В). После этого хост опускал PERST#, и адаптер подтягивал CLKREQ# к земле. Такой метод гарантировал успешную инициализацию на разных платформах, но Switch продолжает обмен командами до полного завершения процесса, поэтому адаптеру пришлось расширить логику ответов.
-
Переход хоста со 400 кГц на более высокие частоты SDIO.
Работа на GPIO обеспечивала стабильную эмуляцию на частоте 400 кГц, но при увеличении до 25–50 МГц возникли проблемы с детерминированной генерацией сигналов из-за джиттера и непредсказуемых задержек в Cortex-M0+.
Подробности
В документации указано, что инициализация SD-карты проходит на 400 кГц, но хост может несколько раз повышать скорость до 25 МГц и 50 МГц. Управление GPIO на RP2040 не обеспечивает нужной точности на этих частотах, поэтому надёжные импульсы можно генерировать лишь с помощью PIO — аппаратного блока с фиксированным набором детерминированных инструкций.
-
Понижение уровня сигнала с 3.3 В до 1.8 В при переходе на высокие частоты.
Из-за снижения напряжения вход контроллера перестаёт надёжно распознавать логическую «1», что делает эмуляцию на частотах выше 25 МГц неработоспособной.
-
Хост отправляет CMD6, требующий 512-битного ответа по линиям данных DAT0–DAT3.
В исходной версии адаптера отсутствовали подключения этих линий к Pi Pico.
Подробности
Команда CMD6 (Switch Function) используется для переключения режимов SD Express: она передаёт параметры в аргументе и возвращает 512 бит по шине данных. Этот ответ по DAT0–DAT3 необходим для согласования функций карты и перехода на PCIe-интерфейс.
Два подхода к решению

Подход 1
- Вывести недостающие линии данных на контроллер;
- Перейти с GPIO на PIO для высокоскоростной обработки;
- Реализовать преобразование уровня сигнала при переключении частоты;
- Собрать полноценный эмулятор SD Express-карты.
Подход 2
- Использовать реальную SD Express-карту для инициализации;
- После завершения настроек переключать PCIe-линии на M.2 разъём для NVMe-диска.
Исходя из принципа «не изобретать велосипед», был выбран второй вариант: так появился проект MegaSD.

MegaSD
Плата MegaSD объединяет все необходимые разъёмы и коммутацию, чтобы быстро переключаться между привычным SD-режимом и PCIe-интерфейсом для NVMe-диска:
- M.2 слот для NVMe-накопителя;
- SD Express и microSD Express слоты;
- встроенное питание для NVMe-диска;
- переключатель режима работы («M.2 disable» / «M.2 enable»);
- точки подключения для логического анализатора.
-
«M.2 disable» — стандартная работа SD-карты и захват SDIO-трафика.
-
«M.2 enable» — перевыключение сигналов на M.2 разъём для NVMe-диска.
Принцип переключения
Как только на VDD2 появляется 1.8 В, мультиплексоры автоматически переводят линии с интерфейса SD на PCIe (M.2).
Детектор напряжения
Схема и работа
SD Express-карта при старте функционирует в режиме SD (3.3 В). После подтверждения поддержки PCIe хост включает питание 1.8 В (VDD2), и цепь на транзисторах открывает мультиплексоры, переключая шины DAT0–DAT3 и сигналы CLKREQ#/PERST# на разъём M.2.


Зачем это нужно
Часть контактов SD-карты используется как для SDIO (DAT0–DAT3), так и для PCIe (REFCLK_P/N, CLKREQ#, PERST#). Только после перехода в режим PCIe эти контакты переназначаются аппаратно.
Упрощённая схема работы мультиплексоров

Левый мультиплексор выбирает между SD и PCIe по уровню 1.8 В, правый — между слотами SD и microSD по сигналу Card Detect.
Использованы высокоскоростные дифференциальные мультиплексоры для PCIe Gen3, что позволяет сохранять целостность сигналов на скоростях до 8 Гбит/с.
Форма и дизайн
Плата спроектирована в форме SD-карты, что позволило сохранить компактность и совместимость с большинством разъёмов.


Практическая проверка
При первом подключении MegaSD к Switch 2 консоль не смогла автоматически отформатировать диск. После ручного форматирования в exFAT с разделом на 372 ГБ устройство определилось корректно.



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

Универсальность решения
Хотя Nintendo Switch 2 стала основной платформой для тестов, MegaSD совместима со всеми хостами, поддерживающими SD Express. Это универсальный инструмент как для исследований безопасности, так и для практических задач.

Заключение
Простой аппаратный подход с использованием реальной SD Express-карты позволил обойти сложные этапы эмуляции. Всё необходимое для отладки остаётся доступным — подключить анализатор и проследить обмен сигналами.
Исходные схемы и прошивки опубликованы в открытом репозитории на GitHub: Ushinbuy/MegaSD-Express.


