Перейти к содержанию

Распиновка JTAG и SWD

Разводка отладочных разъёмов ARM по документации Arm, SEGGER и ST: 20-контактный JTAG с шагом 2,54 мм, 10-контактный Cortex Debug и 14-контактный STDC14 с шагом 1,27 мм, разъёмы ST-LINK и подключение SWD к STM32F103 на плате Blue Pill.

Обновлено Редакция GAW

JTAG — стандарт IEEE 1149.1 для тестирования и отладки микросхем: четыре сигнальные линии TCK, TMS, TDI и TDO плюс необязательный сброс nTRST. SWD (Serial Wire Debug) — двухпроводной отладочный порт ARM, который занимает те же выводы: SWCLK вместо TCK и SWDIO вместо TMS, а вместо TDO может выводиться трассировка SWO. Поэтому один разъём обычно годится для обоих режимов, а режим выбирает программа-отладчик. Разводку разъёмов задаёт Arm, производители адаптеров — SEGGER (J-Link), ST (ST-LINK), Keil (ULINK) — повторяют её с небольшими отличиями.

Коротко

  • ARM JTAG, 20 контактов, шаг 2,54 мм: 1 — VTref, 3 — nTRST, 5 — TDI, 7 — TMS/SWDIO, 9 — TCK/SWCLK, 11 — RTCK, 13 — TDO/SWO, 15 — nRESET, чётные с 4 по 20 — GND.
  • Cortex Debug, 10 контактов, шаг 1,27 мм: 1 — VTref, 2 — SWDIO/TMS, 4 — SWCLK/TCK, 6 — SWO/TDO, 8 — TDI, 10 — nRESET; 3, 5, 9 — GND; на месте 7 штыря нет.
  • STDC14 у STLINK-V3: контакты 3–12 повторяют Cortex Debug, на 13 и 14 — UART виртуального COM-порта.
  • SWD — минимум три провода: SWDIO, SWCLK, GND; большинству адаптеров нужен ещё VTref.
  • STM32F103: SWDIO — PA13, SWCLK — PA14, сброс — NRST.

Сигналы JTAG и SWD

СигналРежимНаправлениеНазначение
TCK / SWCLKJTAG / SWDк МКтактовый сигнал
TMS / SWDIOJTAG / SWDк МК / в обе сторонывыбор состояния JTAG / данные SWD
TDIJTAGк МКданные в кристалл
TDO / SWOJTAG / SWDот МКданные из кристалла / трассировка SWO, необязательна
nTRSTJTAGк МКсброс логики JTAG, необязательный
RTCKJTAGот МКвозвращённый такт для адаптивной синхронизации
nRESET (nSRST)обак МКсброс микроконтроллера, активный низкий уровень
VTrefобак адаптерунапряжение питания выводов МК — опора для уровней адаптера
GNDоба—общий провод

VTref — не питание. SEGGER подчёркивает: по этому входу адаптер проверяет, включена ли плата, и задаёт пороги своих входов и уровни выходов. VTref соединяют прямо с шиной питания выводов микроконтроллера, без последовательного резистора.

Руководство Keil ULINKpro рекомендует подтяжки 100 кОм: SWDIO/TMS, TDI и nRESET — к питанию, SWCLK/TCK — к земле; nRESET адаптер тянет к нулю выходом с открытым стоком. Если подтяжки есть в самом кристалле, внешние не ставят. У STM32F1 встроены подтяжка к питанию на JTMS/SWDIO, JTDI и NJTRST и подтяжка к земле на JTCK/SWCLK (RM0008, разд. 31.4.3).

20-контактный разъём ARM JTAG: 1 VTref, 2 VCC, 3 nTRST, 5 TDI, 7 TMS/SWDIO, 9 TCK/SWCLK, 11 RTCK, 13 TDO/SWO, 15 nRESET, 17 DBGRQ, 19 DBGACK, чётные с 4 по 20 — GNDКонтакты: 1 — VTref, 2 — VCC, 3 — nTRST, 4 — GND, 5 — TDI, 6 — GND, 7 — TMS/SWDIO, 8 — GND, 9 — TCK/SWCLK, 10 — GND, 11 — RTCK, 12 — GND, 13 — TDO/SWO, 14 — GND, 15 — nRESET, 16 — GND, 17 — DBGRQ, 18 — GND, 19 — DBGACK, 20 — GND1VTref2VCC3nTRST4GND5TDI6GND7TMS/SWDIO8GND9TCK/SWCLK10GND11RTCK12GND13TDO/SWO14GND15nRESET16GND17DBGRQ18GND19DBGACK20GNDвид сверху на штыришаг 2,54 мм
20-контактный разъём JTAG по Arm: вид сверху на штыри вилки на плате, прорезь ключа — со стороны нечётных контактов. Синим — линии, нужные для SWD

Это коробчатая вилка IDC с шагом 2,54 мм под гнездо плоского шлейфа. Нечётные контакты — сигнальные, чётные с 4 по 20 — общий провод, так что в шлейфе каждый сигнал идёт между «землями». ST советует подключать все контакты GND: это снижает помехи на шлейфе, а для работы достаточно хотя бы одного. Производители адаптеров по-разному используют контакты 2, 11, 17 и 19:

КонтактArmJ-LinkST-LINK/V2
1VTrefVTref, входVAPP — напряжение платы, вход
2VCC, необязательныйне подключёнVAPP, соединён с контактом 1
3nTRSTnTRSTTRST
5TDITDITDI
7TMS / SWDIOTMS / SWDIOTMS_SWDIO
9TCK / SWCLKTCK / SWCLKTCK_SWCLK
11RTCKRTCKне подключён
13TDO / SWOTDO / SWOTDO_SWO
15nRESETnRESETNRST
17DBGRQне подключённе подключён
19DBGACKвыход 5 В, до 300 мАVDD 3,3 В, к плате не подключают
4–12, чётныеGNDGNDGND
14–20, чётныеGNDGND, у части моделей зарезервированыGND
  • J-Link. Контакт 2 у него не подключён, а некоторые платы подают питание для разъёма на контакт 2 вместо 1 — с J-Link они работают, только если на плате соединить контакты 1 и 2. Если у кристалла нет сигнала RTCK, контакт 11 соединяют с землёй. Питание 5 В на контакте 19 защищено от перегрузки и короткого замыкания и включается программно. У части моделей, например J-Link ULTRA+, контакты 14, 16, 18 и 20 зарезервированы, и SEGGER просит не считать их соединёнными с землёй внутри адаптера.
  • ST-LINK/V2 работает с платами на 1,65–3,6 В, его входы выдерживают 5 В. SWD — до 4 МГц (по умолчанию 1,8 МГц), JTAG — до 9 МГц. Если плата подключается только по SWD, ST советует соединить контакты 3 (TRST) и 5 (TDI) с землёй — меньше помех на шлейфе. Для STM8 у ST-LINK/V2 отдельный разъём SWIM.
  • STLINK-V3SET повторяет этот разъём на плате-переходнике, но сигнал TRST (контакт 3) не поддерживает.

Cortex Debug: 10 контактов с шагом 1,27 мм

Разъём Cortex Debug на 10 контактов: 1 VTref, 2 SWDIO/TMS, 3 GND, 4 SWCLK/TCK, 5 GND, 6 SWO/TDO, 7 ключ, 8 NC/TDI, 9 GNDDetect, 10 nRESETКонтакты: 1 — VTref, 2 — SWDIO/TMS, 3 — GND, 4 — SWCLK/TCK, 5 — GND, 6 — SWO/TDO, 7 — ключ, 8 — NC/TDI, 9 — GNDDetect, 10 — nRESET1VTref2SWDIO/TMS3GND4SWCLK/TCK5GND6SWO/TDO7ключ8NC/TDI9GNDDetect10nRESETвид сверху на штыришаг 1,27 мм
Cortex Debug на 10 контактов по Arm: вид сверху на штыри, на месте контакта 7 штыря нет — это ключ. Синим — линии, нужные для SWD

Для плат, где 20-контактный IDC слишком велик, Arm предложила разъём Cortex Debug на 10 контактов с шагом 1,27 мм (0,05″) на основе микроразъёма Samtec FTSH. Он поддерживает и JTAG, и SWD с трассировкой SWO. Штырь 7 удалён и служит ключом. Контакт 9 (GNDDetect) STLINK-V3, например, замыкает на землю, а плата может по нему определить, что отладчик подключён.

Cortex Debug+ETM на 20 контактов того же шага — расширенная версия для трассировки команд. Первые десять контактов у него те же, на 12, 14, 16, 18 и 20 — TRACECLK и TRACEDATA[0]–TRACEDATA[3], нечётные с 11 по 19 — общий провод, причём 11 и 13 Arm обозначает как GND/TgtPwr+Cap: через них адаптер может питать плату. У SEGGER J-Trace Pro этот разъём 19-контактный: на 11 и 13 — выход 5 В для питания платы.

К адаптеру с 20-контактным разъёмом такую плату подключают через переходник: например, SEGGER выпускает переходники для J-Link. У STLINK-V3SET переходник не нужен — в комплекте есть шлейфы с разъёмами ARM10 и ARM20 шага 1,27 мм.

Разъём STDC14 на 14 контактов: 1 и 2 резерв, 3 T_VCC, 4 SWDIO/TMS, 5 GND, 6 SWCLK/TCK, 7 GND, 8 SWO/TDO, 9 резерв, 10 NC/TDI, 11 GNDDetect, 12 NRST, 13 VCP_RX, 14 VCP_TXКонтакты: 1 — резерв, 2 — резерв, 3 — T_VCC, 4 — SWDIO/TMS, 5 — GND, 6 — SWCLK/TCK, 7 — GND, 8 — SWO/TDO, 9 — резерв, 10 — NC/TDI, 11 — GNDDetect, 12 — NRST, 13 — VCP_RX, 14 — VCP_TX1резерв2резерв3T_VCC4SWDIO/TMS5GND6SWCLK/TCK7GND8SWO/TDO9резерв10NC/TDI11GNDDetect12NRST13VCP_RX14VCP_TXвид сверху на штыришаг 1,27 мм
Разъём STDC14 по UM2910: вид сверху на штыри. Контакты 3–12 повторяют Cortex Debug, 13 и 14 — UART виртуального COM-порта

STDC14 — разъём ST на 14 контактов с шагом 1,27 мм у STLINK-V3SET, STLINK-V3MINIE и других адаптеров третьего поколения. По UM2910 контакты 3–12 повторяют контакты 1–10 разъёма Cortex Debug (в документах ST он называется MIPI10 или ARM10), поэтому плату с Cortex Debug подключают шлейфом STDC14–MIPI10 из комплекта STLINK-V3SET. Контакты 1 и 2 зарезервированы и на плате не подключаются. Контакт 9 в SWD не нужен: у STLINK-V3SET на нём необязательный возврат такта JRCLK, у STLINK-V3MINIE он зарезервирован.

На контакты 13 и 14 выведен UART виртуального COM-порта: T_VCP_RX — выход адаптера, его подключают к RX микроконтроллера, T_VCP_TX — вход, к TX. STLINK-V3SET и STLINK-V3MINIE плату не питают, T_VCC (контакт 3) у них — вход. STLINK-V3MINIE работает с напряжением 1,65–3,6 В, SWD — до 24 МГц, JTAG — до 21 МГц; STLINK-V3SET без платы-адаптера B-STLINK-VOLT — с напряжением 3–3,6 В.

Фирменный ST-LINK/V2 подключается к STM32 только 20-контактным шлейфом JTAG — его разводка в таблице выше. VAPP (контакты 1 и 2) — вход: через него ST-LINK получает напряжение платы, чтобы уровни сигналов совпадали. Контакт 19 выдаёт 3,3 В, но в таблице ST он к плате не подключается.

Недорогие клоны в корпусе-«флешке» устроены иначе. Вместо 20-контактного у них 10-контактный разъём 2 × 5 с шагом 2,54 мм: на нём есть SWDIO, SWCLK, сброс, SWIM для STM8, общий провод и выходы питания 3,3 и 5 В, у некоторых вариантов — ещё линии JTAG, а входа VTref нет. Назначение контактов напечатано на корпусе и у разных партий разное: описаны как минимум два варианта разводки. Подключайте клон строго по надписи на своём экземпляре, а не по чужой картинке. Выход 3.3V можно соединить с выводом 3V3 платы, если она питается от программатора; выход 5.0V — только со входом 5 В, после которого стоит стабилизатор.

ST-LINK/V2-1 на плате Nucleo-64 тоже годится как внешний программатор. Снимите обе перемычки CN2 — встроенный ST-LINK отключится от STM32 на плате Nucleo и будет работать через 6-контактный разъём SWD CN4:

Контакт CN4СигналНазначение
1VDD_TARGETнапряжение внешней платы, вход
2SWCLKтактовый сигнал SWD
3GNDобщий провод
4SWDIOданные SWD
5NRSTсброс внешнего МК
6SWOтрассировка, по UM1724 зарезервирован

Если провод NRST (контакт 5) подключён к внешней плате, на Nucleo нужно разомкнуть паяную перемычку SB12 — иначе сигнал сброса пойдёт и на STM32 самой Nucleo.

Подключение SWD к STM32F103 на плате Blue Pill

Отладочный порт SWJ-DP у STM32F103 после сброса занимает пять выводов: PA13 — SWDIO/JTMS, PA14 — SWCLK/JTCK, PA15 — JTDI, PB3 — JTDO/TRACESWO, PB4 — NJTRST (RM0008, разд. 31.4). Для SWD нужны только PA13 и PA14. На плате Blue Pill они выведены и на отдельную четырёхконтактную гребёнку на торце с подписями 3V3, DIO, CLK и GND — так её описывает проект STM32-base. Плату выпускают разные фабрики, поэтому сверяйте порядок с надписями на своём экземпляре.

СигналSTM32F103C8, LQFP48Blue PillST-LINK/V2, 20 конт.Cortex DebugNucleo, CN4
SWDIOPA13, вывод 34DIO724
SWCLKPA14, вывод 37CLK942
GNDVSSGND4, 6 … 203, 53
VTrefVDD, 3,3 В3V31 (VAPP)11
NRSTNRST, вывод 7R на длинной гребёнке15105
SWO, необязательноPB3, вывод 39B31366

Внешние подтяжки на SWDIO и SWCLK не нужны — у STM32F1 они встроены. Если программа переназначила PA13 и PA14 или отключила отладочный порт, подключайтесь под сбросом или загрузитесь с BOOT0 = 1. Как это работает, разобрано в статье об архитектуре Cortex-M3, там же — отладочные блоки ядра.

Blue Pill питают от USB или от программатора: 3,3 В — на вывод 3V3, 5 В — на вывод 5V, после которого стоит стабилизатор. Подавать 5 В на 3V3 нельзя: предельное напряжение питания STM32F103 — 4,0 В. Описание платы предупреждает и о другом: выводы 5V соединены с разъёмом USB напрямую, поэтому нельзя одновременно питать плату от USB и от внешнего источника 5 В.

Программы: OpenOCD и STM32CubeProgrammer

Обзор программ для прошивки — в разделе «Программы для электронщика». Для STM32F103 и ST-LINK хватает двух бесплатных утилит:

openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c "program firmware.elf verify reset exit"
STM32_Programmer_CLI -c port=SWD -w firmware.bin 0x08000000 -v -rst
STM32_Programmer_CLI -c port=SWD mode=UR freq=1000 -e all

Первая строка — OpenOCD: файлы настройки адаптера и кристалла, затем команда program с проверкой записи и сбросом; частоту SWD в OpenOCD задаёт команда adapter speed в килогерцах. Вторая — STM32CubeProgrammer: -w записывает двоичный файл с адреса 0x0800 0000, -v проверяет запись, -rst сбрасывает кристалл. Третья подключается под сбросом (mode=UR, нужен провод NRST) на частоте 1000 кГц и стирает всю флеш-память — так оживляют кристалл, в котором программа отключила SWD.

Типичные ошибки

  • Разъём повёрнут на 180°. На простой гребёнке без ключа контакт 1 встаёт на место последнего: у 20-контактного JTAG VTref попадает на общий провод, а все сигнальные линии — на «земли» чётного ряда, и адаптер видит плату выключенной. Коробчатая вилка с прорезью и удалённый штырь 7 у Cortex Debug от такой ошибки защищают, отдельные провода и самодельные шлейфы — нет.
  • Нет общего провода. Плата питается от своего блока, адаптер — от USB компьютера, а GND между ними не соединён. Особенно легко забыть его, когда к Blue Pill идут четыре отдельных провода.
  • VTref не подключён. Без него адаптер не знает уровня сигналов платы: J-Link по VTref проверяет, есть ли на плате питание, и без него считает её выключенной, а ST-LINK/V2 и STLINK-V3 берут опорное напряжение с VAPP или T_VCC. У современных J-Link напряжение можно задать вручную (Fixed VTref), а у клонов ST-LINK такого входа нет вовсе.
  • 5 В на 3,3-вольтовую плату. Контакт 19 J-Link или вывод 5.0V клона, соединённый с шиной 3,3 В, превышает предельное напряжение питания STM32F103 4,0 В. 5 В подают только на вход стабилизатора платы.
  • Длинные провода SWD. SWD работает на мегагерцах: STM32CubeProgrammer по умолчанию подключается к ST-LINK на частоте 4000 кГц. На длинных отдельных проводах фронты искажаются, связь рвётся или запись не проходит проверку. Укоротите провода, проложите рядом с SWCLK общий провод и снизьте частоту — параметром freq в STM32CubeProgrammer или командой adapter speed в OpenOCD.
  • Программа отключила SWD. Поле SWJ_CFG, выводы PA13 и PA14 в режиме порта или глубокий сон — и отладчик больше не подключается. Помогает подключение под сбросом с проводом NRST или загрузка с BOOT0 = 1.
  • Клон подключён по чужой картинке. Разводка клонов ST-LINK/V2 у разных партий разная: там, где у одного варианта SWDIO, у другого может оказаться общий провод или питание. В лучшем случае адаптер просто не увидит кристалл. Сверяйтесь с надписью на корпусе своего экземпляра.

Разъёмы программирования AVR — ISP, UPDI и TPI — разобраны в статье «Распиновка AVR ISP», ядра Cortex-M и их отличия — в разделе ARM.

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

Какая распиновка у 10-контактного разъёма SWD (Cortex Debug)?

1 — VTref, 2 — SWDIO/TMS, 3 и 5 — GND, 4 — SWCLK/TCK, 6 — SWO/TDO, 7 — ключ (штыря нет), 8 — TDI, в SWD не нужен, 9 — GNDDetect, 10 — nRESET. Шаг — 1,27 мм. Те же сигналы занимают контакты 3–12 разъёма STDC14 у адаптеров STLINK-V3.

Сколько проводов нужно для SWD?

Обязательны три: SWDIO, SWCLK и общий провод. Почти всем фирменным адаптерам — J-Link, ST-LINK/V2, STLINK-V3 — нужен четвёртый, VTref: по нему адаптер узнаёт напряжение платы и выставляет уровни сигналов. Пятый, nRESET, желателен: без него не работает подключение под сбросом. SWO нужен только для трассировки.

Как подключить ST-LINK V2 к Blue Pill?

SWDIO адаптера — к PA13 (на гребёнке SWD платы подписан DIO), SWCLK — к PA14 (CLK), GND — к GND, вход опорного напряжения — к 3V3. У фирменного ST-LINK/V2 это контакты 7, 9, любой чётный с 4 по 20 и контакт 1 (VAPP) 20-контактного разъёма. У клона в корпусе-флешке разъём на 10 контактов, подключайте его по надписи на корпусе; вывод 3.3V клона можно соединить с 3V3 платы, чтобы питать её от программатора.

Чем JTAG отличается от SWD?

JTAG (IEEE 1149.1) использует четыре-пять линий — TCK, TMS, TDI, TDO и необязательный nTRST — и позволяет соединять кристаллы в цепочку и проверять пайку граничным сканированием. SWD — двухпроводной отладочный порт ARM: SWDIO и SWCLK занимают выводы TMS и TCK, а на выводе TDO может выводиться трассировка SWO. Для отладки ядра Cortex-M оба порта дают одно и то же, SWD экономит выводы.

Можно ли питать плату от J-Link или ST-LINK?

J-Link может выдать на контакт 19 напряжение 5 В до 300 мА с защитой от перегрузки, питание включается программно; подавайте его на вход 5 В стабилизатора платы, а не на шину 3,3 В. ST-LINK/V2 выдаёт 3,3 В на контакт 19, но по руководству ST этот контакт к плате не подключают. STLINK-V3SET и STLINK-V3MINIE плату не питают вовсе, а клоны ST-LINK выдают на разъём 3,3 и 5 В.

Источники

  1. IEEE 1149.1. Standard for Test Access Port and Boundary-Scan Architecture — стандарт JTAG: линии TCK, TMS, TDI, TDO и необязательная TRST
  2. Arm. Cortex-M Debug Connectors — разъёмы Cortex Debug на 10 контактов, Cortex Debug+ETM на 20 и 20-контактный JTAG IDC
  3. Arm. ULINKpro User's Guide (101416): Cortex Debug (10-pin) — SWD на выводах JTAG: TCK — SWCLK, TMS — SWDIO, TDO — SWO; подтяжки 100 кОм
  4. SEGGER. 20-pin J-Link Connector — назначение контактов в режимах JTAG и SWD, питание 5 В до 300 мА на контакте 19
  5. SEGGER. VTref — VTref — опорное напряжение, а не питание платы
  6. ST. UM1075: ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32 (Rev 10) — табл. 4 — 20-контактный разъём; напряжение 1,65–3,6 В; частоты SWD и JTAG
  7. ST. UM2448: STLINK-V3SET debugger/programmer for STM8 and STM32 (Rev 8) — табл. 6 — STDC14, табл. 7 — 20-контактный разъём, табл. 15–16 — шлейфы на ARM10 и ARM20
  8. ST. UM2910: STLINK-V3MINIE debugger/programmer tiny probe for STM32 (Rev 3) — табл. 4 — разъём STDC14; не питает плату; 1,65–3,6 В
  9. ST. UM1724: STM32 Nucleo-64 boards (Rev 14) — табл. 5 — разъём SWD CN4 встроенного ST-LINK/V2-1, перемычки CN2
  10. ST. RM0008: STM32F101xx–STM32F107xx reference manual (Rev 21) — разд. 31.4 — выводы SWJ-DP, встроенные подтяжки, поле SWJ_CFG
  11. ST. STM32F103x8, STM32F103xB datasheet, DS5319 (Rev 20) — табл. 5 — выводы корпуса LQFP48; предельное напряжение питания 4,0 В
  12. ST. UM2237: STM32CubeProgrammer software description (Rev 25) — режим Connect under reset, частота подключения, команды CLI
  13. OpenOCD User's Guide — команды program и adapter speed
  14. STM32-base. STM32F103C8T6 Blue Pill — гребёнка SWD платы: 3V3, DIO, CLK, GND; питание платы
  15. Sduino. Flash tool: ST-Link V2 clones — два варианта клонов ST-LINK/V2 с разной распиновкой разъёма