Порт доступа к отладке (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 — отдельный ведущий на шине, память и периферию можно читать, не останавливая ядро.
Как идёт обращение
- Отладчик записывает в DP SELECT номер AP и банк регистров.
- Записывает в TAR нужный адрес.
- Читает 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.
Источники
- 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
- 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 для доступа к шине
Нашли ошибку?
Смотрите также
- JTAG и SWDTAP из 16 состояний, IR/DR, пакеты SWD, ACK, DP и AP, SWO, VTref
- SWDSerial Wire Debug: отладка и прошивка Cortex-M по двум проводам
- JTAGПоследовательный интерфейс тестирования и отладки по IEEE 1149.1: TCK, TMS, TDI, TDO
- IDCODE32-битный идентификатор микросхемы в JTAG: версия, изделие, производитель
- Точка остановаАдрес, на котором отладчик останавливает выполнение программы
- Программаторы и отладчикиUSBasp, ST-LINK, J-Link, PICkit 5, Snap, CMSIS-DAP, WCH-LinkE: сравнение
- OpenOCDОткрытый сервер отладки: адаптеры, конфигурации, порты GDB и telnet, запись флеш
- CMSIS-DAPСтандартный протокол отладочного адаптера: SWD и JTAG по USB, версии 1 и 2