Программатор из обломка платы Nucleo

в 17:44, , рубрики: atollic true studio, nucleo, Nucleo-F401RE, Nucleo-F411RE, st-link, stlink, stlinkv2, stm32, True STUDIO, TrueSTUDIO
Программатор из обломка платы Nucleo - 1

Все платы Nucleo оснащены программатором, который можно пере использовать для программирования внешних устройств. Выглядит это примерно так.

Программатор из обломка платы Nucleo - 2

От платы Nucleo откалывается часть, которая называется программатор ST-Link/V2-1. Работает она по двум интерфейсам: SWD и UART.

SWD - двухпроводной полудуплексный интерфейс для программирования микроконтроллеров.
UART - двухпроводной полнодуплексный интерфейс для передачи данных между микроконтроллером и PC.
target устройство - то, что мы программируем. Электронная плата с микроконтроллером.

Из документов вам потребуется 68 страничный pdf с названием User manual STM32 Nucleo-64 boards (UN1724). Даташит для STM32F103CBT6.

Что потребуется из оборудования?

Оборудование

Назначение

Программатор ST-Link/V2-1

Переходник между интерфейсом USB и интерфейсом SWD

Кабель USBa-USBmini

Для соединения LapTopa и программатора

Перемычки гнездо-гнездо

Для соединения внешней PCB и программатора по интерфейсам SWD и UART.

Target устройство

То что мы будем программировать

Аппаратная часть

Ядром программатора является микроконтроллер STM32F103CBT6.

Программатор из обломка платы Nucleo - 3

Электрическая цель программатора широко известна и свободно скачивается ST-LINK/V2-1

Программатор из обломка платы Nucleo - 4

Чтобы переключить программатор в боевой режим программирования внешних плат надо открепить два джампера от разъёма CN2.

Программирование происходит через 6ти пиновый разъём CN4. На CN4 выведен интерфейс SWD. По выбору пинов можно заметить, что в прошивке ST-Link-а интерфейс SWD реализован скорее либо на основе SPI, либо программно на GPIO.

Pin

Name

Dir for PCB

WireName

GPIO

Пояснение

1

VDD_TARGET

in

--

--

Детектор напряжения на стороне target. По сути СN4.1 это однобитный ADC.

2

SWCLK

out

T_JTCK

PB13

тактирование SWD шины

3

GND

in

--

--

заземление

4

SWDIO

io

T_JTMS

PB14

провод для данных

5

NRST

out

T_NRST

PB0

сброс target устройства

6

SWO

in

T_SWO

PA10

лог от target устройства

Микроконтроллер воплощает не только программатор но и, внезапно, переходник с USB-UART. Разъём CN3 выводит на улицу USART2.

Pin

Имя провода

Направление для платы

GPIO

PinMux

MCU pin

1

STLINK_TX

out

PA2

USART2_TX

12

2

STLINK_RX

in

PA3

USART2_RX

13

Программная часть

Из ПО вам потребуется

Название программы

Назначение

STM32 ST-Link Utility

Клиентская утилита для программатора (GUI исполнение)

ST-LINK_CLI.exe

Клиентская утилита для программатора. (CLI версия)

TeraTerm

Терминал последовательного порта

Само собой абсолютные пути к бинарям этих утилит следует прописать в переменную PATH. У меня этот путь выглядел так. C:Program Files (x86)STMicroelectronicsSTM32 ST-LINK UtilityST-LINK Utility

При соединении программатора и NetTop PC в операционной системе появляется новое устройство. ST-link debug. Еще появляется виртуальный последовательный порт STMicroelectronics STLink Virtual Com Port (COM4)

Программатор из обломка платы Nucleo - 5

Светодиоды. LED устроен так, что не могут одновременно светиться красный и зеленый. При 3,3V светит красный, при 0 V зеленый.

Цвет

Поведение

Смысл

Красный

Мигание

до инициализации

Красный

непрерывный

инициализация прошла успешно

Зеленый

непрерывный

Внешнее устройство проинициализировано

красный-зеленый

мигание

происходит обмен данными между программатором и устройством

оранжевый

непрерывный

сбой в обмене данными

При корректном подключении программатора утилита STM32 ST-Link Utility распознает подключенный программатор и сможет вычитать часть значений физических адресов.

Программатор из обломка платы Nucleo - 6

Записывание прошивки

Инициировать процесс перепрошивки можно вот таким скриптом

echo off
cls

set project_name=stm32_board
set project_dir=%cd%
set ARTEFACT_HEX=%project_dir%build%project_name%.hex
set FLASH_TOOL=ST-LINK_CLI.exe

set OPTIONS=-c SWD freq=4000 UR  
set OPTIONS=%OPTIONS% -P %ARTEFACT_HEX% 
set OPTIONS=%OPTIONS% -V "after_programming" 
set OPTIONS=%OPTIONS% -Log
set OPTIONS=%OPTIONS% -TVolt
call %FLASH_TOOL% %OPTIONS%
call %FLASH_TOOL% -Rst

Лог записи прошивки

Программатор из обломка платы Nucleo - 7

Считывание прошивки

Этой же утилитой можно считать прошивку из микроконтроллера. Это сработает, если при записи не были установлены option bytes для запрета считывания.

echo off
cls

set PROJECT_NAME=read_firmware.bin
set FLASH_TOOL=ST-LINK_CLI.exe
set OPTIONS=-с SWD freq=2000  
set OPTIONS=%OPTIONS% -Dump 0x08000000 0x100000 %PROJECT_NAME%
%FLASH_TOOL% %OPTIONS%  

В консоли появится такой лог считывания прошивки.

Программатор из обломка платы Nucleo - 8

Достоинством данного отладчика является то, что в нем помимо интерфейса USB и SWD есть ещё UART. Это позволяет буквально не отходя от кассы поглядывать еще и на printf- отладку, что сыплет микроконтроллер в UART по мере своей прогрузки и работы .

Программатор из обломка платы Nucleo - 9

Отладочный сервер

Обладая отладчиком ST-Link/V2-1 вы можете подключить к этому переходнику GDB сервер и отлаживать программу по шагам. Если вы скачаете Atollic TrueSTUDIO, то у вас появится отладочный сервер. Хранится он будет в папке C:Program Files (x86)AtollicTrueSTUDIO for STM32 9.3.0ServersST-LINK_gdbserver

echo off
cls

set GDBServerDir="C:Program Files (x86)AtollicTrueSTUDIO for STM32 9.3.0ServersST-LINK_gdbserver"
set GDBServerPath=%GDBServerDir%ST-LINK_gdbserver.bat"
cd %GDBServerDir%
call %GDBServerPath% 

Внутри ST-LINK_gdbserver.bat

@echo off
cmd /K "ST-LINK_gdbserver.exe -c config.txt || echo GDB server exited"

Файл с конфигом указывает порт приложения, режим, интерфейс связи с target (SWD) и прочие параметры.

###############################################################
#### ST-LINK_gdbserver - Sample Configuration File
#### Each Line Contains one argument
#### Comment lines begin with #
####
#### Use option -c <config-file> to start with config file
####  ST-LINK_gdbserver -c config.txt
####
#### Using STM32F4_Discovery, 168MHz, SWO Clock 1000 MHz.
####  ST-LINK_gdbserver.exe -e -d -z 61235 -a 168000000 -b 168
####
#### Programming elf file
####  ST-LINK_gdbserver.exe -e -d -j C:devworkspaceMyProgDebugMyProg.elf
####
#### Get option information
####  ST-LINK_gdbserver.exe -h
####
###############################################################

###############################################################
#  -e                 : Enables persistant mode
###############################################################
-e

###############################################################
#  -f <Log-File>      : Name of log file. Please make sure
#                       that directory not is write protected.
#                     : Example
-f debug.log
###############################################################

###############################################################
#  -l <Log-Level>     : Logging level between 0 & 31
#          0            Disables logging
#          >=1          Enables logging of error messages
#          >=2          Adds warning messages
#          >=4          Adds communication specific messages
#          >=8          Adds all information messages
#          >=16         Adds all HW specific messages
###############################################################
#-l 31

###############################################################
#  -p <Port-Number>   : TCP-Listen Port-Number.
###############################################################
-p 61234

###############################################################
#  -v                 : Enables verbose mode
###############################################################
#-v

###############################################################
#  -r <delay-sec>     : Maximum Delay in status refresh
###############################################################
-r 15

###############################################################
# -d                  : Enables SWD mode
###############################################################
-d

Появится лог пуска отладочного сервера. Запустится процесс, который ожидает подключения по порту 61234.

Программатор из обломка платы Nucleo - 10

Далее уже GDB клиентом можно будет отлаживать прошивку по шагам. Как из консоли, так и через eclipse. Подробнее про это написано тут.

Результат

Удалось пристроить старый кусок от платы Nucleo в качестве программатора и отладчика ST-Link. Научился загружать в микроконтроллер *.hex файл через SWD интерфейс. Это простое решение которое порой не стоит ничего.

Источники

Автор: karenic

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js