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

IDCODE

Первое, что делает отладчик после подключения по JTAG, — читает из каждой микросхемы цепочки 32-битный номер. По нему он узнаёт, кто стоит в цепочке, и проверяет, что провода подключены правильно.

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

IDCODE — необязательный 32-битный регистр данных JTAG с идентификатором микросхемы и одноимённая команда, которая подключает его между TDI и TDO. Стандарт IEEE 1149.1 задаёт формат регистра, а код команды выбирает производитель. Чтение не мешает работе микросхемы, и регистр должен быть доступен сразу после включения питания или сброса TAP-контроллера: если микросхема поддерживает IDCODE, при сбросе эта команда загружается в регистр команд сама (TI SSYA002D, гл. 3).

Формат

БитыПолеСодержание
31–28Versionверсия, ревизия кристалла
27–12Part Numberномер изделия, задаёт производитель
11–1Manufacturer Identityкод производителя по списку JEDEC JEP106
0—всегда 1

Формат — по рис. 3-8 SSYA002D. Бит 0 нужен для поиска цепочки: после сброса микросхемы без IDCODE подключают однобитный регистр обхода, и отладчик по первому выдвинутому биту отличает 32-битный идентификатор от одного бита BYPASS. Так он узнаёт число TAP в цепочке и их идентификаторы без всякой настройки.

Пример: STM32F4

RM0090 приводит коды обоих TAP в цепочке STM32F4 (разд. 38.6). Разбор по полям — наш:

TAPIDCODEВерсияИзделиеПроизводитель
Граничное сканирование STM32F405/407/415/4170x0641304100x64130x020
Граничное сканирование STM32F42x/43x0x0641904100x64190x020
JTAG-DP ядра Cortex-M4 с FPU0x4BA0047740xBA000x23B

Младшие 12 бит номера изделия — 0x413 и 0x419 — совпадают с кодом DEV_ID, который программа читает из регистра DBGMCU_IDCODE (наше наблюдение по RM0090). Порт отладки в режиме SWD отвечает своим кодом — 0x2BA01477 в регистре DPIDR. Коды 0x4BA00477 и 0x2BA01477 описывают порт отладки ядра Arm, а не сам кристалл ST, поэтому модель микросхемы отладчик уточняет по другим регистрам.

Чем IDCODE не является

IDCODE описывает тип кристалла, а не конкретный экземпляр: у всех STM32F407 он одинаковый. Для серийного номера экземпляра у микроконтроллеров есть отдельный уникальный идентификатор, а у AVR — сигнатурные байты, которые программатор читает по ISP. Подробнее о командах и регистрах JTAG — в статье «JTAG и SWD».

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

Зачем в IDCODE бит 0 всегда равен 1?

Чтобы отличить его от регистра обхода. После сброса TAP у микросхемы с IDCODE между TDI и TDO подключён этот регистр, а у микросхемы без него — однобитный регистр обхода. Отладчик сдвигает данные через цепочку и по первому выдвинутому биту понимает, что перед ним: единица — начало 32-битного IDCODE, иначе — один бит обхода.

Что значит IDCODE 0x4BA00477?

Это идентификатор порта отладки JTAG-DP от Arm, его ставят многие производители Cortex-M. Разбор по полям: версия 4, номер изделия 0xBA00, код производителя 0x23B — это Arm по списку JEDEC JEP106. У STM32F4 RM0090 называет его кодом JTAG-DP ядра Cortex-M4 с FPU ревизии r0p1.

Отладчик читает IDCODE 0xFFFFFFFF или 0x00000000. Что не так?

Скорее всего, нет связи: оборвана или не подключена линия TDO (одни единицы или нули), не подан общий провод или питание кристалла, неверно задан уровень VTref. Реже кристалл держат в сбросе или выводы JTAG переназначены программой. Чтение IDCODE — первая проверка подключения именно поэтому.

Источники

  1. Texas Instruments. IEEE Std 1149.1 (JTAG) Testability Primer (SSYA002D, 1997) — гл. 3, рис. 3-8: регистр идентификатора необязателен, 32 бита: версия (биты 31–28), номер изделия (27–12), код производителя (11–1), бит 0 всегда 1; команда IDCODE оставляет микросхему в рабочем режиме, код команды задаёт производитель; регистр должен быть доступен сразу после включения питания или сброса TAP; при сбросе в регистр команд загружается IDCODE, если она поддерживается, иначе BYPASS
  2. STMicroelectronics. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437, STM32F429/439 (Rev 21) — разд. 38.6: ID-код TAP граничного сканирования 0x06413041 для STM32F405xx/07xx и STM32F415xx/17xx, 0x06419041 для STM32F42xxx и STM32F43xxx; JTAG-DP — 0x4BA00477 (Cortex-M4 с FPU r0p1), SW-DP — 0x2BA01477; команда IDCODE JTAG-DP — 1110
  3. Arm. Arm Debug Interface Architecture Specification ADIv5.0 to ADIv5.2 (IHI 0031G) — гл. B3: регистр IDCODE JTAG-DP длиной 32 бита, команда IR 1110 в 4-битной кодировке

Нашли ошибку?