Как избавиться от дополнительных разъемов на печатной плате IoT-устройств при наличии разъема Type-C? Этим вопросом мы задались, когда в своих разработках начали переход с micro-USB на 24pin Type-C. Используя Type-C только для питания и USB данных не слишком рационально, остается множество незадействованных контактов - через которые можно вести прошивку, отладку самого устройства с микроконтроллером. Таким образом мы реализовали распиновку, позволяющую вести отладку и прошивку через без использования доп. разъемов. В этой статье я постараюсь описать наш опыт работы с Type-C, надеюсь, он позволит вам избежать ошибок и сэкономить время, также поделюсь распиновкой разъемов Type-C для устройств с ESP32, STM32, Миландра, RISC-V или ARM, покажу что внутри кабеля Type-C и как его выбрать.

Перед прочтением очень рекомендую заглянуть в статью “Как начать использовать USB Type-C в своих разработках” - в ней хорошо описаны преимущества Type-C и виды кабелей. https://habr.com/ru/company/ntc-vulkan/blog/496882/

Распиновка Type-C под любые микроконтроллеры

От универсального разъема мы хотели добиться решения следующих задач и придумали вот такую распиновку:

  1. Передача питания. Для этого мы оставили стандартные контакты GND и +5В.

  2. Передача данных USB. Для работы как устройство USB slave использовали пины А/В 6 и А/В 7 на Type-C + подтяжку к земле по пинам А/В 5 (все согласно требованиям стандарта).

  3. Отладка. Вывели Blink на сторону платы отладки через пин А10, так как не всегда устройства имеют встроенный светодиод.

  4. Прошивка. Мы хотели сделать унификацию со многими отладчиками, среди которых ESP-PROG, J-link, ST-LINK, cJTAG (модный RISC-V не забыли), ALTERA USB Blaster и даже Миландр с одной и с конечными устройствами с Type-C с другой на базе микроконтроллеров ESP32, STM32, Миландра, RISC-V и ARM. 

Мы использовали оставшееся жилы, которые используются для высокоскоростной передачи данных в USB 3.1. Естественно USB 3.1 на МК не пригодится, а вот использовать их для отладки - оказалось очень удобно. В итоге у нас получилась следующая распиновка:

A2 - JTAG TDI
A3 - JTAG TMS/TMSC (SWDIO)[MOSI]
A8, B8 - Boot (nTRST)
A10 - Blink (для визуальной отладки)
A11 - MCU reset (TRST, nSRST)
B11 - UART RX
B10 - UART TX
B3 - JTAG TDO (SWDIO)[MISO]
B2 - JTAG TCK/TCKС (SWCLK)[SCK]

Если представлять распиновку графически, с учетом переплетения жил в самом кабеле Type-C, получаем следующую картину:

Схема прохождения сигнала от Type-C устройства до Платы отладки через Type-C - Type-C USB 3.1  кабель
Схема прохождения сигнала от Type-C устройства до Платы отладки через Type-C - Type-C USB 3.1 кабель

В результате мы получили распиновку, которая позволяет реализовать следующие подключения, вместе с передачей питания +5В и D+/D- для USB 2.0:

  1. UART + Blink + JTAG (serial debug + ST-link/ESP-PROG/JTAG/cJTAG)

  2. UART + Blink + SWD (serial debug + ST-link/Миландр)

  3. UART + Blink + ISP (serial debug + AVR программатор)

это и позволяет нам прошивать и отлаживать МК в реальном времени, без использования дополнительных разъемов и пинов на плате.

Как найти подходящий кабель Type-C - Type-C USB 3.1

Найти подходящий, полноценный USB 3.1 кабель, оказалось, не сильно тривиальной задачей. Для нашей задачи по жилам отлично подходят кабели от мониторов стандарта Thunderbolt 3. Но они длинные и не отличаются гибкостью — работать с таким трудно. Через маркетплейсы с третьей попытки нам удалось найти настоящий USB 3.1 Gen 2 с полножильной распиновкой. Многие продавцы продавали USB 3.0 под видом 3.1, но их быстро разоблачала прозвонка по пинам кабеля:

Рекомендуем заранее закупиться подобными переходниками с Type-C, они очень помогают в прозвонке кабеля. PS кабель на фото - USB 3.0 стандарта (только жилы A2, A3, B10, B11)
Рекомендуем заранее закупиться подобными переходниками с Type-C, они очень помогают в прозвонке кабеля. PS кабель на фото - USB 3.0 стандарта (только жилы A2, A3, B10, B11)

Внутри кабель Type-C - Type-C USB 3.1 выглядит следующим образом:

Кабель Type-C - Type-C USB 3.1. Жилы, слева на право:
1) Экран, он же GND (А1, А12, В1, В12);
2 - 5) Тонкие жилы А5, В5, А8, В8;
6-8) Питание +5В;
9-13) Экранированные коаксиальные кабели высокочастотных линий А3 А4 А10 А11;
14-15) Витая пара А6, А7;
16-20) Экранированные коаксиальные кабели высокочастотных линий В3 В4 В10 В11;
Кабель Type-C - Type-C USB 3.1. Жилы, слева на право: 1) Экран, он же GND (А1, А12, В1, В12); 2 - 5) Тонкие жилы А5, В5, А8, В8; 6-8) Питание +5В; 9-13) Экранированные коаксиальные кабели высокочастотных линий А3 А4 А10 А11; 14-15) Витая пара А6, А7; 16-20) Экранированные коаксиальные кабели высокочастотных линий В3 В4 В10 В11;

Из нашего опыта мы создали следующую инструкцию по тому, как выбрать правильный кабель:

  1. Смотрите отзывы. Если в них пишут про успешную работу макбука/ноутбука с монитором, вы на правильном пути;

  2. Выбирайте пропускную способность от 10 ГБит/с;

  3. Если есть упоминание Thunderbolt 3, то 99% полножильный кабель;

  4. Проверяйте кабель через платы Type-C test-plug (как на фото выше).

Да прибудет с вами удача, ибо разнообразие Type-C стандартов для кабелей, покрытое разнообразием уловок продавцов превращает простую закупку в интересный квест.

Распиновка на стороне отладочной платы

Если вы изначально думали, что жилы Type-C идут «напрямую» от А1 к А1, от А2 к А2 и т. д., то спешу вас разочаровать — мы тоже так изначально подумали и развели первую плату неверно. Как показала работа над ошибками, схема коммутации жил внутри кабеля оказалась следующей:

Если присмотреться, она хитросплетенная и зеркальная, некоторые жилы со стороны А приходят на сторону В и наоборот. В своей схеме мы намеренно заложили необходимость переворота кабеля — таким образом можно прозвонить кабель прямо на устройстве и отладке, проверив его на соответствие стандарту USB 3.1. Пины сторон А на платах доступны, тогда как стороны В находятся под разъемом. 

Получившаяся плата отладки для ESP-32 под JTAG + ESP PROG:
Получившаяся плата отладки для ESP-32 под JTAG + ESP PROG:

Преимущества получившейся распиновки

1. Она совместима с USB Type-C на иных устройствах. Это позволяет смело подключать наше оборудования кабелем Type-C to Type-C в любые ПК, смартфоны и т. д.

2. В случае ошибки подключения (а полярность в нашей схеме важна) повреждения электроники исключены. Мы намеренно проверяли все возможные сценарии конфликтов интерфейсов, перенапряжений и т. п., тем самым ошибка в ориентации Type-C не навредит ни программатору, ни электронике устройства. Ошибка подключения будет заметна по:

а) отсутствию UART-данных от датчика,
б) морганию RX-диода на плате USB-UART в соответствии с тактами Blink.

3. У сервиса, и даже у пользователя, остается возможность прошить устройство без вскрытия. Это не всегда хорошо, но многие B2B-компании настаивают на такой возможности.

4. Унификация отладочной платы. Разработанная один раз печатная плата позволяет программировать и отлаживать любые МК, необходимо только переподключить программатор.

5. Не требуется пайка для отладки, достаточно заказать сборку прототипов на стороне и наслаждаться разработкой. Ну это ли не счастье?

В заключении, мы получили весьма интересный опыт на ровном месте с Type-C, который я еще не находил в Интернете. Искренне надеюсь, что наш опыт будет полезен и вы также перейдете на светлую сторону хитрого Type-C. Буду рад вашим замечаниям и комментариям!

Комментарии (14)


  1. vadimr
    09.11.2022 16:55

    Разве кабель с поддержкой thunderbolt не должен иметь внутри активную логику?


    1. avsolovyev Автор
      09.11.2022 17:44

      Не нашел подтверждения или опровержения, так что возможно) type c тот ещё ребус. thunderbolt 3 кабель пробовал использовать с UART и питанием - он работал.


  1. Indemsys
    09.11.2022 17:25
    +2

    Передавать сигналы SWDIO и SWCLK в одной витой паре довольно рискованное решение.
    На штатных кабелях адаптеров они всегда разделены землёй.
    Про согласование волновых сопротивлений тоже как-то не ясно.
    Будет ли такая конструкция работать на 50 МГц тактовой SWCLK большой вопрос.


    1. avsolovyev Автор
      09.11.2022 17:41

      В одной паре действительно не применимо. Но по моему опыту витая пара в Type-c только на пинах D± (А6 и А7). А к B2 и B3 идут по коаксиальному экранированному кабелю.


      1. Indemsys
        09.11.2022 19:16
        +1

        Прикольно, действительно в кабеле USB 3.1 уже не витая пара, а коаксиальные линии

        Т.е. получается взяли самый дорогой USB кабель, и хотите сказать что на чем-то сэкономили?


        1. avsolovyev Автор
          09.11.2022 19:28
          +1

          Сэкономить на кабеле то точно не получилось, оно и не планировалось. Но вот сэкономить на инженерном образце в цепочке разработки получилось. Сейчас мы от макета сразу переходим к предсерийному производству, так как все разъемы для отладки и разработки у него присутствуют.


          1. Indemsys
            09.11.2022 19:42

            Не знаю что у вас за образец, но обычно именно USB стек и нуждается в отладке, а у вас USB разъем будет занят самим отладчиком.
            Ну согласитесь, получается как-то криво.


            1. avsolovyev Автор
              09.11.2022 20:04
              +2

              USB линии не заняты, они все ещё доступны на платье отладки. Там же 2 type c female. Один для ПК, второй для устройства.


              1. Indemsys
                11.11.2022 12:38

                Прикинул так сяк. Не, не подойдёт такой вариант для серьёзной отладки.

                Нет как минимум ещё сигнала TRACE SWO. А это очень важный сигнал для трассировки событий.


                1. avsolovyev Автор
                  12.11.2022 10:52

                  SWO есть, в моей схеме допущена опечатка. SWO и TDO совмещены в ST-Link, соответственно и на схеме они должны идти вместе от пина B3. А задублированный SWDIO - это моя опечатка. Побежал исправлять, спасибо, что заметили!


            1. Sap_ru
              09.11.2022 20:23
              +1

              У них USB 2.0 так остался нетронутым в кабеле. А USB3.0 редко когда нужен и тогда уже проще заморочится с другими средствами отладки.


  1. webhamster
    10.11.2022 11:00

    Стрелки на сигналах B10 и B11 в правой части распиновки точно не перепутаны?


    1. avsolovyev Автор
      10.11.2022 11:52

      Спасибо большое, что заметили! Они были перепутаны на схеме, схему обновил.


  1. kulhaker478
    10.11.2022 16:41
    +2

    Довольно интересное решение подталкивающие к использованию type c и всеобщей универсализации USB подключений. Первый раз такое увидел у Pinecil от Pine64

    Так называемая Breakout board
    Так называемая Breakout board

    Единственное возникает вопрос как бы не спалить ничего....