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

Порт доступа к отладке (DAP)

JTAG и SWD — только провода и протокол. За ними в каждом Cortex-M стоит один и тот же узел, через который отладчик читает память и останавливает ядро, — порт доступа к отладке.

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

Порт доступа к отладке (DAP, Debug Access Port) — узел архитектуры отладки Arm ADIv5, через который внешний отладчик получает доступ к ресурсам кристалла. Он состоит из двух частей: одного порта отладки (DP, Debug Port) со стороны разъёма и одного или нескольких портов доступа (AP, Access Port) со стороны кристалла (Arm IHI 0031G, разд. A1.3). Протоколы JTAG и SWD — лишь транспорт до DP; всё остальное отладчик делает через AP.

Порт отладки DP

DP принимает запросы отладчика по выбранному протоколу. ADIv5 знает три типа: JTAG-DP, SW-DP и SWJ-DP, который понимает оба протокола на общих выводах (разд. A1.4). Регистры DP:

РегистрНазначение
DPIDRидентификатор порта отладки
CTRL/STATфлаги ошибок, запросы включения питания отладки и системы
SELECTкакой AP и какой банк его регистров выбран
RDBUFFрезультат последнего отложенного чтения AP
ABORTпрервать зависшее обращение, сбросить флаги ошибок

Пример: у STM32F4 SW-DP отвечает идентификатором 0x2BA01477, а тот же порт в режиме JTAG — IDCODE 0x4BA00477 (RM0090, гл. 38).

Порты доступа AP

AP выполняет обращения к конкретному ресурсу. По IHI 0031G это могут быть отладочные регистры ядра, регистры трассировки ETM, ROM-таблица со списком отладочных блоков, память или старое устройство с собственным JTAG (через JTAG-AP). Главный для микроконтроллеров — MEM-AP: три его регистра превращают запросы отладчика в обращения к шине.

  • CSW — размер и режим обращения (8, 16, 32 бита, автоинкремент адреса);
  • TAR — адрес;
  • DRW — данные: запись в DRW пишет по адресу из TAR, чтение — читает оттуда.

Через MEM-AP отладчик пишет в отладочные регистры ядра (останов, шаг, точки останова), загружает программу в ОЗУ и управляет контроллером флеш-памяти при прошивке. Так как MEM-AP — отдельный ведущий на шине, память и периферию можно читать, не останавливая ядро.

Как идёт обращение

  1. Отладчик записывает в DP SELECT номер AP и банк регистров.
  2. Записывает в TAR нужный адрес.
  3. Читает DRW. Чтение AP отложенное и по SWD, и по JTAG-DP. По SWD ответ на первое чтение — неизвестное значение, результат приходит со следующим чтением AP или чтением RDBUFF (IHI 0031G, разд. B4.2.2). У JTAG-DP запрос чтения сдвигается в одном скане APACC, а данные возвращаются в состоянии Capture-DR следующего скана; последнее значение забирают чтением RDBUFF (разд. B3.4).

Спецификация требует, чтобы набор AP не зависел от протокола (разд. B5.1.1): поэтому для отладки Cortex-M одинаково, подключён ли адаптер по JTAG или по SWD. Пример полной последовательности подключения к STM32F4 — в статье «JTAG и SWD», обзор адаптеров ST-LINK, J-Link и CMSIS-DAP — в статье «Программаторы и отладчики».

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

Чем DP отличается от AP?

DP (Debug Port) — сторона разъёма: он понимает протокол JTAG или SWD и хранит служебные регистры — идентификатор, флаги ошибок, выбор AP. AP (Access Port) — сторона кристалла: он выполняет обращения к конкретному ресурсу. Отладчик всегда говорит с DP, а к AP обращается через него, выбрав нужный в регистре SELECT.

Почему отладчик может читать память, не останавливая программу?

Потому что MEM-AP — отдельный ведущий на шине кристалла. Записью адреса в TAR и чтением DRW он выполняет обычное обращение к шине параллельно с ядром. Так работают живые окна переменных в IDE и чтение памяти на ходу; ядро при этом продолжает выполнять программу.

Есть ли разница для отладки Cortex-M между JTAG и SWD?

Для доступа к ресурсам — нет. Спецификация ADIv5 требует, чтобы набор AP не зависел от выбранного протокола: и JTAG-DP, и SW-DP ведут к тем же портам доступа. Отличаются число выводов, скорость, возможность цепочки кристаллов и граничного сканирования — это уже свойства протокола, а не DAP.

Источники

  1. Arm. Arm Debug Interface Architecture Specification ADIv5.0 to ADIv5.2 (IHI 0031G, ID022122) — разд. A1.3: DAP состоит из одного DP и не меньше одного AP; примеры ресурсов AP — отладочные регистры ядра, регистры ETM, ROM-таблица, память, старое устройство с JTAG; через DPACC отладчик пишет SELECT (выбор AP) и читает CTRL/STAT (флаги ошибок); разд. A1.4: типы DP — JTAG-DP, SW-DP, SWJ-DP; DP даёт идентификатор DAP и способ прервать зависшее обращение; гл. B2: регистры DPIDR, CTRL/STAT, SELECT, RDBUFF, ABORT; разд. B3.4: у JTAG-DP результат обращения возвращается в следующем скане DPACC или APACC, обращения конвейеризуются, последний результат — из RDBUFF; разд. B4.2.2: у SW-DP чтение AP отложенное, результат — со следующим чтением AP или RDBUFF; разд. B5.1.1: набор AP не зависит от выбранного протокола; гл. C2: MEM-AP, регистры CSW, TAR, DRW
  2. STMicroelectronics. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437, STM32F429/439 (Rev 21) — гл. 38: SWJ-DP STM32F4, идентификаторы JTAG-DP 0x4BA00477 и SW-DP 0x2BA01477; AHB-AP для доступа к шине

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