Гальваноразвязка SWD-интерфейса действительно сложна из-за двунаправленной линии SWDIO и высокой скорости (4 МГц). Вот несколько подходов:
1. Быстрые цифровые изоляторы (Digital Isolators)
Подходящие микросхемы:
Si864x/Si865x (Silicon Labs) – до 150 Мбит/с
ADuM3160 (Analog Devices) – USB-изолятор, но может работать с SWD
ISO7740 (Texas Instruments) – до 100 Мбит/с
ADuM120N (Analog Devices) – двухканальный, до 100 Мбит/с
Проблема: Нужно разделить SWDIO на вход/выход.
Решение:
Использовать два канала изолятора:
SWDIO_OUT → MCU (через один канал)
SWDIO_IN ← MCU (через второй канал)
Управлять направлением через SWO или дополнительный GPIO.
2. Опторазвязка (медленно, но возможно)
Если скорость можно снизить (например, до 1 МГц), можно попробовать быстрые оптопары:
6N137 (до 10 Мбит/с) – но задержка ~75 нс
HCPL-0723 (до 50 Мбит/с)
Проблема: Нужно управлять направлением.
Решение:
Аналогично – две оптопары + логика управления направлением.
3. Готовые модули (если не хочется паять)
ISO7240/ISO7340 (TI) – готовые изоляторы, но нужно правильно подключить SWDIO.
ADuM4160 (если SWD эмулируется через USB).
4. Альтернативный подход – изолированный отладочный адаптер
J-Link Isolated (Segger) – дорого, но уже имеет гальваноразвязку.
ST-Link с внешней изоляцией.
Вывод
Лучший вариант – быстрый цифровой изолятор (Si864x, ADuM120N) с разделением SWDIO на вход/выход. Если скорость не критична – можно попробовать 6N137 + логику управления направлением.
Если нужно именно 4 МГц – китайские I²C-изоляторы (например, SI8600-подобные) могут не потянуть, лучше взять специализированные высокоскоростные изоляторы.