Часть 1. Подготовка порта
Для начала, рассмотрим Type-C порт, чтобы понять, как можно протянуть линии SWD через него. Первое, что приходит на ум - это конечно, же, заменить D+/D- линии на свои, однако без специального переходника наше устройство нельзя будет подключить в обычный порт.
Не буду затягивать и подробно рассказывать про все сигнальные линии в USB Type-C, эта тема прекрасно раскрыта в этой статье, на которую я и опирался при разработке.
В общем, нас интересуют пины SBU1/SBU2:
![Картинка из вышеупомянутой статьи Картинка из вышеупомянутой статьи](https://habrastorage.org/getpro/habr/upload_files/a93/4e9/864/a934e9864711735a6cfc5a7e259a1eef.png)
Да, мы собираемся использовать эти пины для того, чтобы протянуть по ним SWDIO и SWCLK. Да, прошивка и отладка будут работать только при определенной ориентации кабеля.
![J1 - входной порт (через него тоже можно прошивать сам ST-Link), J2 - выходной, к своему устройству на STM32 J1 - входной порт (через него тоже можно прошивать сам ST-Link), J2 - выходной, к своему устройству на STM32](https://habrastorage.org/getpro/habr/upload_files/3e9/8c8/240/3e98c82402b90c9cc5bc0d83dc38ee07.png)
Часть 2. Проверка идеи
Для проверки работоспособности этой идеи, я собрал адаптер для J-Link. И тут важное примечание - подойдет далеко не любой кабель, обычно эти пины никак не задействованы и физически не подключены.
Опираясь на вышеупомянутую статью, я расковырял два кабеля - переходник USB Type-C - 3.5mm jack от Google Pixel и нерабочий переходник USB Type-C - HDMI. Оба варианта были с нужными проводниками, однако по аудио-переходнику невозможно было запитать линию VBUS, поэтому я остановился на кабеле от HDMI переходника.
И спаял я такое:
эстетов пайки попрошу отойти от экранов
![Работает - не трогай! Работает - не трогай!](https://habrastorage.org/getpro/habr/upload_files/412/157/6bd/4121576bde9210d06d63243783ec4fc7.jpeg)
Концепт оказался на 100% работоспособным и данный кабель работает по сей день.
Часть 3. Программатор
Теперь, когда сомнений уже не осталось, я спроектировал плату-переходник, со входом и выходом Type-C. Схему ST-Link я перерисовал с документации на платы Discovery.
![Плата программатора Плата программатора](https://habrastorage.org/getpro/habr/upload_files/936/e53/3ee/936e533eef49aa3f369cd208523152f7.jpeg)
![Собранный и спаянный ST-Link Собранный и спаянный ST-Link](https://habrastorage.org/getpro/habr/upload_files/c3e/891/39f/c3e89139f5c80af9e2b70da683369a64.jpeg)
Прошивка кастомного ST-Link в первый раз может занять приличное время на гугление, поэтому вот мой рецепт.
Скачиваем бутлоадер ST-Link здесь, выбираем (в моем случае) Unprotected-2-0-Bootloader.bin. На моей плате версии 2.1 не завелась, скорее всего дело в дополнительной схеме USB ренумератора (пытался добавить навесным монтажом, красный проводок на плате - это оно, но не вышло).
После прошивки бутлодера, скачиваем старую версию ST-Link Utility (у меня сработала версия 3.6), новые версии отказываются прошивать ST-Link.
Ну и все, теперь отладка через USB Type-C порт вам доступна, при этом обычные возможности порта полностью сохранены, у меня на этом порте висит USB-UART преобразователь, через который тоже можно прошивать ваше устройство через системный или самописный бутлоадер.
Зачем так заморачиваться?
В моем случае, мне хотелось отлаживать устройство в собранном виде, без подпаянных проводов, в корпусе, прямо по месту его установки. И это очень удобно! Однако, следует помнить, что для отладки программатор нужно втыкать определенной стороной.
Неправильное подключение не ведет к каким-то неприятным последствиям на моих платах, однако этот момент следует держать в голове.
![Пациент под отладкой Пациент под отладкой](https://habrastorage.org/getpro/habr/upload_files/e44/99d/314/e4499d314ab55d576d087a0cfedbc792.jpeg)