JTAG
Через JTAG прошивают и отлаживают микроконтроллеры, а изначально он появился для проверки паяных соединений на плате — граничного сканирования. Интерфейс занимает четыре-пять выводов, и на некоторых ATmega он включён с завода, поэтому часть порта не работает как обычные GPIO.
Обновлено Редакция GAW
Содержание
JTAG (Joint Test Action Group, стандарт IEEE 1149.1) — синхронный последовательный интерфейс доступа к внутренним регистрам микросхемы. Его используют для граничного сканирования (проверки соединений на плате), прошивки флеш-памяти и отладки: остановки ядра, точек останова, чтения памяти. Внутри микросхемы интерфейс обслуживает автомат TAP (test access port).
Сигналы
| Сигнал | Назначение |
|---|---|
| TCK | тактовый сигнал, все операции синхронны с ним |
| TMS | выбор режима — переходы автомата TAP |
| TDI | вход данных в регистр команд или данных |
| TDO | выход данных |
| TRST | асинхронный сброс TAP, по стандарту необязателен |
У ATmega16 сигнала TRST нет — интерфейс четырёхпроводной, а вывод TDO в паузах не управляется и требует подтяжки. У STM32F4 TRST есть (вывод NJTRST), и JTAG-DP занимает пять выводов. Разводка стандартных разъёмов — на странице распиновки JTAG и SWD.
Цепочка TAP
Устройства на плате соединяют в цепочку: TDO одного идёт на TDI следующего. Даже внутри одной микросхемы TAP может быть несколько. В STM32F4 последовательно стоят TAP граничного сканирования с 5-битным регистром команд и TAP ядра Cortex-M4 с 4-битным, поэтому отладчик сдвигает 9 бит команды и переводит ненужную TAP в BYPASS (RM0090, разд. 38.5). Идентификационный код TAP граничного сканирования у STM32F405/407 — 0x06413041, у ядра Cortex-M4 — 0x4BA00477.
JTAG и GPIO
Выводы JTAG делят с портами ввода-вывода, и это главный источник сюрпризов:
- STM32. После сброса PA13, PA14, PA15, PB3 и PB4 отданы отладке: PA15 (JTDI), PA13 (JTMS) и PB4 (NJTRST) с подтяжкой вверх, PA14 (JTCK) — вниз, PB3 (JTDO) без подтяжки (RM0090, разд. 8.3.1). Оставить только SWD и освободить PA15, PB3 и PB4 можно, но по-разному. У STM32F1 это делают полем SWJ_CFG[2:0] регистра AFIO_MAPR: значение 010 выключает JTAG-DP и оставляет SW-DP (RM0008, разд. 9.4.2). У STM32F4 блока AFIO нет: программа просто перенастраивает PA15, PB3 и PB4 в регистре GPIOx_MODER (и при необходимости AFR), и они становятся обычными GPIO (RM0090, разд. 38.4.4). Подробности — в ответе как освободить выводы JTAG.
- ATmega16 и ATmega32. JTAG занимает PC2–PC5, и фьюз JTAGEN с завода запрограммирован. Отключают его фьюзом или битом JTD в MCUCSR. Если JTAG не используется, Microchip советует отключить фьюз: открытый TDO даёт лишний статический ток.
Прошивка и отладка AVR по JTAG, ISP и debugWIRE сравниваются в статье о программировании AVR.
Частые вопросы
Почему у ATmega16 и ATmega32 не работают выводы PC2–PC5?
На них выведен JTAG, а фьюз JTAGEN в новых микросхемах запрограммирован — интерфейс включён (ATmega16, табл. 105). Пока JTAG активен, эти четыре вывода не работают как обычный порт. Выход — снять фьюз JTAGEN программатором или записать 1 в бит JTD регистра MCUCSR из программы; бит пишут дважды подряд за четыре такта.
Чем JTAG отличается от SWD?
JTAG — универсальный стандарт IEEE 1149.1 с четырьмя-пятью сигналами, цепочкой из нескольких устройств и граничным сканированием. SWD — двухпроводной отладочный порт Arm только для ядер Cortex. В STM32 оба входят в порт SWJ-DP: после сброса доступны оба, а два вывода SWD совмещены с выводами JTAG (RM0090, разд. 38.3).
Что такое граничное сканирование?
Режим, в котором JTAG управляет и читает состояние выводов микросхемы через цепочку ячеек на её границе, не запуская программу. Так проверяют пайку и соединения на собранной плате. В STM32F4 для этого есть отдельная TAP граничного сканирования, последовательно соединённая с TAP ядра Cortex-M4 (RM0090, разд. 38.5).
Источники
- STMicroelectronics. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437, STM32F429/439, Rev 21 — разд. 38.3: порт SWJ-DP объединяет JTAG-DP на 5 выводах и SW-DP на 2 выводах, два вывода SW-DP совмещены с выводами JTAG; разд. 38.5: в STM32F4 две последовательно соединённые TAP — граничного сканирования (регистр команд 5 бит) и Cortex-M4 (4 бита), неиспользуемую переводят в BYPASS; после выбора SWD TAP граничного сканирования отключается; разд. 38.6: JTAG ID кода граничного сканирования 0x06413041 у STM32F405/407/415/417 и 0x06419041 у F42x/F43x, ID TAP Cortex-M4 — 0x4BA00477; разд. 38.4.4: при работе по SWD программа освобождает PA15, PB3 и PB4, меняя их режим в регистре GPIO_MODER; разд. 8.3.1: после сброса PA15 JTDI с подтяжкой вверх, PA14 JTCK/SWCLK — вниз, PA13 JTMS/SWDIO — вверх, PB4 NJTRST — вверх, PB3 JTDO без подтяжки
- STMicroelectronics. RM0008 Reference manual STM32F101/102/103/105/107, Rev 21 — разд. 9.4.2, регистр AFIO_MAPR, биты 26:24 SWJ_CFG[2:0]: 000 — полный SWJ (JTAG-DP + SW-DP), состояние после сброса; 001 — без NJTRST; 010 — JTAG-DP выключен, SW-DP включён; 100 — оба выключены
- Atmel (Microchip). ATmega16(L) datasheet, 2466T–AVR–07/10 — Features: интерфейс JTAG по IEEE std. 1149.1; разд. «IEEE 1149.1 (JTAG) Boundary-scan», «Test Access Port – TAP»: сигналы TMS, TCK, TDI, TDO, необязательный TRST не реализован; при незапрограммированном фьюзе JTAGEN четыре вывода TAP — обычные выводы порта; при включённом JTAG вывод TDO в паузах не управляется, нужна подтяжка; табл. 105: JTAGEN по умолчанию 0 — запрограммирован, JTAG включён; прим. 5: если JTAG не используется, фьюз JTAGEN лучше отключить; JTAG отключает и бит JTD в MCUCSR; выводы PC2 (TCK), PC3 (TMS), PC4 (TDO), PC5 (TDI)
Нашли ошибку?
Смотрите также
- JTAG и SWDARM JTAG 20, Cortex Debug 10, STDC14, ST-LINK
- SWDSerial Wire Debug: отладка и прошивка Cortex-M по двум проводам
- Точка остановаАдрес, на котором отладчик останавливает выполнение программы
- Фьюзы AVRБиты конфигурации AVR: тактирование, загрузчик, BOD
- Прошивка AVRISP, HVPP, debugWIRE, JTAG, PDI, TPI, UPDI, загрузчики, avrdude
- Как освободить PB3, PB4 и PA15 на STM32F103?SWJ_CFG = 010: JTAG выключен, SWD остаётся