Какие программаторы используются для прошивки и отладки микроконтроллеров STM32. Чем отличаются оригинальные ST-Link от китайских клонов. Как подключить и настроить ST-Link для работы с STM32. Какие альтернативные программаторы можно использовать вместо ST-Link.
Особенности и разновидности программаторов ST-Link
Программатор ST-Link — это специальное устройство, предназначенное для загрузки прошивки и отладки микроконтроллеров семейства STM32. Он подключается к целевому микроконтроллеру по интерфейсу SWD (Serial Wire Debug) и позволяет выполнять следующие операции:
- Загрузка прошивки в память микроконтроллера
- Пошаговая отладка программы с использованием точек останова
- Чтение/запись памяти и регистров микроконтроллера
- Управление выполнением программы (запуск, остановка, сброс)
Существует несколько разновидностей программаторов ST-Link:
- Оригинальные ST-Link от компании STMicroelectronics
- Встроенные программаторы в отладочных платах STM32
- Китайские клоны ST-Link
- Альтернативные программаторы с поддержкой SWD/JTAG
Рассмотрим особенности каждого типа более подробно.
Оригинальные программаторы ST-Link
Компания STMicroelectronics выпускает несколько моделей фирменных программаторов ST-Link:
- ST-Link/V2 — базовая модель без гальванической развязки
- ST-Link/V2-1 — улучшенная версия с гальванической развязкой
- ST-Link/V3 — новейшая модель с расширенными возможностями
Преимущества оригинальных программаторов:
- Высокая надежность и стабильность работы
- Официальная поддержка от производителя
- Расширенные функции отладки
- Гальваническая развязка (в некоторых моделях)
Основной недостаток — высокая стоимость по сравнению с альтернативными вариантами.
Встроенные программаторы в отладочных платах STM32
Многие отладочные платы STM32 Discovery и Nucleo содержат встроенный программатор ST-Link. Это очень удобное решение, так как позволяет использовать одно устройство и для разработки, и для программирования.
Особенности встроенных программаторов:
- Интегрированы в отладочную плату
- Могут использоваться для программирования внешних микроконтроллеров
- Имеют разъем для подключения к внешним платам
- Поддерживают режимы SWD и JTAG
Это экономичный вариант для начинающих разработчиков, позволяющий получить и отладочную плату, и программатор в одном устройстве.
Китайские клоны ST-Link
На рынке представлено множество недорогих китайских клонов программатора ST-Link. Они выпускаются в различных форм-факторах:
- В виде USB-флешки
- В алюминиевом корпусе
- В пластиковом корпусе
Основные отличия от оригинальных ST-Link:
- Значительно более низкая цена (от $2-3)
- Отсутствие защитных цепей и гальванической развязки
- Меньшая надежность и стабильность работы
- Риск повреждения USB-порта компьютера при неправильном использовании
Несмотря на недостатки, китайские клоны очень популярны среди любителей и в образовательных целях из-за низкой цены.
Подключение ST-Link к микроконтроллеру STM32
Для подключения программатора ST-Link к микроконтроллеру STM32 используется интерфейс SWD, который требует всего 2 сигнальных линии:
- SWDIO — линия данных
- SWCLK — тактовая линия
Эти сигналы подключаются к следующим выводам микроконтроллера STM32:
- SWDIO — PA13
- SWCLK — PA14
Кроме того, необходимо соединить общий провод (GND) программатора и микроконтроллера.
Опционально можно подключить линию RESET к выводу NRST микроконтроллера для возможности его аппаратного сброса.
Настройка ST-Link для работы с STM32
Для использования программатора ST-Link с микроконтроллерами STM32 необходимо выполнить следующие шаги:
- Установить драйверы ST-Link
- Установить утилиту STM32 ST-LINK Utility
- Подключить программатор к компьютеру и микроконтроллеру
- Настроить среду разработки для работы с ST-Link
Рассмотрим процесс настройки более подробно.
Установка драйверов ST-Link
Для работы с оригинальным ST-Link необходимо установить официальные драйверы от STMicroelectronics. Их можно скачать с сайта производителя. Для китайских клонов обычно используются стандартные драйверы операционной системы.
Установка STM32 ST-LINK Utility
STM32 ST-LINK Utility — это официальная утилита для работы с программатором ST-Link. Она позволяет:
- Прошивать микроконтроллер
- Стирать память
- Верифицировать прошивку
- Работать с опциями защиты
Утилиту можно скачать бесплатно с сайта STMicroelectronics.
Подключение программатора
Подключите ST-Link к свободному USB-порту компьютера. Соедините выводы SWDIO, SWCLK и GND программатора с соответствующими выводами микроконтроллера STM32.
Настройка среды разработки
Большинство современных сред разработки для STM32 имеют встроенную поддержку ST-Link. Необходимо в настройках проекта выбрать ST-Link в качестве программатора/отладчика.
Альтернативные программаторы для STM32
Помимо ST-Link существуют и другие программаторы, которые можно использовать для работы с микроконтроллерами STM32:
J-Link
Программатор J-Link от компании SEGGER — это профессиональное решение для работы с различными микроконтроллерами, включая STM32. Особенности J-Link:
- Высокая скорость программирования и отладки
- Поддержка SWD и JTAG
- Расширенные возможности трассировки
- Совместимость с большинством сред разработки
Основной недостаток J-Link — высокая стоимость оригинальных устройств.
Black Magic Probe
Black Magic Probe (BMP) — это открытый проект программатора-отладчика для микроконтроллеров ARM Cortex-M. Ключевые особенности:
- Встроенный GDB-сервер
- Поддержка SWD и JTAG
- Дополнительный UART для вывода отладочной информации
- Открытое программное и аппаратное обеспечение
BMP может быть реализован на базе различных микроконтроллеров, включая STM32F103.
FTDI-based программаторы
Существуют программаторы на базе микросхем FTDI, которые могут работать в режиме JTAG. Примеры таких устройств:
- Altera USB Blaster
- Xilinx Platform Cable USB
Для использования с STM32 они требуют дополнительной настройки и не всегда обеспечивают стабильную работу.
Сравнение программаторов для STM32
Рассмотрим основные характеристики различных программаторов для STM32:
Характеристика | ST-Link | J-Link | Black Magic Probe | FTDI-based |
---|---|---|---|---|
Поддержка SWD | Да | Да | Да | Нет |
Поддержка JTAG | Да | Да | Да | Да |
Скорость программирования | Средняя | Высокая | Средняя | Низкая |
Возможности отладки | Хорошие | Отличные | Хорошие | Базовые |
Цена | Средняя | Высокая | Низкая | Низкая |
Выбор конкретного программатора зависит от требований проекта, бюджета и личных предпочтений разработчика.
Советы по использованию программаторов ST-Link
При работе с программаторами ST-Link и их аналогами следует учитывать несколько важных моментов:
- Всегда проверяйте правильность подключения перед началом работы. Неправильное подключение может привести к повреждению программатора или микроконтроллера.
- При использовании китайских клонов ST-Link будьте особенно осторожны. Они не имеют защитных цепей и могут быть повреждены при неправильном использовании.
- Регулярно обновляйте прошивку программатора ST-Link для получения новых функций и исправления ошибок.
- Если возникают проблемы с подключением, попробуйте уменьшить скорость интерфейса SWD в настройках.
- Для надежной работы используйте качественные кабели и соединения. Плохой контакт может привести к ошибкам при программировании и отладке.
Соблюдение этих рекомендаций поможет обеспечить стабильную и безопасную работу с программатором ST-Link при разработке проектов на базе микроконтроллеров STM32.
Программатор ST-Link — DiMoon Electronics
По-хорошему, данную тему надо было затронуть еще во 2-й или 3-й части данного цикла статей. Но лучше поздно, чем ни когда, поэтому поехали! В этой части мы познакомимся с программатором ST-Link, с помощью которого можно загружать прошивку в микроконтроллер STM32 и производить отладку программного обеспечения. Предыдущая статья здесь, все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1.
Разновидности программаторов ST-Link
Для загрузки прошивки в микроконтроллеры STM32 используется программатор ST-Link, который можно подключить к программируемому микроконтроллеру по интерфейсу SWD. Кроме того, с помощью того же ST-Link-а и SWD можно выполнять пошаговую отладку прошивки из среды разработки с поддержкой точек останова (breakpoint). Количество одновременно установленных breakpoint-ов ограничено несколькими штуками (точно не помню сколько, вроде 5 штук), но этого более чем достаточно для отладки прошивки.
В фирменных отладочных платах от ST на борту имеется и сам целевой микроконтроллер, и программатор ST-Link, который так же сделан на микроконтроллере STM32. К стати очень удобное решение. Кроме того, программатор, который встроен в отладочную плату, можно использовать и для прошивки какого-либо внешнего микроконтроллера STM32. Для этих целей есть специальная гребенка на плате и перемычки, с помощью которых можно отключить интерфейс SWD от микроконтроллера, распаянного на плате. В моем распоряжении имеется плата stm32f4discovery, на которой установлен микроконтроллер STM32F407VG, и эту плату я как раз и использую как программатор ST-Link:
Естественно можно приобрести отдельный программатор ST-Link. Тут есть несколько вариантов. Первый — это фирменный ST-Link, который бывает с гальваничаской развязкой и без нее. Выглядят эти программаторы вот так:
Другой вариант — китайский ST-Link в форм-факторе флешки:
Вариант в принципе тоже неплохой, только надо иметь ввиду, что внутри у него нет ни каких защит интерфейса USB и целевой платы, так что при невыровненных землях схемы и ПК, КЗ в отлаживаемой схеме, и так далее, есть большой шанс спалить программатор вместе с USB портом в компе. Так что при работе с этим программатором надо быть предельно внимательным!
Подключение программатора ST-Link к микроконтроллеру STM32
Интерфейс SWD, по которому программатор подключается к микроконтроллеру имеет 2 линии:
- SWCLK
Это является необходимым минимумом для успешной загрузки прошивки в новенький микроконтроллер или отладки и среды разработки (из IAR-а, например). Во всех микроконтроллерах STM32 выводы программирования совмещены со следующими портами ввода-вывода:
- SWDIO — PA13
- SWCLK — PA14
Выводы PA13 и PA14 можно использовать и как самые обычные порты ввода-вывода, однако, в этом случае теряется возможность производить отладку прошивки из среды разработки. Кроме того, если из прошивки, загруженной в МК, изменить настройки по-умолчанию пинов PA13 и PA14, процесс загрузки новой прошивки становится затруднителен, придется задействовать еще один провод, соединяющий программатор и МК: линию RESET. В этом случае, перед загрузкой прошивки, ST-Link
выполнит сброс микроконтроллера, тем самым переведет пины PA13 и PA14 в состояние по-умолчанию, а уже после этого загрузит в МК новую прошивку. Чтобы задействовать функцию сброса микроконтроллера перед загрузкой прошивки в IAR-е в разделе настройки ST-Link-а необходимо выбрать опцию «Reset Pin»:На этом пока все, спасибо за внимание!!! Продолжение
Адаптеры JTAG с поддержкой SWD | arm
Технология JTAG широко применяется для тестирования электронных устройств, чаще всего основанные на микроконтроллерах, CPU, CPLD и/или FPGA. JTAG также позволяет аппаратную отладку, чтение/запись памяти, управление ножками I/O, анализ на производительность работающего кода (здесь приведен перевод статьи [1]).
Технология SWD (расшифровывается как Serial Wire Debug) это более современная версия JTAG, требующая для работы только 2 сигнальных выводов вместо как минимум 4 у стандартного JTAG (иногда добавляется еще один сигнал, что доводит количество сигнальных проводников до 5).
С одной стороны эта функциональность должна поддерживаться в целевом устройстве (target device). Порт отладки (Debug Port) часто называют JTAG-DP для JTAG и SW-DP для SWD. Устройство с поддержкой SWJ часто комбинирует в себе оба этих стандарта, при этом SWD-сигналы SWDIO и SWCLK повторно используются как JTAG-сигналы JTMS и JTCK (таким образом, SWJ обеспечивает обратную совместимость с традиционным JTAG). Большинство 32-битых микроконтроллеров и чипов SoC имеют на борту один из таких интерфейсов (или оба).
С другой стороны Вам нужен SWJ-адаптер, который может обмениваться данными с устройством по протоколу JTAG и/или SWD. SWJ могут стоить недорого (< 5$) и очень дорого (> 1000$), в зависимости от качества аппаратуры и ПО (и от бренда производителя). Ниже перечислены несколько описаний SWJ-адаптеров.
[ST-Link v2]
ST-LINK/V2 это адаптер от STMicroelectronics, очень удобный для прошивки микроконтроллеров STM8 и STM32 этой компании, таких как серия STM32 F1. Адаптер поддерживает интерфейсы JTAG, SWD и SWIM (последний применяется для STM8).
Эти SWJ-адаптеры основаны на микроконтроллерах STM32F1xx ARM Cortex M3. Любопытно, что адаптер на основе микроконтроллера STM32F1xx применяется для программирования и отладки таких же микроконтроллеров STM32F1xx.
Использование ST-LINK/V2 на Linux. Для нормального использования сначала добавьте правила для обычного пользователя, чтобы можно было получить доступ к этому устройству (правило udev, основанное на идентификаторах VID и PID адаптера, показываемых lsusb). Это делается только один раз перед тем, как адаптер подключается для непосредственного использования:
echo -n 'ST-Link V2 SWJ adapter' | sudo tee -a /etc/udev/rules. d/60-st-linkv2.rules echo -n 'ATTR{idVendor}=="0483", ATTR{idProduct}=="3748", MODE="0666"' | sudo tee -a /etc/udev/rules.d/60-st-linkv2.rules sudo udevadm control --reload-rules
Для подключения к микроконтроллерам STM32F1xx ARM Cortex M3 используется OpenOCD [9]:
openocd --file interface/stlink-v2.cfg --file target/stm32f1x.cfg Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-12-10:52) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : auto-selecting first available session transport "hla_swd". To override use 'transport select < transport >'. Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD adapter speed: 1000 kHz adapter_nsrst_delay: 100 none separate Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : clock speed 950 kHz Info : STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748 Info : using stlink api v2 Info : Target voltage: 3. 534945 Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
[Клон ST-LINK/V2]
Это полностью содранный с оригинала ST-LINK/V2. Он поставляется в таком же корпусе, с такими же кабелями, выглядит так же, сохранено даже название печатной платы (MB936). Но сама плата не такая же, список деталей (BOM) не совпадает с оригинальным.
Оригинальный адаптер снабжен дополнительной защитой от статического электричества, защитными резисторами и трансивером, позволяющим работать с уровнями сигнала от 1.65V до 5.5V. В клоне это полностью отсутствует, поскольку сигналы интерфейса напрямую подключены к микроконтроллеру. Таким образом, поддерживаются только уровни сигналов 3.3V на отлаживаемой/программируемой системе, и иногда 5V, потому что выводы микроконтроллера допускают по входу уровни 5V (5V tolerant).
Этот адаптер стоит $9, что довольно много. Если не нужен JTAG, то есть более дешевый адаптер, описанный ниже.
[ST-LINK V2 aluminium]
Эти адаптеры поставляются в маленьком алюминиевом корпусе, стоит порядка $2. 5. Они поддерживают SWD и SWIM (для STM8), но не поддерживают JTAG. Это вероятно самый дешевый клон, который можно найти. Вероятно, такая низкая цена обусловлена тем, что в адаптере используются STM32F101. В сравнении с STM32F103 возможности у STM32F101 меньше, но все-таки это адаптер USB! Вероятно, что у STM32F101 тот же самый кристалл, что и STM32F103, и тот же самый корпус, просто STM32F101 получают в результате отбраковки STM32F103. Подобным образом декларируется, что у STM32F103C8 только 64 килобайта памяти flash, потому что полный тест они не прошли, в сравнении с 128 килобайтами STM32F103CB, но на борту STM32F103C8 часто есть больше памяти (Вы можете проверить эту память на ошибки путем чтения/записи).
Существует несколько версий плат этого варианта адаптера, и может также отличаться цоколевка.
2014-06-22 ST-LINK V2. Ниже показана схема и внешний вид этих адаптеров.
В адаптере используется интересный трюк для подключения двух светодиодов (LED) на одной ножке порта (PA9):
• Когда ножка выхода порта установлена в лог. 1, зажигается один светодиод
• Когда эта же ножка переводится в лог. 0, зажигается другой светодиод
• Когда ножка переводится в состояние висящего входа, оба светодиода выключается
• Когда выход работает в режиме ШИМ (PWM), Вы можете смешивать эти 2 цвета светодиодов (красный и синий). Это происходит потому, что глаз не замечает быстрых мерцаний, светодиоды находятся рядом и светят в маленькую дырку по центру.
Тот же самый адаптер, но с другой цоколевкой. Выглядит очень похоже на вышеописанный адаптер, но цоколевка сигналов разъема сильно отличается (кроме питания), и используется только один светодиод. На плате нет никакой маркировки сигналов.
2016-01-18 MX-LINK V2. У этого адаптера логотип «M» вместо логотипа ST, что возможно соответствует маркировке «MX-LINK V2» на плате.
[Baite]
Это аналог ST-Link V2 с поддержкой JTAG, SWD и SWIM (для STM8) [2].
Автор статьи [1] сделал для этого адаптера стикер с цоколевкой сигналов.
Автор также перерисовал по плате схему. Все выводы коннектора защищены резисторами 220 ом.
Baite-V2A. Более новая версия промаркирована «V2A» (под кварцем), но схема почти такая же, со следующими изменениями:
• Присутствуют все ножки микроконтроллера (есть даже маска пайки между ними).
• Добавлен порт SWD.
• STM32F103C8 заменен на STM32F101CB, но используется как STM32F103 (так же, как в других дешевых адаптерах).
• Используются пассивные элементы меньшего размера.
• Некачественная разводка платы.
[Black Magic Probe]
Адаптер Black Magic Probe [3] (известный как BMP) очень интересный SWJ-адаптер, потому что в него встроен сервер GDB. Таким образом, не нужно запускать сервер OpenOCD, чтобы управлять адаптером SWJ. Вы можете напрямую подключить GDB к этому адаптеру (через драйвер USB CDC ACM).
В этом адаптере также есть порт UART (через второй канал USB CDC ACM). Это очень полезно для отладки в реальном времени, без точек останова (для обмена сообщениями printf).
Поставляемая аппаратура имеет следующие недостатки:
• Используется не очень удобный коннектор ARM Cortex SWJ с маленьким шагом.
• Отдельный UART используется не всегда (UART также доступен на коннекторе SWJ).
• Дорогой (> $50), но эта цена относительно разумная, поскольку есть поддержка проекта.
Из-за того, что firmware этого адаптера открыто (open source), его можно портировать на другую аппаратуру, и народ реально этим пользуется [4]. Проект был портирован [5] на blue pill [6]. Также он был портирован и на клон ST-Link V2 [7], но на нем больше нет дополнительного UART. Автор решил сделать порт на baite [2]. На коннекторе используется меньше выводов питания, но зато получается достаточно функциональных выводов для добавления UART (и SRST).
Сборка firmware (ожидается интегрирование патча):
git clone https://github.com/tsaitgaist/blackmagic.git cd blackmagic git submodule init git submodule update git checkout baite-platform # if you are usgin GCC >= 7 git cherry-pick 2ebcffa2a4911090b43c36594dae6b58d4bb2f27 make cd src make clean make PROBE_HOST=baite
После получения двоичного кода нужно перепрошить им адаптер Baite. Как Вы можете видеть по схеме, выводы JTAG и SWD микроконтроллера не подключены (на плате нет контактных площадок, куда эти выводы припаяны). Но на обратной стороне платы можно найти контрольные точки, чтобы запрограммировать микроконтроллер через serial bootloader:
Вывод | Сигнал |
1 (квадратный) | RX |
2 | TX |
3 | BOOT0 |
4 | +5V |
5 | GND |
Для подключения используйте любой конвертер USB — TTL UART, и подключите соответствующие выводы к этому порту. Не подавайте питание на адаптер Baite через USB, потому что это может привести к его загрузке в нормальном режиме (не в режиме serial bootloader). Вместо этого подайте питание через конвертер USB — UART. Для запуска serial bootloader в момент подачи питания на адаптер нужно перевести сигнал BOOT0 в лог. 1 путем подключения его к +3.3V или к DTR (или к любому другому сигналу, который находится в лог. 1 на конвертере USB — UART).
Чтобы прошить Black Magic firmware автор использовал stm32flash. Поскольку flash защищена от чтения/записи, сначала нужно очистить эти биты опций.
# disable flash read protection stm32flash -k /dev/ttyUSB0 # disable flash write protection stm32flash -u /dev/ttyUSB0 # erase flash stm32flash -o /dev/ttyUSB0 # flash the DFU bootloader stm32flash -w src/blackmagic_dfu.bin -v /dev/ttyUSB0 # flash the main firmware stm32flash -w src/blackmagic.bin -v -S 0x08002000 /dev/ttyUSB0
Поскольку этот адаптер основан на микроконтроллере STM32F103C8 с 64 килобайтами flash, DFU bootloader дает возможность использовать только 56 килобайт памяти flash для основного приложения. Blackmagic firmware превышает этот размер, поэтому его нельзя прошить, если программное обеспечение DFU не игнорирует это ограничение. У микроконтроллера STM32F103C8 часто есть 128 килобайт flash, так что все еще можно прошить blackmagic firmware, используя serial bootloader (по адресу 0x08002000). Проверка во время прошивки (verification) гарантирует, что весь код firmware был успешно записан.
Отключите Baite, и снова подключите его через USB. В нем должно запуститься основное программное обеспечение, и операционная система хоста должна обнаружить два порта USB CDC ACM.
Вы можете перепрошить устройство из основного приложения, используя dfu-util (если Вы сможете перевести dfu-util в состояние игнорирования ограничения по размеру памяти):
dfu-util -d 1d50:6018 -s 0x08002000:leave -D blackmagic.bin
Цоколевка нового «BMP Baite»:
Сигнал | Вывод | Вывод | Сигнал |
SRTST | 1 | 2 | +3. 3V |
+5V | 3 | 4 | JTCK/SWCLK |
RX | 5 (ключ) | 6 | JTMS/SWDIO |
GND | 7 | 8 | JTDO/TRACESWO |
TX | 9 | 10 | JTDI |
Примечание: вывод RX подтягивается к лог. 1 с помощью резистора 620 ом. Таким образом TX, подключенный к BMP Baite, должен иметь достаточную нагрузочную способность, чтобы подтянуть сигнал к лог. 0 (скорее всего, USB — UART адаптер наподобие Ch440 это сделать не сможет).
Если Вы подключите SRST к сигналу NRST целевой отлаживаемой системы, то можно будет подавать на неё сброс без нажатия кнопки сброса на плате отлаживаемой системы (если конечно такая кнопка есть). Сигнал сброса генерируется следующей командой:
gdb --eval-command="target extended-remote /dev/ttyACM0" --eval-command="monitor hard_srst" --eval-command="quit"
[Altera USB-Blaster]
USB-Blaster это адаптер от компании Altera. Он часто используется для прошивки FPGA, но по сути это обычный адаптер JTAG.
Внимание: вывод VCC{TARGET} подключается к опорному напряжению, используемому для обмена JTAG, обычно предоставляемому печатной платой целевого отлаживаемого устройства (часто это напряжение 3.3V или 1.8V). Иначе сигналы не смогут определиться адаптером JTAG.
Сначала добавьте правила для обычного пользователя, чтобы он мог получить доступ к устройству (правило udev на основе идентификаторов VID и PID, показываемых lsusb). Это делается только один раз, перед тем как устройство подключается для непосредственного использования:
echo -n 'Altera USB-Blaster JTAG adatper' | sudo tee -a /etc/udev/rules.d/60-altera-usb-blaster.rules echo -n 'ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="666"' | sudo tee -a /etc/udev/rules.d/60-altera-usb-blaster.rules sudo udevadm control --reload-rules
Чтобы можно было использовать этот адаптер, нужно перекомпилировать OpenOCD для USB-Blaster, чтобы использовалась библиотека libftdi (наверное потому что это клон).
git clone http://git.code.sf.net/p/openocd/code openocd-code cd openocd-code ./bootstrap ./configure --enable-usb_blaster_libftdi make sudo make install cd ..
Иначе OpenOCD зависает, загружая на 100% CPU, и его нужно прибить используя -KILL.
openocd --file interface/altera-usb-blaster.cfg Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-12-11:26) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only Info : only one transport option; autoselect 'jtag' adapter speed: 1000 kHz adapter_nsrst_delay: 100 jtag_ntrst_delay: 100 none separate cortex_m reset_config sysresetreq Info : No lowlevel driver configured, will try them all Info : Altera USB-Blaster II found (Firm. rev. = 6??) Info : This adapter doesn't support configurable speed
openocd --debug 3 --file interface/altera-usb-blaster. cfg ... Debug: 385 845 tcl.c:497 handle_nand_init_command(): Initializing NAND devices... Debug: 386 845 command.c:145 script_debug(): command - ocd_command ocd_command type ocd_pld init Debug: 387 845 command.c:145 script_debug(): command - ocd_pld ocd_pld init Debug: 389 846 pld.c:207 handle_pld_init_command(): Initializing PLDs...
Теперь Вы можете использовать адаптер, пример с микроконтроллером STM32F1:
openocd --file interface/altera-usb-blaster.cfg --file target/stm32f1x.cfg Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-12-16:26) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only Info : only one transport option; autoselect 'jtag' adapter speed: 1000 kHz adapter_nsrst_delay: 100 jtag_ntrst_delay: 100 none separate cortex_m reset_config sysresetreq Info : No lowlevel driver configured, will try them all Info : usb blaster interface using libftdi Error: unable to get latency timer Info : This adapter doesn't support configurable speed Info : JTAG tap: stm32f1x. cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3) Info : JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020, part: 0x6410, ver: 0x1) Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Оригинальный адаптер Altera USB-Blaster использует чипы FTDI FT245 и MAX CPLD. Имеется множество его клонов разного качества и разной поддержкой диапазонов напряжения.
[SiLabs USB-Blaster]
Здесь используется микроконтроллер C8051F321 от Silicon Labs и 4-канальный буфер 74LVC125 (для преобразования уровней сигналов в пределах от 1.65V до 3.6V).
[PIC USB-Blaster]
Этот адаптер использует микроконтроллер PIC18F14 компании Microchip, без каких-либо буферов (поддерживаются только сигналы с уровнями 5V).
[ARMJISHU USB-Blaster]
Здесь используется STM32F101 от ST (как STM32F103 с поддержкой USB) и 8-канальный буфер 74HC244 (для преобразования уровней от 2. 0V до 6.0V).
На схеме видно, что аппаратура может также управлять сигналами (на 3.3V) в случае, когда Vcc_target не подключен, и Вы можете добавить слот карт uSD или память SPI flash. Не известно, поддерживается ли этот функционал в программном обеспечении.
[SEGGER J-Link]
O-Link-ARM V8 [8], клон SEGGER J-Link.
Поддерживает JTAG, SWD, SWO, RTCK и опорное напряжение для регулировки уровней, что делает этот JTAG-адаптер наиболее полным.
[Цепочка сканирования JTAG]
Микросхемы с поддержкой JTAG имеют точки тестирования, которые называются Test Access Points (TAP). Один микроконтроллер может иметь несколько TAP, соединяемых в цепочку (scan chain). Несколько микросхем с TAP-ми также могут быть соединены (сигналами на печатной плате) в цепочку, это позволяет опрашивать все устройства на плате через одно подключение JTAG. Каждый TAP имеет идентификатор (IDCODE) и он может быть выбран индивидуально.
Иногда полезно перечислить все доступные TAP-ы на цепочке, чтобы узнать, какие есть устройства в системе. Это можно просто осуществить с помощью ПО urJTAG [10]. Пример с USB Blaster:
jtag UrJTAG 0.10 #2007 Copyright (C) 2002, 2003 ETC s.r.o. Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors UrJTAG is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. There is absolutely no warranty for UrJTAG. warning: UrJTAG may damage your hardware! Type "quit" to exit, "help" for help. jtag> cable UsbBlaster Connected to libftdi driver. jtag> detect IR length: 9 Chain length: 2 Device Id: 00111011101000000000010001110111 (0x3BA00477) Unknown manufacturer! (01000111011) (/usr/share/urjtag/MANUFACTURERS) Device Id: 00010110010000010000000001000001 (0x16410041) Unknown manufacturer! (00000100000) (/usr/share/urjtag/MANUFACTURERS)
OpenOCD также сканирует цепочку, если нет предоставленных target (какой используется адаптер, все-таки определить нужно):
openocd --file interface/altera-usb-blaster. cfg Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-12-16:26) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only Info : only one transport option; autoselect 'jtag' Info : No lowlevel driver configured, will try them all Info : usb blaster interface using libftdi Error: unable to get latency timer Info : This adapter doesn't support configurable speed Warn : There are no enabled taps. AUTO PROBING MIGHT NOT WORK!! Info : JTAG tap: auto0.tap tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3) Info : JTAG tap: auto1.tap tap/device found: 0x16410041 (mfg: 0x020, part: 0x6410, ver: 0x1) Warn : AUTO auto0.tap - use "jtag newtap auto0 tap -irlen 4 -expected-id 0x3ba00477" Warn : AUTO auto1.tap - use "jtag newtap auto1 tap -irlen 5 -expected-id 0x16410041" Warn : gdb services need one or more targets defined
0x3ba00477 соответствует Cortex-M3 TAP, и 0x16410041 boundary scan TAP, как указано в документации на STM32F1xx.
Хотя ST-Link v2 с микроконтроллерами ST главным образом используется как адаптер SWD, он также поддерживает обычный JTAG. Оба этих протокола реализованы драйвером High Level Adapter (HLA). Но все выглядит так, как будто scan chain не поддерживается драйвером HLA.
openocd --file interface/stlink-v2.cfg -c "transport select hla_jtag" -c "adapter_khz 100" Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-12-16:26) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html hla_jtag adapter speed: 100 kHz Info : clock speed 100 kHz Error: BUG: current_target out of bounds
[Ссылки]
1. SWJ adapters site:wiki.cuvoodoo.info.
2. Best Quality~ST-Link stlink V2 for STM8S STM8L STM32 Cortex-M0 Cortex-M3 SWIM JTAG SWD interface Programmer site:aliexpress.com.
3. blacksphere/blackmagic site:github. com.
4. blacksphere/blackmagic Supported Hardware site:github.com.
5. Converting an STM32F103 board to a Black Magic Probe site:medium.com.
6. blue pill site:wiki.cuvoodoo.info.
7. Cheap Chinese ST-Link v.2 Programmer converted to Black Magic Probe Debugger site:blog.linuxbits.io.
8. FREE SHIPPING V8 ARM Emulator,supports ARM7,ARM9,ARM11,Cortex-M3 core,ADS,IAR,STM32 Emulator + Adapter converter site:aliexpress.com.
9. OpenOCD: руководство пользователя, начало.
10. UrJTAG: бесплатный инструментарий JTAG.
11. Цоколевка интерфейсов JTAG.
Руководство: Подключение отладчика | Проект STM32-base
В этом небольшом руководстве объясняется, как подключить отладчик к макетной плате. Есть два широко используемых разъема, которые предоставляют только интерфейс SWD (Serial Wire Debug) или полный интерфейс JTAG.
Подключение плат ST Nucleo и Discovery
Если вы используете одну из официальных плат ST Nucleo или Discovery, вам не нужно подключать внешний отладчик. Эти платы поставляются со встроенным отладчиком ST-LINK/V2. Просто подключите плату через USB к компьютеру, и вы готовы к работе!
Подключение китайских отладочных плат
Если вы используете одну из многих китайских отладочных плат, вам, скорее всего, потребуется подключить внешний отладчик для прошивки и отладки устройства на отладочной плате, поскольку эти платы обычно не имеют встроенного СТ-ЛИНК/V2.
Самый простой способ подключить макетную плату к отладчику — использовать 4-контактный разъем SWD, если он имеется. Этот заголовок обычно является мужским заголовком dupont, но также используются и женские заголовки. Заголовок предоставляет контакт заземления, контакт +3,3 В, контакт синхронизации и контакт данных.
Примечание. Определенного порядка расположения этих контактов нет.
Предупреждение: Не подключайте контакт +3,3 В, если вы питаете плату от внешнего источника, так как большинство китайских макетных плат не имеют никакой защиты на контактах питания. Это может привести к повреждению платы, отладчика или ПК.
В таблице ниже представлен обзор контактов для подключения:
Назначение контактов | Контакт отладчика | Целевой штифт |
---|---|---|
Штифт заземления | Земля | Земля |
Контакт +3,3 В | ВКК / ВДД / 3,3 В | ВКК / ВДД / 3,3 В |
Часовой штифт | SWCLK / SWCK | CLK / SWCLK |
Контакт данных | СВДИО | DIO / SWDIO |
Если ваша макетная плата не имеет 4-контактного разъема SWD, скорее всего, имеет 20-контактный разъем JTAG. Этот разъем предоставляет все контакты, необходимые для полной поддержки JTAG. Сюда входят контакты, которые открывает заголовок SWD. Обратитесь к изображению ниже для обзора типичного заголовка ARM JTAG.
Предупреждение: Не подключайте контакт +3,3 В, если вы питаете плату от внешнего источника, так как большинство китайских макетных плат не имеют никакой защиты на контактах питания. Это может привести к повреждению платы, отладчика или ПК.
В таблице ниже представлен обзор контактов для подключения:
Назначение контактов | Контакт отладчика | Целевой штифт |
---|---|---|
Штифт заземления | Земля | Земля |
Контакт +3,3 В | ВКК / ВДД / 3,3 В | ВКЦ |
Часовой штифт | SWCLK / SWCK | СВКЛК |
Контакт данных | СВДИО | СВДИО |
Подключение к контактам GPIO
Если у вас есть макетная плата без разъема SWD или JTAG, вы также можете подключить отладчик к некоторым определенным портам GPIO. По сути, это то же самое, что и подключение вашего отладчика через SWD или JTAG-заголовок, хотя и немного более громоздко.
Предупреждение: Не подключайте контакт +3,3 В, если вы питаете плату от внешнего источника, так как большинство китайских макетных плат не имеют никакой защиты на контактах питания. Это может привести к повреждению платы, отладчика или ПК.
В таблице ниже представлен обзор контактов для подключения:
Функция контакта | Контакт отладчика | Целевой штифт |
---|---|---|
Штифт заземления | Земля | Любой Земля контакт |
Контакт +3,3 В | ВКК / ВДД / 3,3 В | Любой +3,3 В контакт |
Часовой штифт | SWCLK / SWCK | ПА14 |
Контакт данных | СВДИО | ПА13 |
Отладчики
Можно использовать несколько различных отладчиков.
Официальный ST-LINK/V2
Официальный ST-LINK/V2 — это отладчик производства ST Microelectronics, который можно приобрести у любого крупного дистрибьютора электроники. В дополнение к стандартному ST-LINK/V2, ST предлагает вариант ST-LINK/V2-ISOL, который обеспечивает цифровую изоляцию между ПК и целевой платой. Эта изоляция выдерживает напряжение до 1000В среднеквадратичное значение .
Этот отладчик имеет 20-контактный разъем IDC для подключения к целевым платам. Распиновку этого разъема можно найти ниже.
Nucleo ST-LINK/V2
ST-LINK/V2, встроенный в платы Nucleo-64 и Nucleo-144, также можно использовать в качестве автономного отладчика. Для использования встроенного отладчика необходимо снять перемычки с CN2
(Nucleo-64) или CN4
(Nucleo-144). Тогда можно использовать CN4
(Nucleo-64) или CN6
(Nucleo-144) для подключения к вашей целевой плате.
Этот отладчик имеет 6-контактный разъем dupont для подключения к разъему SWD на целевой плате. Распиновку этого разъема можно найти ниже.
Клон ST-LINK/V2
Самая дешевая альтернатива обоим официальным вариантам ST — китайский клон ST-LINK/V2. Этот клон предлагает такое же подключение, когда речь идет о SWD. Он не предоставляет полный интерфейс JTAG. Тем не менее, он имеет несколько дополнительных контактов питания, как +5 В, так и +3,3 В.
Этот отладчик имеет 10-контактный разъем IDC. Распиновку этого разъема можно найти ниже.
swd — STM32 + Black Magic Probe: подтянуть SWDIO и SWO?
\$\начало группы\$
Я разрабатываю схему STM32F103 и планирую программировать и отлаживать ее с помощью датчика Black Magic.
Я подключил SWDIO, SWCLK и SWO к стандартному 10-контактному отладочному разъему ARM Cortex M. Насколько я понимаю, пробник будет контролировать напряжения на этих линиях, и я должен оставить их плавающими, т. е. никаких подтягиваний или понижений на этих линиях.
Тем не менее, оценочная плата Nucleo, на которой я основываю свой проект, имеет разъем JTAG, и одна из вещей, которую они делают, — это слабое подтягивание линий для TMS/SWDIO и TDO/SWO с помощью резистора 10 кОм до 3,3 В:
Должен ли я также добавить 10k pull up на этих линиях?
Аргументы против добавления 10к подтягиваний:
Плата Nucleo не предназначена для работы с зондом Black Magic; он был разработан в более раннюю эпоху для работы с устройством JTAG (вероятно, ST-Link).
Если Black Magic не ожидает увидеть напряжения на этих линиях и не имеет защитных диодов с обратным смещением, ток будет течь от платы-мишени обратно в Black Magic, что может сбить его с толку или привести к неисправности.
Я просмотрел схемы плат для хобби, которые, по словам людей из Black Magic, совместимы с их зондом, и ни одна из них не использует SWDIO или SWO. Они просто оставляют их плавающими.
Единственный аргумент в пользу добавления 10k подтягиваний, который я вижу, заключается в том, что оценочная плата производителя обычно является самым надежным источником правды, и, возможно, есть какая-то причина, неизвестная мне, почему оставлять эти строки плавающими — плохая идея.
Если кто-то еще разработал схему, которую вы используете с Black Magic, или даже другой программатор SWD, такой как ST-Link, можете ли вы сказать мне, подтянули ли вы SWDIO и SWO?
- стм32
- швд
\$\конечная группа\$
\$\начало группы\$
STM32 уже имеет внутренние подтягивающие резисторы на выводах SWD. Листы данных и примеры STM32 включают упоминание о внешних резисторах puii для шумных сред. Если какой-то отладочный адаптер не может справиться, скажем, с дополнительным сопротивлением 10 кОм к VCC (и/или GND), забудьте об этой игрушке и купите настоящий отладочный адаптер, которому вы можете доверять.
После проверки нескольких документов STM32 они упоминают, что стандарт IEEE JTAG предписывает, чтобы сигналы имели подтягивающие резисторы, чтобы они не плавали. Но также в документах говорится, что микроконтроллеры STM32 имеют внутренние подтягивающие резисторы, поэтому внешние не нужны.