Универсальный CMSIS-DAP отладчик для ARM-микроконтроллеров своими руками за копейки

Каждый, кто начинает или продолжает работать с ARM-микроконтроллерами, рано или поздно сталкивается с одной и той же проблемой: нужен отладчик. Фирменные решения вроде J-Link или ULINK2 стоят не дешево, а бюджетные аналоги не всегда радуют качеством или совместимостью.

Но есть способ получить универсальный, надёжный и при этом крайне дешёвый отладчик, потратив на него буквально пару сотен рублей и час свободного времени.

Встречайте: CMSIS-DAP — открытый стандарт от ARM, который позволяет превратить обычный микроконтроллер или даже готовый программатор в полноценный SWD/JTAG отладчик.

CMSIS-DAP Schema

Главная особенность CMSIS-DAP в том, что он универсальный и может работать с огромным множеством микроконтроллеров (STM32, NXP, Infineon, Nordic и т.д.). Так же он полностью бесплатный и открытый: вы можете самостоятельно собрать его из доступных компонентов.

В этой статье я покажу как можно из недорогих средств создать полноценный CMSIS-DAP отладчик. Сначала мы создадим его на базе известной многим платы Blue Pill и переходника USB/UART, который понадобится нам для прошивки микроконтроллера STM32F103. Затем рассмотрим вариант превращения китайского клона ST-Link в программатор-отладчик CMSIS-DAP.

Blue Pill STM32

Поехали! Предварительно необходимо на официальном сайте StMicroelectronics скачать и установить программу  STM32CubeProgrammer.

STM32CubeProgrammer

USB/UART адаптер можно использовать тот, который у вас есть в наличии, предварительно установив драйвер для него. В качестве примера возьмем адаптер на чипе CH340

USB/UART CH340

На плате Blue Pill установлен микроконтроллер STM32F103C8T6. Обратившись к Datasheet, мы видим, что у данного МК есть встроенный загрузчик и три режима загрузки:

  • Загрузка из Flash
  • Загрузка из System Memory
  • Загрузка из SRAM

Заводской загрузчик располагается в области памяти System Memory. Он позволяет произвести программирование Flash-памяти через интерфейс USART1.

Необходимо определить пины микроконтроллера для подключения адаптера USB/UART, а так же правильно сконфигурировать пины Boot0 и Boot1 для перевода устройства в режим программирования по USART1. В таблице описания пинов (Table 5. Medium-density STM32F103xx pin definitions) находим, что линии TX соответствует пин PA9, а линии RX – пин PA10.

STM32F103 USART1 Pinout

Подключаем переходник в соответствии с данной распиновкой:

Connect USB/UART to USART1 Blue Pill

Руководствуясь информацией из таблицы Table 9. Boot modes из Reference Manual устанавливаем перемычку Boot0 в положение «1».

STM32F103 Boot Modes
Blue Pill boot from USART1 (Boot Pin Configuration)

Плата готова для прошивки.

Теперь нам нужно добыть саму прошивку CMSIS-DAP. Для этого скачиваем на GitHub проект STM32F103C8T6_CMSIS-DAP_SWO. В скачанном архиве мы видим исходный код проекта программатора. В папке build мы можем найти скомпилированные варианты прошивок под разные платы. Нас интересуют два варианта прошивок под плату Blue Pill: вариант с выводом линий интерфейса SWD на пины PB8, PB9 (F103-DAP-SWO-CDC-BLUEPILL-SWD_PB8PB9.hex) и вариант REMAP (F103-DAP-SWO-CDC-BLUEPILL-SWD_REMAP.hex). Чтобы понять какой из вариантов выбрать, обратимся к схеме SWD_Remapped, которая находится в каталоге Doc/Bluepill:

CMSIS-DAP from Blue Pill Schematic

Мы видим, что линии SWIO и SWCLK выведены на одноимённые пины для программирования платы. Мне кажется, это более красивое решение и более понятное. Выберем вариант прошивки F103-DAP-SWO-CDC-BLUEPILL-SWD_REMAP.hex. Подключаем UART-адаптер к USB и запускаем программу STM32 Cube Programmer. В качестве интерфейса программирования указываем UART и выбираем тот порт, на котором находит адаптер (COM62). Скорость и остальные настройки оставляем по умолчанию (115200 кбит/с).

STM32CubeProgrammer via UART

Загружаем файл прошивки F103-DAP-SWO-CDC-BLUEPILL-SWD_REMAP.hex  и прошиваем устройство. Итак, программа зашита во Flash. Теперь нужно удостовериться, что наш программатор рабочий. А поступим мы интересным образом: мы превратим китайский клон ST-Link в программатор-отладчик CMSIS-DAP, который мы прошьем с помощью платы Blue Pill.

ST-Link V2.0 Clone

Вскрываем корпус программатора ST-Link. Здесь на плате мы наблюдаем 4 пяточка. Это и есть контакты интерфейса SWD, через который мы и осуществим программирование. Крайний левый – это земля. Следующий за ним подключен к разъему USB. Значит это контакт питания. Оставшиеся два – это SWCLK и SWIO.

ST-LINK V2.0 SWD Pinout

Соединяем плату ST-link с платой Blue Pill и подключаем к компьютеру.

Connect debugger to ST-Link V2.0

Возвращаемся в архив прошивок. Из всех вариантов опытным путем было установлено, что наиболее подходящий вариант – это прошивка F103-DAP-SWO-CDC-STLINK_V20-SWO_PA10.hex.

Теперь нам нужен софт, который сможет работать с нашим CMSIS-DAP отладчиком. Я предлагаю скачать программу CoFlash-1.4.10 из репозитория https://github.com/unsi9ned/coflash. Данная программа предназначена для программирования микроконтроллеров семейства Cortex-M и поддерживает огромное множество микроконтроллеров и адаптеров, в том числе и адаптер CMSIS-DAP.

Запускам программу CoFlash. В списке выбираем чип, установленный на плате ST-Link – это STM32F103C8. Указываем адаптер CMSIS-DAP и максимальную скорость  2 МГц. Порт – SWD.

CoFlash Settings for program Blue Pill

Переходим на вкладку Command. Для начала убедимся, что связь с чипом по протоколу SWD вообще есть. Для чего запустим процесс стирания Flash и проверку успешности данной операции.

CoFlash Erase

Теперь, когда мы убедились, что связь с чипом установлена, необходимо выбрать прошивку. К сожалению программа не поддерживает формат hex. Поэтому нам нужно преобразуем прошивку из формата hex в формат bin, в чем нам поможет утилита hex2bin. В командной строке вызываем команду hex2bin и передаем ей в качестве аргумента имя файла прошивки F103-DAP-SWO-CDC-STLINK_V20-SWO_PA10.hex. После этого в том же каталоге у нас должен появиться одноимённый файл с раширением bin: F103-DAP-SWO-CDC-STLINK_V20-SWO_PA10.bin

hex2bin utility usage

Загружаем созданный файл прошивки в программу CoFlash и запускаем процесс программирования.

CoFlash Chip Programming

Все, наш программатор готов! Подключим его к USB и убедимся, что устройство корректно обнаруживается системой. Кстати, отладчик должен определяться системой как USB-устройство ввода (USB HID).

Итак, мы получили недорогой и эффективный инструмент для программирования и отладки практически любых ARM-микроконтроллеров. Данный отладчик по умолчанию поддерживается средой Keil, и вы сразу же можете начинать работу с нужным микроконтроллером не скачивая дополнительный софт. Новое устройство имеет аналогичную распиновку, как и ST-Link, которая указана на корпусе устройства. Разумеется, что режим программирования STM8 по интерфейсу SWIM более не поддерживается.

Весь процесс изготовления программатора CMSIS-DAP можно увидеть на видео: Универсальный CMSIS-DAP отладчик для ARM-микроконтроллеров своими руками за копейки

Ссылки на прошивки и необходимый софт:

  1. Прошивка CMSIS-DAP — https://github.com/RadioOperator/STM32F103C8T6_CMSIS-DAP_SWO
  2. Программа CoFlash — https://github.com/unsi9ned/coflash
  3. Утилита Hex2Bin — https://github.com/algodesigner/hex2bin
  4. STM32 Cube Programmer — https://www.st.com/en/development-tools/stm32cubeprog.html
0

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

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

Код безопасности