Cmsis dap что это
Перейти к содержимому

Cmsis dap что это

  • автор:

Cmsis dap что это

Cortex Microcontroller Software Interface Standard (CMSIS) обеспечивает полную поддержку устройств и предоставляет простые программные интерфейсы к ядру процессора и его периферийным устройствам. По сути это набор библиотек, упрощающих для разработчиков повторное использование кода, обучение программированию новых моделей микроконтроллеров (MCU), что в результате уменьшает время выхода на рынок новых встраиваемых устройств.

Начиная с библиотеки CMSIS-CORE, предоставляющей независимый от производителей слой абстракции для аппаратуры процессоров Cortex-M, в настоящий момент CMSIS расширяется в такие области, как управление программными компонентами и поддержка интерфейсов отладки. Создание ПО это самый главный ценовой фактор в индустрии встраиваемых приложений. Стандартизация программных интерфейсов обеспечивает использование продукции Cortex-M всех производителей, упрощает миграцию ПО на новые устройства, что значительно снижает затраты на разработку.

CMSIS был определен в близкой кооперации с разными производителями процессоров и компиляторов. Обеспечивается общий интерфейс к периферийным устройствам, операционным системам реального времени (RTOS) и компонентам библиотек сторонних производителей.

CMSIS-SVD обеспечивает целостный взгляд на MCU и его периферийные устройства. Для каждого поддерживаемого микроконтроллера отладчики могут предоставить подробный просмотр периферийных устройств и текущее состояние регистров. Файлы CMSIS-SVD [2] обеспечивают этот просмотр и гарантируют, что отображение отладчика соответствует актуальной реализации периферийных устройств MCU.

Последняя версия библиотеки CMSIS (ver. 5) опубликована на GitHub [3].

CMSIS-RTOS обеспечивает строго определенный в реальном времени выполнение кода программы (Deterministic Real-Time Software Execution). Концепция super-loop (бесконечный цикл в функции main) адекватна только для простых встраиваемых приложений. Микроконтроллеры Cortex-M разработаны в расчете на использование операционных систем реального времени (RTOS), которые дают более гибкое управление ресурсами и процессорным временем MCU.

CMSIS-RTOS это API, предоставляющее программные слои для промежуточных и библиотечных компонентов. CMSIS-RTOS RTX работает на каждом устройстве Cortex-M, она признана как образцовая реализация RTOS, простая в освоении и использовании.

CMSIS-DSP это быстрая библиотечная реализация цифровой обработки сигналов. Разработка приложений цифровой обработки сигналов (DSP) весьма не тривиальна, так как алгоритмы DSP создают большую нагрузку комплексных математических операций, которые критичны к времени выполнения.

В библиотеке CMSIS-DSP собран богатый набор функций DSP, которые оптимизированы для различных ядер Cortex-M. CMSIS-DSP широко используется в индустрии, и позволяет также использовать оптимизированную генерацию кода языка C от различных инструментов сторонних производителей.

CMSIS-Driver: стандартные интерфейсы к периферийным устройствам для промежуточных библиотек и кода приложения. Подключение к периферийным устройствам со стороны приложения может усложняться, когда каждый раз используется другая модель MCU. Готовые интерфейсы CMSIS-Driver решают эту проблему, так как они поддерживают почти все доступные на сегодняшний день модели MCU. Это значительно упрощает написание ПО и портирование драйверов на различные процессоры.

CMSIS-Packs: простой доступ к повторно используемым программным компонентам. В прежние времена программные модули сложно интегрировались в проект, так как их исходный код и заголовочные файлы требовали непрозрачных зависимостей, не имели целостной документации, или в них отсутствовала информация о лицензировании. Поскольку CMSIS-Packs определяет структуру программных пакетов, где содержатся программные компоненты, то эти проблемы решены. Теперь программные библиотеки просто выбрать, и ясно определены их зависимости от других программных компонентов [4].

CMSIS-DAP: поддержка недорогих плат разработчика. Многие производители MCU выпускают оценочные платы, демонстрирующие возможности продукции. Часто на этих платах интегрирован недорогой отладчик, однако различные интерфейсы требуют специфической настройки инструментария. CMSIS-DAP это стандартизованный интерфейс к порту отладки (Cortex Debug Access Port, DAP), и он используется многими стартовыми наборами, и поддерживается различными отладчиками.

CMSIS-NN: эффективные ядра нейронных сетей. Это коллекция библиотек, разработанных для максимальной производительности и уменьшения потребляемой памяти на ядрах процессоров Cortex-M [5].

[Ссылки]

1. Cortex Microcontroller Software Interface Standard site:arm.com.
2. CMSIS-SVD System View Description site:arm-software.github.io.
3. CMSIS 5.5.1 site:github.com.
4. CMSIS-Packs site:developer.arm.com.
5. CMSIS NN Software Library site:arm-software.github.io.

CMSIS-DAP на STM32F4Discovery

Тут уже лет 5 назад упоминали о таком, но мало ли. CMSIS-DAP какой-то канонный опенсорсный интерфейс отладки от ARM для кортексов на базе протокола USB HID. Т.е. не привязанный к конкретному производителю контроллеров и не требующий драйвера.
Более мощная версия этой штуки (со всякими балалайками, типа популярной нынче прошивки через MSD, или USB-UART) развивается mbedом и называется DAPLink.

Распиновка SWD:
PD7 — Reset
PB3 — SWCLK
PB5 — SWDIO

Распиновка JTAG:
PD7 — Reset
PB3 — TCK
PB4 — TDI
PB5 — TMS
PB6 — TDO

P.S. Кстати, может, кто не знает, но атмеловский EDBG-отладчик (и ему подобные) сделан на этой основе, и даже выложен протокол расширения на атмеловские чипы. В т.ч. AVR, XMega, AVR32, включая и отладку по JTAG/debugWire/PDI/SWD, и прошивку по тому же самому+ISP/TPI и что там ещё. Насколько я помню, debugWire кто-то расковыривал в интернете.
Т.ч. энтузиасты могут попробовать это дело объединить, особенно, если у них есть работающий образец такого отладчика, который можно проснифать с помощью USB Logger и логическим анализатором, и, теоретически, получить опенсорсный отладчик на любом усбшном контроллере.

UPD: в аттаче ещё то же самое для STM32F3Discovery и STM32F103.

Файлы в топике: stm32f4dap_source.zip, stm32f4dap.zip, stm32f3dap.zip, stm32f1dap.zip

Комментарии ( 6 )

ИМХО, наркоманство. Может атмелам и в помощь, но STM32 таскать на борту кусок кода… Хммм. Поясните, если не сложно.

Ну, контроллеры и сделаны для того, чтоб таскать на своём борту код…

В текущем виде — это отладчик-программатор для Cortex-M/A по JTAG/SWD. Не без странностей, но работает.
Про атмел это общие соображения — у них в отладчиках сделано расширение этой штуки под свои протоколы, что вполне реально повторить. Самое сложное — программные брекпоинты. Фз, как они там сделаны. В крайнем случае, для лайт-версии можно и забить на них. Там один или два аппаратных есть…
Т.е. этот программатор уже в атмел студии в списке программаторов числится, разве что не работает.

Вот интересный проект по теме. Без странностей и вполне работоспособный. Я его пару лет назад ковырял, когда свой программатор делал.

Да, я тут гуглил интересное и находил его =) Но он есть под эту плату вполне себе скомпилированный и, наверное, даже рабочий.
Бинарник я себе скачал — потребуется, воспользуюсь =) Правда, в кейле он не поддерживается, надо использовать другую среду.

Но цель — в изучении USB на примерах разных несложных устройств, так что CMSIS-DAP тут хорошо вписывается.

Что-я вообще не понял зачем это. Ведь во всех средах разработки есть и отладчик и программаторы есть.

В средах они есть, а вот в физическом воплощении отладчик под рукой не всегда имеется. Тем, у кого есть что-то вроде J-Link это нафиг не надо.

ARM Cortex-M сейчас много кто производит, STM32 (но если есть такая плата, то и ST-Link имеется для них), SAM от атмелов, LPC от NXP, всякое от Техаса, некоторые PSoC от Cypress, и т.д. Они имеют один и тот же протокол для отладки — JTAG/SWD. И Кейл/IAR/GDB эту штуку умеют пользовать, чтобы прошивать и отлаживать эти самые армовские контроллеры.
Таким образом, имея одну лишь дискавери в данном случае (не обязательно эту, портировать можно подо что угодно, хоть под AVR — примеры USB-HID есть для любого устройства с USB, надо всего-то поменять дескрипторы и обработку пакетов), можно получить возможность щить и отлаживать и ARM от других производителей, которые ST-Link не умеет.
А если есть время и желание, можно портировать теоретически любой опенсорсный программатор, коих дофига, и некоторые из них портируются достаточно просто. А если очень большое желание, много времени и образец — то и не только опенсорс.

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Прямой эфир

  • Комментарии
  • Публикации

CMSIS-DAP Debugger на STM32

Сделал CMSIS-DAP дебаггер на простом STM32F103C8 адаптере.
Неплохая замена J-Link/ULink и прочим адаптерам.

Комментарии ( 42 )

Ну и? Где описание, фотографии, впечатления? Что за дебаггер, чем хорош?

Думал ТС просто ошибся и выбрал обычный пос, вместо топика-ссылки. Открыл линк — ан нет, ТС полагает что это нормальный пост, и большего не требуется.

А вот сообщество, похоже, иак не считает)
Да наше сообщество это нечто. Столь разношерстное, что не понятно как вообще вместе уживаемся.

Из топика ничего не понял, но зато заинтересовался, что такое CMSIS-DAP.

Оказывается, на сайте ARM можно скачать спецификацию и код в общем виде, реализующий интерфейс USB-JTAG (или SWD), который можно прикрутить на любой армовский (а может и не только) контроллер с усб! И это дело будет работать с Кейлом. Там функции управления выводами выделены в конфиг (поднять TDO/ опустить TDO и т.д.) и могут быть посажены на любой вывод, какой удобен для разводки.

И предложено две адаптации: LPC-Link-II и OpenSDA.

В крайнем случае, любой желающий может посмотреть, как там сделан JTAG-интерфейс или SWD =)

  • teplofizik
  • 01 октября 2012, 10:14

Вот это классно. А какие оно МК поддерживает? Или любые и поддержка зависит исключительно от среды программирования/отладки?

Как минимум, Cortex’ы («The ARM® Cortex processors provide the CoreSight debug and trace unit.») То есть во всех кортексах стоит заведомо известный универсальный отладочный модуль =) И оный код знает, как с ним общаться.

Нативно там реализован конкретно стек DAP’a. Но ничто не мешает забрать оттуда только SWD или JTAG. И делать программатор хоть для AVR. Кроме лицензии, конечно.

Я немного преувеличил, усб там в примерах есть под конкретные платформы, для STM надо или взять где-то в другом месте (по ссылке найти), либо портировать самостоятельно под их периферию.

Естественно, чтоб реализовать клон любого программатора, надо знать его USB-протокол. Но эта заготовка может существенно облегчить жизнь. Но можно свой автономный программатор собрать для обновления пачек заведомо известного типа устройств, вроде того, что тут недавно был показан для AVR (по JTAG/ISP).

Ох, да позволю копипасту из приложенной доки:

Provides a standardized interface for debuggers.
Interfaces to Keil MDK and ARM DS-5 are already available; adaption for 3rd party debuggers in preparation.
Access to CoreSight registers of all Cortex processor architectures (Cortex-A/R/M).
Connects via 5-pin JTAG or 2-pin Serial Wire Debug (SWD).
Supports multi-core debugging.
Easy to deploy to Debug Units based on Cortex-M microcontrollers.
Debug Unit may be integrated on an evaluation board.
USB using HID (Human Interface Device) driver class that avoids driver installation on host PC.

Конечно, без дров на HID оно будет шевелиться еле-еле, но никто не запрещает делать иначе Оо

Драйвер для HID не нужен. Пакеты по 64 байта. По скорости работает точно так же как J-Link. Но так как DLL для поддержки маленькие, то визуально даже быстрее чем J-link. Проверял только SWD режим.

Я и говорю, что без дров=)

Отладке понятно, что много не надо. А вот прошивка/верификация большого кода, не тестового? Там, под сотню килобайт флеша если загонять?) Я не очень представляю, как много данных можно предать с помощью HID в секунду при помощи аппаратного HS/FS USB.

На большом не проверял. Тестовый код небольшой. У меня только J-Link, ULink, ST-Link есть — поэтому сравнить могу только с ними. Но визуально работает чуть быстрее J-Link’a. Если использовать LPC порт (размер пакета 1024), то скорость загрузки будет выше.

Я плохо смотрю, но где сама ссылка там на оный порт? Оо

Нашёл по ссылке три ссылки, все ведут на описания и блабла, ссылки на скачивание не нашёл.

  • teplofizik
  • 01 октября 2012, 11:23

Не стал публиковать код, так как версия 0.01 beta. Есть некоторые баги. Как только будет вариант стабильный — код появится для загрузки.

эээ, а с какой целью тогда постили 2 строки текста?
Что бы люди знали об этом (не о мне, а о том что есть такой вариант отладчика)

Чёрт возьми, ну так и напиши — «есть такой отладчик — blablabla, сделал его, вот так получилось, вот так повторить, вот такие грабли. »
Ну к чему ссылка на непонять что? Нет, конечно, интересно, и многие (я в том числе) не знали об этом, но можно хоть несколько строк от себя добавить? Тут комменты (как обычно) в сотню раз полезнее оказались.
Или сделал бы тогда топик-ссылку…

uni, перелогиньтесь!
Добавил архив для STM32F103C8 в пост

Перенес бы ты лучше содержимое того поста сюда. Только на русском, английский у тебя довольно кривой.

Ну не всем дано Шекспира в оригинале читать.
Вот и скопируй сюда и на русском.
А не пофиг ли уже? Завтра о посте никто и не вспомнит, а кому надо сохранили линки на сам проект.

Повторил в 2-х экземплярах. При первом подключении к Windows7 определяется, пишет, что ставит драйвер, а затем пропадает из списка устройств. При последующих подключениях винда булькает, светодиоды на плате примерно на секунду засвечиваются и гаснут, девайса в списке устройств не наблюдаю. Оба ведут себя одинаково. Из отличий стабилизатор не на 3.0, а на 3.3 В, нет подтяжек на PA1 и PA4 (да вроде и не нужны), делитель к PB8 15k/22k на всякий стоит (вдруг используется в либе). Компилил в Кайл 4.54. Хелп

Винда хоть и не показывает, но адаптер кайл 4.54 видит. А вот таргет — нет — SWD/JTAG Communication Failure. Посмотрел мануал — ставится птичка HWRESET и Connect: under Reset, а в PORT_SWD_SETUP() заодно настраивается NRESET — попробовал бросить проводок к таргету — грузиться всё-равно не хочет. Таргет — вторая плата. Менял их между собой. Шнурок для заливки от ST-Link из STM32VLDiscovery и для соединения между платками использую один и тот же.

Отбой. При смене пинов не протянута смена макросов PIN_SWDIO_TMS_OUT_DISABLE()и PIN_SWDIO_TMS_OUT_ENABLE(). Одним CMSIS DAP залил другой:)

У меня под Keil сброс и загрузка проходят только если поставить Reset в SYSRESETREQ (для STM32F). В arm написал но ответа нет почему так. Cигнал RESET проходят, но сброс не происходит если ставить в другие значения. Keil (4.60) исходники тоже отказался давать (CMSIS_AGDI.dll, CMSIS_DAP.dll).

Я нашел Вашу переписку на сайте ARM. Тоже так настроил. В проекте поменял серийник USB на вариант из LPC-Link-II, да и имя на всякий случай оттуда же, потому как кайл издавна славится недокументированными особенностями, проявляющимися, например, при особенных камментов в коде. Комплект положил на Сахаре.

RAKDAP1 Инструмент отладки и прошивки DAPLink

RAKDAP1 Инструмент отладки и прошивки DAPLink RAKDAP1 Инструмент отладки и прошивки DAPLink RAKDAP1 Инструмент отладки и прошивки DAPLink RAKDAP1 Инструмент отладки и прошивки DAPLink

Множество продуктов RAKwireless оснащено портом SWD, необходимым для прошивки загрузчика и исполняемого кода приложения в микросхемы устройств RAK. Дополнительно порт SWD используется для отладки. RAKDAP1 — это доступный инструмент отладки и прошивки, соединяющий ПК с портом SWD. Интегрированный в RAKDAP1 процессор запрограммирован DAPLink.

Свободно распространяемый проект DAPLink с открытым исходным кодом позволяет программировать и выполнять процесс отладки программного обеспечения, запускаемого на процессорах ARM Cortex. Представляемый в общем понимании как интерфейс для прошивки, DAPLink запускается на вторичном процессоре, который в свою очередь присоединён к процессору приложения, точнее к его порту SWD или JTAG. Интерфейс прошивки создаёт связь между компьютером разработчика и процессором с доступным отладочным портом. Такую конфигурацию легко обнаружить среди множества плат для разработчиков. DAPLink поддерживает метод програмирования drag-and-drop, предлагает разработчику последовательный порт, и возможность отладки на основе CMSIS-DAP.

Программное обеспечение DAPLink совместимо со всеми известными версиями Windows, Mac OS, и Linux. Подключенный к компьютеру, DAPLink выступает устройством хранения данных.

Возможности RAKDAP1

  • Инструмент для отладки и прошивки
  • USB интерфейс для компьютера
  • MSC — программирование флеш памяти методом перетаскивания drag-and-drop
  • CDC — виртуальный COM-порт для сбора отладочной информации, отслеживания, эмуляции терминала
  • HID — отладочный канал CMSIS-DAP
  • WebUSB HID — отладочный канал CMSIS-DAP

Технические характеристики

  • Модель: nanoDAP v2.3
  • Питание: 5В USB
  • Напряжение на выходе: 3.3В, 5В
  • Контроллер: STM32F103CBT6
  • Интерфейсы: UART, JTAG, SWD
  • Поддерживаемая среда разработки: Keil/MDK, IAR Workbench, OpenOCD, pyOCD
  • Размеры: 78 х 23 х 16 мм
  • Вес: 14.4 гр

Полезные ссылки

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *