IDCODE
Первое, что делает отладчик после подключения по JTAG, — читает из каждой микросхемы цепочки 32-битный номер. По нему он узнаёт, кто стоит в цепочке, и проверяет, что провода подключены правильно.
Обновлено Редакция GAW
IDCODE — необязательный 32-битный регистр данных JTAG с идентификатором микросхемы и одноимённая команда, которая подключает его между TDI и TDO. Стандарт IEEE 1149.1 задаёт формат регистра, а код команды выбирает производитель. Чтение не мешает работе микросхемы, и регистр должен быть доступен сразу после включения питания или сброса TAP-контроллера: если микросхема поддерживает IDCODE, при сбросе эта команда загружается в регистр команд сама (TI SSYA002D, гл. 3).
Формат
| Биты | Поле | Содержание |
|---|---|---|
| 31–28 | Version | версия, ревизия кристалла |
| 27–12 | Part Number | номер изделия, задаёт производитель |
| 11–1 | Manufacturer Identity | код производителя по списку JEDEC JEP106 |
| 0 | — | всегда 1 |
Формат — по рис. 3-8 SSYA002D. Бит 0 нужен для поиска цепочки: после сброса микросхемы без IDCODE подключают однобитный регистр обхода, и отладчик по первому выдвинутому биту отличает 32-битный идентификатор от одного бита BYPASS. Так он узнаёт число TAP в цепочке и их идентификаторы без всякой настройки.
Пример: STM32F4
RM0090 приводит коды обоих TAP в цепочке STM32F4 (разд. 38.6). Разбор по полям — наш:
| TAP | IDCODE | Версия | Изделие | Производитель |
|---|---|---|---|---|
| Граничное сканирование STM32F405/407/415/417 | 0x06413041 | 0 | 0x6413 | 0x020 |
| Граничное сканирование STM32F42x/43x | 0x06419041 | 0 | 0x6419 | 0x020 |
| JTAG-DP ядра Cortex-M4 с FPU | 0x4BA00477 | 4 | 0xBA00 | 0x23B |
Младшие 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 — первая проверка подключения именно поэтому.
Источники
- 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
- 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
- Arm. Arm Debug Interface Architecture Specification ADIv5.0 to ADIv5.2 (IHI 0031G) — гл. B3: регистр IDCODE JTAG-DP длиной 32 бита, команда IR 1110 в 4-битной кодировке
Нашли ошибку?
Смотрите также
- JTAG и SWDTAP из 16 состояний, IR/DR, пакеты SWD, ACK, DP и AP, SWO, VTref
- TAP-контроллер JTAGКонечный автомат JTAG из 16 состояний, которым управляют TMS и TCK
- JTAGПоследовательный интерфейс тестирования и отладки по IEEE 1149.1: TCK, TMS, TDI, TDO
- Уникальный идентификатор (UID)Заводской 96-битный номер кристалла STM32
- Сигнатура AVR (signature bytes)Три заводских байта, по которым программатор опознаёт кристалл
- DBGMCU (блок отладки MCU)Блок STM32, управляющий периферией и сном во время отладки