Распиновка 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 / SWCLK | JTAG / SWD | к МК | тактовый сигнал |
| TMS / SWDIO | JTAG / SWD | к МК / в обе стороны | выбор состояния JTAG / данные SWD |
| TDI | JTAG | к МК | данные в кристалл |
| TDO / SWO | JTAG / SWD | от МК | данные из кристалла / трассировка SWO, необязательна |
| nTRST | JTAG | к МК | сброс логики JTAG, необязательный |
| RTCK | JTAG | от МК | возвращённый такт для адаптивной синхронизации |
| 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-контактный разъём JTAG: ARM, J-Link, ST-LINK/V2
Это коробчатая вилка IDC с шагом 2,54 мм под гнездо плоского шлейфа. Нечётные контакты — сигнальные, чётные с 4 по 20 — общий провод, так что в шлейфе каждый сигнал идёт между «землями». ST советует подключать все контакты GND: это снижает помехи на шлейфе, а для работы достаточно хотя бы одного. Производители адаптеров по-разному используют контакты 2, 11, 17 и 19:
| Контакт | Arm | J-Link | ST-LINK/V2 |
|---|---|---|---|
| 1 | VTref | VTref, вход | VAPP — напряжение платы, вход |
| 2 | VCC, необязательный | не подключён | VAPP, соединён с контактом 1 |
| 3 | nTRST | nTRST | TRST |
| 5 | TDI | TDI | TDI |
| 7 | TMS / SWDIO | TMS / SWDIO | TMS_SWDIO |
| 9 | TCK / SWCLK | TCK / SWCLK | TCK_SWCLK |
| 11 | RTCK | RTCK | не подключён |
| 13 | TDO / SWO | TDO / SWO | TDO_SWO |
| 15 | nRESET | nRESET | NRST |
| 17 | DBGRQ | не подключён | не подключён |
| 19 | DBGACK | выход 5 В, до 300 мА | VDD 3,3 В, к плате не подключают |
| 4–12, чётные | GND | GND | GND |
| 14–20, чётные | GND | GND, у части моделей зарезервированы | 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 мм
Для плат, где 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 контактов у STLINK-V3
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, его клоны и ST-LINK на платах Nucleo
Фирменный 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 | Сигнал | Назначение |
|---|---|---|
| 1 | VDD_TARGET | напряжение внешней платы, вход |
| 2 | SWCLK | тактовый сигнал SWD |
| 3 | GND | общий провод |
| 4 | SWDIO | данные SWD |
| 5 | NRST | сброс внешнего МК |
| 6 | SWO | трассировка, по 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, LQFP48 | Blue Pill | ST-LINK/V2, 20 конт. | Cortex Debug | Nucleo, CN4 |
|---|---|---|---|---|---|
| SWDIO | PA13, вывод 34 | DIO | 7 | 2 | 4 |
| SWCLK | PA14, вывод 37 | CLK | 9 | 4 | 2 |
| GND | VSS | GND | 4, 6 … 20 | 3, 5 | 3 |
| VTref | VDD, 3,3 В | 3V3 | 1 (VAPP) | 1 | 1 |
| NRST | NRST, вывод 7 | R на длинной гребёнке | 15 | 10 | 5 |
| SWO, необязательно | PB3, вывод 39 | B3 | 13 | 6 | 6 |
Внешние подтяжки на 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 В.
Источники
- IEEE 1149.1. Standard for Test Access Port and Boundary-Scan Architecture — стандарт JTAG: линии TCK, TMS, TDI, TDO и необязательная TRST
- Arm. Cortex-M Debug Connectors — разъёмы Cortex Debug на 10 контактов, Cortex Debug+ETM на 20 и 20-контактный JTAG IDC
- Arm. ULINKpro User's Guide (101416): Cortex Debug (10-pin) — SWD на выводах JTAG: TCK — SWCLK, TMS — SWDIO, TDO — SWO; подтяжки 100 кОм
- SEGGER. 20-pin J-Link Connector — назначение контактов в режимах JTAG и SWD, питание 5 В до 300 мА на контакте 19
- SEGGER. VTref — VTref — опорное напряжение, а не питание платы
- ST. UM1075: ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32 (Rev 10) — табл. 4 — 20-контактный разъём; напряжение 1,65–3,6 В; частоты SWD и JTAG
- ST. UM2448: STLINK-V3SET debugger/programmer for STM8 and STM32 (Rev 8) — табл. 6 — STDC14, табл. 7 — 20-контактный разъём, табл. 15–16 — шлейфы на ARM10 и ARM20
- ST. UM2910: STLINK-V3MINIE debugger/programmer tiny probe for STM32 (Rev 3) — табл. 4 — разъём STDC14; не питает плату; 1,65–3,6 В
- ST. UM1724: STM32 Nucleo-64 boards (Rev 14) — табл. 5 — разъём SWD CN4 встроенного ST-LINK/V2-1, перемычки CN2
- ST. RM0008: STM32F101xx–STM32F107xx reference manual (Rev 21) — разд. 31.4 — выводы SWJ-DP, встроенные подтяжки, поле SWJ_CFG
- ST. STM32F103x8, STM32F103xB datasheet, DS5319 (Rev 20) — табл. 5 — выводы корпуса LQFP48; предельное напряжение питания 4,0 В
- ST. UM2237: STM32CubeProgrammer software description (Rev 25) — режим Connect under reset, частота подключения, команды CLI
- OpenOCD User's Guide — команды program и adapter speed
- STM32-base. STM32F103C8T6 Blue Pill — гребёнка SWD платы: 3V3, DIO, CLK, GND; питание платы
- Sduino. Flash tool: ST-Link V2 clones — два варианта клонов ST-LINK/V2 с разной распиновкой разъёма
Смотрите также
- РаспиновкиРазъёмы, микросхемы, модули: выводы и их назначение
- ARM Cortex-MЯдра M0–M85: архитектуры, FPU, DSP, MPU, TrustZone, выбор
- Cortex-M3Регистры, карта памяти, bit-banding, NVIC, SysTick, MPU, старт, пример
- МикроконтроллерыAVR, ARM Cortex-M, ESP32, PIC, MSP430: архитектура и выбор
- ПрограммыСАПР плат, симуляторы схем, среды и утилиты прошивки МК
- AVR ISP, UPDI и TPIISP 6 и 10 pin, USBasp, UPDI и TPI