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.
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 =)
Как минимум, 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.
Создаем проект в среде IAR
Компания Миландр предоставляет файлы поддержки своих микроконтроллеров для среды IAR, но подключение этих библиотек не так очевидно, как в случае PACK для Keil uVision. Эта статья будет посвящена тому, как начать работать с микроконтроллерами компании Миландр в среде IAR EW. Будет написан классический проект «HelloWorld», то есть мигание светодиодами на отладочной плате.
Установка IAR Embeded Workbench
После скачивания архива запускаем инсталлятор, после соглашения с лицензией нужно выбрать поддержку внутрисхемных отладчиков из списка. Рекомендуется оставлять все предлагаемые при установке настройки по умолчанию.
При первом запуске среды IAR открывается окно с выбором лицензии. Так как лицензионного ключа нет, следует выбрать пункт с ознакомительной лицензией.
После заполнения формы и принятия лицензионного соглашения на указанный при регистрации электронный адрес приходит письмо, в котором нужно нажать на ссылку подтверждения. По ссылке находится страница с кодом регистрации, который нужно ввести в окно регистрации в текстовое поле ввода регистрационного ключа. После ввода ключа в этом и следующем окне следует нажать кнопку «Далее >». Запустится активация лицензии, потом появится окно успешной активации.
Установка SPL (Standard Peripherial Library) от компании «Миландр»
Теперь необходимо скачать файлы поддержки микроконтроллеров «Миландр». Для этого на официальном сайте на странице «Программное обеспечение» нужно открыть раздел «IAR installer» и скачать MDR_for_IAR_vX.Y (на данный момент актуальная версия 1.7).
Внутри архива находится инсталлятор Setup_MDR_to_IAR_v1.x.exe, которые произведет копирование необходимых файлов в директорию установки IAR. При запуске требуется указать путь, где лежит IAR. По умолчанию используется путь C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0.
Также внутри архива расположена папка SPL_CODE. В ней содержатся файлы библиотеки SPL и простейшие проекты мигания светодиодом для микроконтроллеров.
Теперь среда готова для создания первого проекта.
Настройка проекта, на примере 1986ВЕ92У
Для создания нового проекта в меню сверху нужно выбрать «Project->Create New Project. «. В появившемся окне выбираем язык Си.
После выбора директории создался новый проект с пустой реализацией функции main. Для настройки проекта под конкретный микроконтроллер нужно перейти в опции проекта. Окно опций проекта открывается с помощью сочетания клавиш Alt+F7 или в меню «Project->Options. «. Далее приведены только те опции, которые необходимо поменять, все остальное следует оставить по умолчанию. Далее по вкладкам:
General Options
Выбираем микроконтроллер, 1986ВЕ92У относится к группе 1986VE9х
Output Converter
Если будет необходим hex файл прошивки, то включить его создание можно в этой вкладке.
Linker
Здесь можно выбрать файл, задающий раскладку памяти для микроконтроллера. По умолчанию установлен файл «MDR1986VE9x.icf».
Области памяти можно скорректировать, нажав Edit, но тогда лучше сохранить измененную версию под новым именем, чтобы оставить рабочим исходный вариант.
Debugger
В закладке Setup необходимо выбрать используемый отладчик, например, CMSIS-DAP или J-Link/J-Trace.
В следующей закладке Download можно выставить опцию «Verify download».
CMSIS-DAP
В настройках отладчика CMSIS-DAP можно выбрать использование Jtag или SWD.
J-Link/J-Trace
Организация папок проекта и SPL
Каждый раз копировать файлы библиотек в папку проекта, и затем подключать в среде IAR неудобно, поэтому в данной статье библиотечные файлы размещены по стационарному адресу и подключаются во всех проектах файлы из одного источника. Преимущество данного решения в том, что при исправлении ошибки в общих исходных файлах, изменения появятся во всех связанных с библиотекой проектах, потребуется лишь повторная компиляция.
Итоговая организация файлов в директории: в общей папке IAR_CODE лежит папка SPL, и по папке для каждого микроконтроллера, внутри которых создаются отдельные проекты. Проекты используют библиотечные файлы SPL, которые подключаются относительными путями от папки проекта. Использование абсолютных путей сделает проект непереносимым в другое место, поэтому лучше использовать относительные пути. При переносе или копировании проекта куда-то, необходимо будет скопировать проект и папку SPL, сохраняя их относительное расположение. Тогда проект будет успешно собираться из другого места.
Ниже приведена организация директорий и файлов, которые будут использоваться в проекте.
Чтобы получилась такая организация, вот что нужно скопировать из архива с SPL (стоит отметить, что в папке SPL_CODE из архива IAR Installer уже осуществлена данная организация, поэтому проще будет скопировать эту папку целиком):
в папку IAR_CODE\SPL:
Исходные файлы SPL
lib\MDR32F9_1986ВЕ4_2015\Libraries\все содержимое
Файлы с настройкой SPL под конкретный микроконтроллер
lib\MDR32F9_1986ВЕ4_2015\Config\MDR32F9Qx_config.h
в папку IAR_CODE\1986BE9x:
lib\MDR32F9_1986ВЕ4_2015\Examples\MDR1986VE9x\MDR32F9Q3_EVAL\MDR32F9Qx_board.h
Файл MDR32F9Qx_config.h в стандартном архиве с SPL требуется настроить для выбора микроконтроллера. Для этого необходимо открыть этот файл в любом текстовом редакторе (например, в блокноте или Notepad) и раскомментировать МК 1986ВЕ9x как показано ниже:
/* Uncomment the line corresponding to the target microcontroller */
#define USE_MDR1986VE9x
/* #define USE_MDR1986VE1T */
/* #define USE_MDR1986VE3 */
/* #define USE_MDR1901VC1T */
/* #define USE_MDR1986BE4 */
В папке SPL_CODE из архива IAR Installer эти изменения не требуются.
В категории «С/С++ Compiler» нужно выбрать вкладку Preprocessor. В этой вкладке в поле «Additional include directories» необходимо добавить сформированные пути. После добавления путей директорий их следует заменить на относительные пути (так как при добавлении они являются абсолютными).
Вот пути до нужных файлов относительно папки проекта:
При расположении прочих проектов по данной раскладке, эти пути останутся правильными.
При добавлении путей через диалоговое окно необходимо следующее:
Добавить путь до директории через диалоговое окно
Путь получился абсолютным
Нажать на кнопку с треугольником
В выпавшем меню выбрать вариант с путем относительно директории проекта
Сборка пустого проекта
Для компиляции минимального проекта к уже существующему файлу main.c необходимо подключить startup-файлы.
В открывшемся окне:
Создать группу MDR_Lib нажатием кнопки «New Group. «
Добавить новую переменную MDR_CODE со значением C:\CODE\IAR_CODE нажатием кнопки «Add Variable. «, которая будет задавать путь к корневой папке
Если проект не был сохранен, а при первом сохранении сохраняется Workspace, то кнопки в данной форме будут неактивны. Поэтому перед заходом в данную форму нужно сохранить Workspace (кнопка Save All на тулбаре).
Startup
$MDR_CODE$\SPL\CMSIS\CM3\DeviceSupport\MDR32F9Qx\startup\iar\startup_MDR32F9Qx.s
$MDR_CODE$\SPL\CMSIS\CM3\DeviceSupport\MDR32F9Qx\startup\iar\system_MDR32F9Qx.c
$MDR_CODE$\SPL\CMSIS\CM3\DeviceSupport\MDR32F9Qx\startup\iar\system_MDR32F9Qx.h
Собираем «HelloWorld»
В случае использования программаторов Segger, при загрузке в устройство подключенное впервые, драйвера Segger запрашивают какое ядро Cortex подключено.
CMSIS. Первое знакомство
Сегодня будем знакомиться с CMSIS.
CMSIS — Cortex Microcontroller Software Interface Standard
представляет из себя набор проектов которые помогают ускорить разработку программного обеспечения на процессорах ARM Cortex, это повышает эффективность сотрудничества в индустрии между компаниями и ускоряет выход на рынок новых технологий. Создание программного обеспечения является одним из основных факторов стоимости в индустрии встраиваемых систем.
Стандартизация интерфейсов программного обеспечения во всей линейке микросхем на ядре Cortex-M у производителей, особенно при создании новых проектов или миграции существующего программного обеспечения на новое устройство, означает значительное сокращение расходов.
CMSIS содержит следующие компоненты:
Мотивация
CMSIS был создан, чтобы помочь отрасли в стандартизации. Он обеспечивает согласованные слои программного обеспечения и поддержку устройств в широком диапазоне инструментов разработки и микроконтроллеров. CMSIS — это не огромный программный уровень, который вводит служебные данные и не определяет стандартные периферийные устройства. Таким образом, кремниевая промышленность может поддерживать широкие вариации устройств на базе процессоров Cortex-M с этим общим стандартом.
В частности, преимуществами CMSIS являются:
Правила кодирования
CMSIS использует следующие основные правила кодирования и соглашения:
Кроме того, CMSIS рекомендует следующие соглашения для идентификаторов:
CMSIS документируется в исходных файлах с помощью:
Doxygen комментарий, пример:
Проверка
Различные компоненты CMSIS Версии 5 проверяются с использованием основных компиляторов. Чтобы получить разнообразный охват, Arm использует компилятор Arm Compiler v5 (на основе EDG фронтенд), Arm Compiler v6 (на основе LLVM-интерфейса) и компилятор GCC в различных тестах. Для каждого компонента раздел «Проверка» описывает область действия различных проверок.
Компоненты CMSIS совместимы с различными языковыми стандартами на C и C ++. Компоненты CMSIS соответствуют бинарному интерфейсу приложений (ABI) для архитектуры Arm (исключение CMSIS-RTOS v1). Это обеспечивает интерфейсы API C, которые поддерживают взаимодействие между различными пакетами инструментов (тулчейны).
Поскольку CMSIS определяет интерфейсы и функции API, которые масштабируются для широкого спектра процессоров и устройств, объем охвата тестирования во время выполнения ограничен. Однако несколько компонентов проверяются с использованием специализированных наборов тестов.
Исходный код CMSIS проверяется на соответствие MISRA C: 2012 с использованием PC-Lint. Отклонения MISRA документированы с разумными усилиями, однако Arm не претендует на соответствие MISRA, поскольку сегодня, например, нет плана обеспечения соблюдения правил. Исходный код CMSIS не проверяется на соответствие MISRA C++: 2008, так как существует риск того, что он несовместим со стандартами языка C, в частности предупреждениями, которые могут быть сгенерированы различными компиляторами C.
Лицензия
CMSIS предоставляется бесплатно компанией Arm под лицензией Apache 2.0.
ARM::CMSIS пакет
Пакет ARM :: CMSIS содержит следующее:
| Файл/Папка | Содержимое |
|---|---|
| ARM.CMSIS.pdsc | Файл описания пакета в формате CMSIS-Pack. |
| LICENSE.txt | Лицензионное соглашение CMSIS (Apache 2.0) |
| CMSIS | Компоненты CMSIS (см. Ниже) |
| Device | Референсные реализации CMSIS устройств на базе процессора Cortex-M |
CMSIS папка
| Папка | Содержимое |
|---|---|
| Documentation | Документация |
| Core | Шаблоны пользовательских кодов для связанных файлов CMSIS-Core (Cortex-M), упомянутых в ARM.CMSIS.pdsc |
| Core_A | Шаблоны пользовательских кодов для связанных файлов CMSIS-Core (Cortex-A), упомянутых в ARM.CMSIS.pdsc |
| DAP | Исходный код порта CMSIS-DAP для отладки и эталонные реализации |
| Driver | Файлы заголовков для API интерфейса периферийного интерфейса CMSIS-драйвера |
| DSP_Lib | Исходный код библиотеки программного обеспечения CMSIS-DSP |
| NN | Исходный код библиотеки программного обеспечения CMSIS-NN |
| Include | Подключаемые файлы для CMSIS-Core (Cortex-M) и CMSIS-DSP |
| Lib | готовые библиотеки CMSIS-DSP для ARMCC и GCC |
| Pack | Пример CMSIS-Pack |
| RTOS | Версия CMSIS-RTOS версии 1 вместе с эталонной реализацией RTX |
| RTOS2 | Версия CMSIS-RTOS версии 2 вместе с эталонной реализацией RTX |
| SVD | Пример CMSIS-SVD |
| Utilities | PACK.xsd (файл схемы CMSIS-Pack), PackChk.exe (средство проверки пакетов программного обеспечения), CMSIS-SVD.xsd (файл схемы CMSIS-SVD), SVDConv.exe (инструмент преобразования для SVD-файлов) |
Оставить ответ Отменить ответ
Вы должны быть авторизованы чтобы размещать комментарии.
Use CMSIS DAP in Keil
In the process of my testing, it seems that only Keil5 can successfully identify CMSIS DAP. Its setting method is basically the same as other debuggers, because CMSIS DAP is used to mark itself as a USB HID and CDC ACM device, the former is for debugging Functional interface, the latter is a serial interface, which can be automatically recognized in Windows without installing a driver. But remember that if you have not set the hardware reset port on the hardware debug port, you should set Reset to the system soft interrupt in the Connect & Reset Option in the Keil debugger settings.
As for the function of the serial port, directly use the serial port assistant to open the COM port corresponding to the debugger.
Use OpenOCD + CMSIS DAP in Ubuntu
Problems during use
As an article in this series, which is naturally in Ubuntu, is the focus we want to talk about. At the beginning, when I connected the hardware and used the new OpenOCD configuration, I got the problem of not being able to connect to CMSIS DAP.
After studying the key words of several questions carefully for a night, I finally found the previous problems while trying to install a new OpenOCD. It turned out that there were two problems when installing OpenOCD at that time:
OpenOCD compile and install parameters
We will use it before we download the source code of OpenOCD and compile./configure The command configures the compilation parameters, and its default compilation configuration only enables several common debuggers such as stlink jlink, and does not add support for CMSIS DAP.
In ubuntu or Linux we use/etc/udev/rules.d/ The rule file in the directory is used to identify the USB device and provide its interface for libusb to use, and then libusb provides the interface for openocd to connect and use. Therefore, we must add a new DAP CMSIS library in this file to use it normally.
Reinstall OpenOCD
After talking about the problem, we will now introduce the solution.
First of all, obviously we need to reconfigure, compile and install OpenOCD to start the CMSIS DAP support code, but before that, we need to install a hid library, because there is no HID device driver by default on Linux.
After the installation is complete, enter the source code path of OpenOCD and use the instructions to configure its compilation parameters
After waiting for the configuration script to complete, the following will be displayed:
You can see that CMSIS-DAP has been enabled, and then we use commands to compile and install the new OpenOCD (no need to delete the old version)
After the installation is complete, we enter the contrib directory and use the command to60-openocd.rules File copy in/etc/udev/rules.d/ Under contents
Because this file contains all the USB interface descriptions that support the debugger, we also need to delete the rule files copied into this file before, such as 49-stlinkv1.rules 49-stlinkv2.rules 49-stlinkv2-1.rules 99- jlink.rules etc.
Restart the system to reload the rules. Then use the OpenOCD command to connect, and you’re done
Use debugger
After restarting the system, we again use the command to connect to the target board
PS: If it shows that the connection fails, try to replug and unplug the USB interface of CMSIS DAP. I have encountered this problem before.
Set up the serial port
Ctrl+a, o. Set the serial port parameters. In the serial port setup, we set the serial port device number, baud rate and odd parity bit and other parameters, then select save setup as dfl and restart minicom to complete the serial port settings.
























