CMSIS-DAP
Отладочные адаптеры разных фирм говорят с компьютером на своих протоколах, и каждой среде нужен свой драйвер. Arm предложила общий язык — CMSIS-DAP: адаптер, который его понимает, работает с любой поддерживающей стандарт средой.
Обновлено Редакция GAW
CMSIS-DAP — стандарт Arm для отладочных адаптеров: спецификация протокола между компьютером и адаптером плюс открытая эталонная прошивка самого адаптера. По документации Arm, он даёт инструментам одинаковый доступ к порту отладки CoreSight — Debug Access Port — в ядрах Cortex. К цели адаптер подключается по 5-проводному JTAG или 2-проводному SWD, к компьютеру — по USB; дополнительно он может пробросить UART платы как COM-порт.
Как устроен
Отладчик на компьютере посылает адаптеру команды CMSIS-DAP: прочитать или записать регистр порта отладки, выполнить серию транзакций SWD, сбросить цель. Адаптер переводит их в сигналы на выводах. Поскольку набор команд общий, среде разработки не нужен отдельный драйвер на каждую модель адаптера. Документация перечисляет среди поддерживающих стандарт Keil MDK, IAR Embedded Workbench, SEGGER Embedded Studio, PlatformIO, pyOCD и OpenOCD, а среди адаптеров — ULINKplus, J-Link и встроенные отладчики плат многих производителей.
Версии 1 и 2
| CMSIS-DAP v1 | CMSIS-DAP v2 | |
|---|---|---|
| Транспорт USB | отчёты HID | bulk-передачи, класс 0xFF |
| Поток SWO | нет отдельного канала | отдельная конечная точка Bulk In |
| Драйвер | встроенный HID | WinUSB по дескрипторам Microsoft, в Linux и macOS не нужен |
| Статус | устарела | рекомендуется |
По документации прошивки, у адаптера v2 три конечные точки: Bulk Out для команд, Bulk In для ответов и необязательная Bulk In для потока трассировки. Для автоматической установки в Windows адаптер объявляет WinUSB GUID {CDB3B5AD-293B-4663-AA36-1AAE46463776}. В OpenOCD транспорт выбирают командой cmsis-dap backend: usb_bulk для v2, hid для v1, auto пробует сначала v2.
Требования к самодельному адаптеру
Эталонная прошивка рассчитана на микроконтроллер Cortex-M с частотой от 48 МГц и таймером SysTick, не меньше 8 КБ ОЗУ и 16 КБ флеш-памяти, с контроллером USB Full Speed или High Speed и семью выводами для JTAG и SWD; для приёма SWO и COM-порта нужны свободные UART. В строке названия USB-устройства обязательно слово «CMSIS-DAP» — по нему отладчики находят адаптер. Сравнение готовых адаптеров — в обзоре программаторов и отладчиков.
Частые вопросы
Чем CMSIS-DAP v1 отличается от v2?
Транспортом USB. Версия 1 передаёт команды отчётами HID — по руководству OpenOCD, «USB HID generic reports». Версия 2 использует bulk-передачи и по документации Arm поэтому быстрее; у неё есть отдельная конечная точка для потока трассировки SWO. Arm называет v1 устаревшей и не рекомендует её для новых разработок.
Нужен ли драйвер для адаптера CMSIS-DAP?
Обычно нет. Адаптер v2 объявляет себя устройством WinUSB с дескрипторами Microsoft (WCID), и Windows 8 и новее, macOS и Linux подключают его без отдельного драйвера, — так пишет документация Arm. Адаптер v1 работает как HID-устройство, для которого драйвер есть в любой системе.
Можно ли сделать адаптер CMSIS-DAP самому?
Да, Arm публикует прошивку под лицензией Apache 2.0. По её документации нужен микроконтроллер Cortex-M с тактовой частотой от 48 МГц, не меньше 8 КБ ОЗУ и 16 КБ флеш-памяти, USB Full Speed или High Speed и семь выводов для JTAG и SWD. В строке названия устройства должно быть «CMSIS-DAP», иначе отладчики его не опознают.
Источники
- Arm. CMSIS-DAP documentation, version 2.1.2: Overview, CMSIS-DAP Firmware, Revision History (Apache 2.0) — Overview: CMSIS-DAP — спецификация протокола и реализация прошивки для стандартного доступа к CoreSight DAP; подключение к цели по 5-проводному JTAG или 2-проводному SWD, к компьютеру — по USB; опционально UART; v1.x устарела, рекомендуется v2.x с высокоскоростным потоком SWO и без установки драйверов; инструменты: Keil MDK, IAR EWARM, SEGGER Embedded Studio, PlatformIO, pyOCD, OpenOCD; адаптеры ULINKplus, J-Link и встроенные в платы. Firmware: требования к адаптеру — Cortex-M от 48 МГц, 8 КБ ОЗУ, 16 КБ флеш, USB Full или High Speed, 7 выводов JTAG/SWD; v2 — класс 0xFF, конечные точки Bulk Out (команды), Bulk In (ответы), опционально Bulk In для потока SWO; строка продукта должна содержать «CMSIS-DAP»; WinUSB GUID {CDB3B5AD-293B-4663-AA36-1AAE46463776}, WCID; CDC для COM-порта
- Arm. CMSIS 5 DAP documentation, Configure USB Peripheral — CMSIS-DAP v2 использует bulk-конечные точки и поэтому быстрее устаревшей v1; Windows 8 и новее не требует драйвера WinUSB при поддержке дескрипторов Microsoft
- The OpenOCD Project. OpenOCD User's Guide for release 0.12.0+dev, 26 October 2026, разд. 8.2 «Interface Drivers» — драйвер cmsis-dap: адаптер v1 (на USB HID) или v2 (USB bulk или TCP/IP); cmsis-dap backend hid — CMSIS-DAP v1, usb_bulk — CMSIS-DAP v2, auto — сначала v2, затем v1, затем TCP
Нашли ошибку?
Смотрите также
- Порт доступа к отладке (DAP)Узел Arm между отладчиком и шиной кристалла: DP плюс порты AP
- SWDSerial Wire Debug: отладка и прошивка Cortex-M по двум проводам
- SWO (вывод трассировки)Однопроводный вывод трассировки и отладочных сообщений Cortex-M
- OpenOCDОткрытый сервер отладки: адаптеры, конфигурации, порты GDB и telnet, запись флеш
- Программаторы и отладчикиUSBasp, ST-LINK, J-Link, PICkit 5, Snap, CMSIS-DAP, WCH-LinkE: сравнение
- CMSISСтандарт Arm: заголовки ядра Cortex-M, драйверы, RTOS и описание устройств