Как прошить чип stm32
Содержание:
- Contributing and versioning
- Софт
- Работа с STM32 ST-LINK Utility через консоль
- Консольная утилита ST-LINK_CLI
- Ремонт китайского программатора ST LINK V2 и как прошить контроллер без программатора.
- Маркировка STM32
- Introduction
- Разновидности программаторов ST-Link
- Installation
- Прошивка STM32 с помощью USB-Uart переходника под Linux (Ubuntu)
- Прошивка STM32 с помощью ST-Link программатора под Windows
- Программирование STM32VLDiscovery через Keil.
- Joint Test Action Group (JTAG)
- Вместо заключения
- Вариант №1 загрузка прошивки с помощью другого программатора.
- Universal Synchronous and Asynchronous Receiver-Transmitter (USART)
- Single Wire Interface Module (SWIM), Serial Wire Debugging (SWD) и ST-LINK
- Можно ли использовать плату ST-Link V2.1 от плат Nucleo?
- Вариант №2 загрузка прошивки с помощью USB-UART конвертера.
- Прошивка STM32 с помощью USB-Uart переходника под Windows
Contributing and versioning
- Before creating a pull request, please ALWAYS open a new issue for the discussion of the intended new features. Bugfixes don’t require a discussion via a ticket-issue. However they should always be described in a few words as soon as they appear to help others as well.
- Contributors and/or maintainers may submit comments or request changes to patch-proposals and/or pull-requests.
- ATTENTION: NEVER EVER use the ‘#’ character to count-up single points within a listing as ‘#’ is exclusively reserved for referencing GitHub issues and pull-requests. Otherwise you accidentally introduce false cross references within the project.
- Please start new forks from the develop branch, as pull requests will go into this branch as well.
Please also refer to our Contribution Guidelines.
Софт
Перейдем теперь к программной составляющей. Нам понадобится драйвер для программатора и управляющая софтина, через через которую мы будем загружать прошивку в микроконтроллер. Для этого нам нужно на официальном сайте www.st.com скачать пакет STM32 ST-LINK utility. А что нужно сделать перед скачиванием чего-нибудь с www.st.com? Правильно! Надо у них зарегистрироваться!!!
Кину ссылку на архив в конце статьи.
Итак, мы добыли архив с пакетом STM32 ST-LINK Utility. После установки подключаем программатор к ПК по USB и подключаем питание к отладочной плате. Если драйвера на программатор не установились автоматически, то идем в диспетчер устройств, там находим наш STM32 STLink, выбираем Обновить драйвер->Выполнить поиск на этом компьютере. После этого все должно заработать. Затем, из меню «Пуск» запускаем программу «STM32 ST-LINK Utility«:
Выглядит интерфейс ST-LINK Utility вот так:
Далее, нам необходимо произвести небольшие настройки. В меню выбираем Target->Settings…
Открывается вот такое окошко:
Выставляем настройки, как на скриншоте и нажимаем OK. После этого программатор автоматически подключится к прошиваемому микроконтроллеру. Пробежимся по кнопкам управления:
«Подключиться к микроконтроллеру» — выполняет подключение программатора к МК. При этом работа прошивки останавливается. После этого можно выполнять дальнейшие манипуляции с flash-памятью МК.
«Отключиться от микроконтроллера» — после того, как мы все сделали, нажимаем на эту кнопку и SL-Link отключается от МК, при этом запускается загруженная во flash-память прошивка.
«Очистить чип» — при нажатии на эту кнопку стирается вся flash-память микроконтроллера. Это необходимо делать перед загрузкой другой прошивки в МК.
Для того, чтобы прошить наш .hex или .bin файл в МК нужно сделать следующее. В меню выбираем Target->Programm…
После этого у нас открывается окошко выбора файла прошивки. Выбираем нужный нам файл, после чего появляется вот такое окно:
Здесь нам нужно нажать Start чтобы запустить процесс. После того, как прошивка была загружена в МК, нажимаем на кнопку «Отключиться от микроконтроллера«.
Те, кто раньше работал с микроконтроллерами AVR знают о такой вещи как фьюз-биты. Если в AVR-ках неправильно их выставить, то прошивка может работать некорректно. Для вас хорошая новость: в STM32 фьюз-битов нет! Достаточно просто залить в МК файл с управляющей программой и все будет работать.
Ну что ж, на этом, пожалуй, закончу, всем кто дочитал, спасибо за внимание Продолжение тут
Работа с STM32 ST-LINK Utility через консоль
Консольная утилита ST-LINK_CLI
Не для кого не секрет, что для прошивки контроллеров семейства stm32 есть утилита STM32 ST-LINK Utility с графическим интерфейсом и неплохим функционалом. В комплекте с графическим интерфейсом утилиты так же идёт консольная версия — ST-LINK_CLI.exe .
Консольная утилита ST-LINK_CLI
Графический интерфейс утилиты STM32 ST-LINK Utility хорошо подходит для ручной, наглядной, прошивки контроллера и конфигурации его памяти и регистров, консольную утилиту можно подключить к средам разработки и с её помощью автоматизировать прошивку серии контроллеров.
Функционал консольной утилиты тот же, что и у утилиты с графическим интерфейсом, только вся работа идёт через консоль.
Что бы получить перечень поддерживаемых команд утилитой ST-LINK_CLI достаточно её запустить без параметров.
Рассмотрим основные команды:
Рассмотрим основные команды:-Rst — сброс, перезагрузка камня-ME — очисть всю flash память-SE — стереть выбранные сектора flash памяти (обычно один сектор занимает 1КБ или 0x0400 для low и medium семейств контроллеров)
Синтаксис: -SE <Start_Sector>
пример:
STM32 ST-LINK CLI v2.0.0
STM32 ST-LINK Command Line Interface
ST-LINK SN : 0123456789ABCDEF12345678
ST-LINK Firmware version : V2J21S4
Connected via SWD.
Connection mode : Normal.
Device ID:0x440
Device flash Size : 64 Kbytes
Device family :STM32F030xx/F051xx/F071xx
Memory Sector @0x08000000 erased.
Memory Sector @0x08000400 erased.
Memory Sector @0x08000800 erased.
Memory Sector @0x08000C00 erased.
Memory Sector @0x08001000 erased.
-P — загрузка прошивки
Синтаксис: -P <File_Path>
пример:
ST-LINK SN : 0123456789ABCDEF12345678
ST-LINK Firmware version : V2J21S4
Connected via SWD.
Connection mode : Normal.
Device ID:0x440
Device flash Size : 64 Kbytes
Device family :STM32F030xx/F051xx/F071xx
Loading file…
Flash Programming:
File : D:\project1\lite.bin
Address : 0x08000000
Flash memory programming…
██████████████████████████████████████████████████ 100%
Flash memory programmed in 0s and 94ms.
Programming Complete.
-V — верификация
Работа с опциональными байтами-OB RDP=<Level> — установка защиты от чтения памяти
0 — защита отключена
1 — защита включена
2 — защита включена (отладчик и загрузчик в SRAM использовать можно)
Используя данную утилиту можно написать скрипт, которым можно прошивать и конфигурировать контроллеры вводом одной команды. Например: прошьём и перезагрузим контроллер.
Если добавить goto и pause то можно будет перепрошивать серию контроллеров одним нажатием клавиши.
Скрипт можно написать в любом текстовом редакторе, например блокноте и сохранить с разрешением *.bat, если будете его использовать проверьте пути к утилите ST-LINK_CLI.exe и укажите путь к своей прошивке.
Другой пример использования консольной утилиты ST-LINK_CLI. Есть задача по прошивки серии устройств на основе контроллера stm32. На плате во время её проектирования были предусмотрены специальные площадки для удобного подключения программатора, в который можно запаять или штыревой PLS разъём, или подсоединяться к ним нему используя специальный щуп из подпружиненных контактов. В контроллере находится 2 прошивки: основная прошивка и загрузчик, идентификатор устройства и блок данных. Контроллер нужно прошить, проверить целостность прошитых данных и защитить контроллер от считывания. Для данной цели за пару часов была написана небольшая утилита с графическим интерфейсом (в некоторых случаях на этапе отладки нужно без проблем менять некоторые параметры прошивки — это куда проще сделать щёлкнув по паре галочек), которая используя консольную утилиту ST-LINK_CLI прошивает и конфигурирует контроллер за пол минуты, когда при ручной прошивки контроллера на это уйдёт куда больше времени.
Самописная утилита для прошивки устройств
Alex_EXE | 12.03.2017 | STM32 |
Ремонт китайского программатора ST LINK V2 и как прошить контроллер без программатора.
Наверное многие STMчики столкнулись с такой проблемой как выход из строя вот таких китайских программаторов ST LINK V2.
Основная причина этого не защищённость их выводов от превышение напряжения следствие чего при не грамотном использование они выходят из строя, так же и у меня. При разработки очередного частотного преобразователя вышли из строя два таких программатора причина была банальна, при испытания очередной прошивки частотника я их не отключал от устройства следствие из за выбросов напряжения у них просто выгорели порты так что советую по личному опыту отключать программатор от устройства где используется высокое напряжение или индуктивная нагрузка при его работе.
Но не будем уходить от темы ремонта, покопавшись в интернете я обнаружил что прошивка данных программаторов находится в свободном доступе даже есть какие то обновления и конечно плюс наличие в закромах несколько контроллеров STM32F103C8 подтолкнуло меня на идею их отремонтировать а не заказывать новые.
Что потребуется для этого:
а) STM32F103C8;
б) рабочий программатор;
в) фен паяльный и паяльник;
г) стабилизатор напряжения если не исправен;
д) и конечно прямые руки.
Приступим, первым делом отпаиваем феном не рабочую микросхему, потом проверяем наличие 3,3в на выходе стабилизатора( смотрим ниже где) если нет значит выпаиваем его тоже и взамен них устанавливаем рабочие компоненты.
Да кстати в некоторых программаторах стоят контроллеры STM32F101CBT6 их тоже можно заменить на STM32F103C8T6 и что за стабилизатор в корпусе SOT-23-5 я так не смог определить лишь по выводам нашёл аналоги: LP2981AIM5-3.3 или RT9193-33. Если не сможете достать замену сгоревшему стабилизатору то придётся импровизировать( смотрите фото выше) как я приспособить AMS1117-3.3 или что то другое подходящее.
Для загрузки прошивки в новый контроллер можно использовать один из двух подходящих вариантов:
a) с использованием другого программатора, где мы заменили в неисправном программаторе неисправные компоненты а потом просто прошили;
б) с помощью USB to UART конвертера, для этого метода вам придётся впаять для прошивки контроллер в любую отладочную плату где есть вывод BOOT0, USART1_TX и USART1_RX.
Оба варианта прошивки описаны ниже.
Маркировка STM32
Device family | Product type | Device subfamily | Pin count | Flash memory size | Package | Temperature range |
---|---|---|---|---|---|---|
STM32 = ARM-based 32-bit microcontroller |
F = General-purpose L = Ultra-low-power TS = TouchScreen W = wireless system-on-chip |
60 = multitouch resistive 103 = performance line |
F = 20 pins G = 28 pins K = 32 pins T = 36 pins H = 40 pins C = 48/49 pins R = 64 pins O = 90 pins V = 100 pins Z = 144 pins I = 176 pins B = 208 pins N = 216 pins |
4 = 16 Kbytes of Flash memory 6 = 32 Kbytes of Flash memory 8 = 64 Kbytes of Flash memory B = 128 Kbytes of Flash memory Z = 192 Kbytes of Flash memory C = 256 Kbytes of Flash memory D = 384 Kbytes of Flash memory E = 512 Kbytes of Flash memory F = 768 Kbytes of Flash memory G = 1024 Kbytes of Flash memory I = 2048 Kbytes of Flash memory |
H = UFBGA N = TFBGA P = TSSOP T = LQFP U = V/UFQFPN Y = WLCSP |
6 = Industrial temperature range, –40…+85 °C. 7 = Industrial temperature range, -40…+ 105 °C. |
STM32 | F | 103 | C | 8 | T | 6 |
Introduction
STLink is an open source toolset to program and debug STM32 devices and boards manufactured by STMicroelectronics.
It supports several so called STLINK programmer boards (and clones thereof) which use a microcontroller chip to translate commands from USB to JTAG/SWD. There are four generations available on the market which are all supported by this toolset:
-
STLINK/v1 (obsolete as of 21-11-2019, continued support by this toolset)
- transport layer: SCSI passthru commands over USB
- stand-alone programmer and present on STM32VL Discovery boards
-
STLINK/v2
- transport layer: raw USB commands
- stand-alone programmer and present on STM32L Discovery and Nucleo boards
-
STLINK/v2-1
- transport layer: raw USB commands
- present on some STM32 Nucleo boards
-
STLINK/v3
- transport layer: raw USB commands
- stand-alone programmer
On the user level there is no difference in handling or operation between these different revisions.
The STlink toolset includes:
- a communication library (libstlink.a),
- a programmer and chip information tool (st-info),
- a flash manipulation tool (st-flash),
- a GDB server (st-util) and
- a GUI-Interface (stlink-gui)
Разновидности программаторов 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 портом в компе. Так что при работе с этим программатором надо быть предельно внимательным!
Installation
Windows:
As of Release v1.6.1 stand-alone Windows binaries are made available (again) on the release page of the project.
Please ensure to select the correct version for your system (i686 or x86_64). The archive file can be unzipped to any desired location as it does not contain any hardcoded paths. However we suggest to move the unzipped application folder to on 32-bit systems and to on 64-bit systems (the toolset is a 32-bit).
Alternatively one may compile and install from source as described in our .
macOS:
We recommend to install from:
Alternatively one can compile and install from source as described in our .
Linux:
We recommend to install from the package repository of the used distribution:
- Debian Linux: (Link)
- Ubuntu Linux: (Link)
Other Operating Systems:
Прошивка STM32 с помощью USB-Uart переходника под Linux (Ubuntu)
Устанавливаем stm32flash
http://launchpadlibrarian.net/188294676/stm32flash_0.4-2_i386.debstm32flashhttps://launchpad.net/ubuntu/wily/i386/stm32flash/0.4-2
Если используем USB-UART переходник, имя порта буде примерно такое /dev/ttyUSB0
Получить информацию о чипе
Результат:
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB
Пишем в чип
Результат:
stm32flash 0.4 http://stm32flash.googlecode.com/ Using Parser : Raw BINARY Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Write to memory Erasing memory Wrote and verified address 0x08012900 (100.00%) Done. Starting execution at address 0x08000000... done.
Прошивка STM32 с помощью ST-Link программатора под Windows
При использовании программатора ST-Link выводы BOOT0 и BOOT1 не используются и должны стоять в стандартном положении для нормальной работы контроллера.
Качаем с сайта st.com Утилиту STM32 ST-LINK Utility. Устанавливаем ее. С ней должен быть установлен и драйвер для ST-Link. Если нет, качаем и устанавливаем драйвера ST-Link: http://www.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link009.html Подключаем ST-Link в USB- разъем компьютера, а соответствующие выводы программатора подключаем к выводам тестовой платы согласно маркировки.
Запускаем программу STM32 ST-LINK Utility
Выполняем пункт меню Target -> Connect
Выполняем пункт меню Target -> Erase Chip
Выполняем пункт меню File -> Open file…
Выбираем файл для загрузки в микроконтроллер.
Выполняем пункт меню Target -> Programm & Verify…
После завершения прошивки и проверки, загруженная программа автоматически запустится.
Программирование STM32VLDiscovery через Keil.
Подключаем нашу платку к USB, и ждем пока она определится как внешний носитель. Если Windows не увидел вашу плату (как было у меня), то советую проверить в первую очередь кабель и разъем для него на плате. У меня, например, отошел контакт на Discovery и я очень долго пытался понять, почему же плата не работает
Но чаще всего подключение проходит без проблем, так что двигаемся дальше. Идем в папку с Keil’ом и находим драйвер для USB. Он лежит вот тут:
ARM\STLink\USBDriver (это в папке, куда установлен Keil)
Запускаем ST-Link_V2_USBdriver.exe и устанавливаем его. Возвращаемся чуть назад – в папку C:\Keil\ARM\STLink и видим там файл STLinkUSBDriver.dll размером около 65 кб. Его надо заменить на файл – STLinkUSBDriver.dll (подменять файл следует только в том случае, если ST-LINK завести не удается (!) ).
Первый этап позади!
Запускаем Keil и открываем там проект, который будем заливать в железку. Открываем меню Flash-Configure Flash Tools. Во вкладке Debug выбираем Use ST-Link Debugger и ставим галочку Run to main():
Теперь открываем вкладку Utilities и тоже выбираем ST-Link Debugger.
Думаете все? А вот нет, танцы с бубном только начинаются! Нажимаем кнопку Settings и в появившемся окне нужно добавить Programming algorithm для нашего девайса:
В этом же окне открываем вкладку Debug, находим поле Port и вместо JTAG ставим SW:
С настройкой закончили, но и это еще не все. Открываем файл stm32f10x.h и находим в районе 45-55 строк такой текст:
#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) /* #define STM32F10X_LD */ /* STM32F10X_LD: STM32 Low density devices */ /* #define STM32F10X_LD_VL */ /* STM32F10X_LD_VL: STM32 Low density Value Line devices */ /* #define STM32F10X_MD */ /* STM32F10X_MD: STM32 Medium density devices */ /* #define STM32F10X_MD_VL */ /* STM32F10X_MD_VL: STM32 Medium density Value Line devices */ /* #define STM32F10X_HD */ /* STM32F10X_HD: STM32 High density devices */ #define STM32F10X_XL /* STM32F10X_XL: STM32 XL-density devices */ /* #define STM32F10X_CL */ /* STM32F10X_CL: STM32 Connectivity line devices */ #endif
Надо чтобы тут обязательно была раскомментирована строка #define STM32F10X_MD_VL и закомментированы все остальные, иначе программа зашьется, но не заведется.
Не забываем в настройках проекта попросить компилятор генерировать hex:
Собираем проект и нажимаем кнопку Load. В случае удачной прошивки видим строки:
Если все-таки почему-то у вас не вышло прошить плату через Keil, то есть второй способ.
Joint Test Action Group (JTAG)
JTAG — весьма популярный интерфейс, ставший промышленным стандартом. Интерфейс применяется для подключения к сложным интегральным схемам с целью тестирования и отладки. В том числе, при помощи данного интерфейса можно осуществлять заливку прошивок в чипы STM32.
На чипе STM32F103RB JTAG-интерфейс выведен на следующие позиции:
- JTMS (JTAG Test Mode Select) – PA13
- JTCK (JTAG Test Clock) – PA14
- JTDI (JTAG Test Data Input) – PA15
- JTDO (JTAG Test Data Output) – PB3
- JNTRST (JTAG Test nReset) – PB4
Для функционирования коммуникации с чипом достаточно подключить только четыре первых позиции, но для большей гибкости, особенно в сложных случаях рекомендуется так же использование JNTRST.
Вместо заключения
Разработчики STM32 проделали огромную работу, как в плане разработки своих чипов, так и программного обеспечения. Несомненно, что чипы STM32 современны и весьма удобны в работе. Вокруг них собрана невероятная инфраструктура, написаны сотни и тысячи спецификаций, разработаны десятки программных и аппаратных комплексов для работы с микроконтроллерами STM32. Но все это многообразие может вызвать реакцию отторжения у новичка, который может быть просто ошеломлен объемом информации, которую следует переварить, дабы хоть как-то начать ориентироваться в мире STM32. И надеюсь, что мое кратенькое погружение в запутанный мир современной микроэлектроники позволит хоть немного облегчить труд познания.
Казалось бы, что тема прошивки чипов STM32 исчерпана, но приведенные методики хоть и являются массовыми, но сами по себе всего лишь верхушка айсберга, вершина огромного пласта информации. И соответственно присутствует огромное, непаханое поле для творчества.
Вариант №1 загрузка прошивки с помощью другого программатора.
Тут мы подключаем прошиваемый программатор к рабочему, +5V к +5V, GND к GND, SWCLK и SWDIO к отверстия как на рисунке ниже.
Если прошиваемый программатор отличается то выводы SWCLK и SWDIO для прошивки можно найти с помощью прозвонки мультиметром.
Перед тем как начать качаем архив с нужным софтом STM32 ST-LINK Utility v4.3.0 setup.exe и Protected-2-1-Bootloader.bin, разархивируем, устанавливаем программу для прошивки STM32 ST-LINK Utility v4.3.0 setup.exe и запускаем её. Подключаем наш прошиваемый программатор к рабочему и далее по инструкции ниже, если контроллер не заблокирован от чтения то начинаем с пятого пункта, файл для прошивки Protected-2-1-Bootloader.bin который тоже находится в архиве.
Если не понятно на картинках, делаем так:
1) жмём Connect;
2) если выскакивает табличка память заблокирована, выполняем следующие пункты инструкции если нет то переходим к пункту 6;
3) жмём Target->Option Bytes…;
4) в Read Out Protection выбираем Disabled и жмём внизу на Apply, память контроллера сбросится и снимется защита;
5) жмём Connect;
6) жмём File->Open file…;
7) находим файл Protected-2-1-Bootloader.bin;
8) жмём Target->Program & Verify…;
9) в открывшемся окне где указан прошиваемый файл жмём Start;
10) контроллер должен начать прошиваться;
Надеюсь всё получилось теперь осталось настроить прошивку, переходим к <<Окончательная настройка прошивки для программирования контроллеров семейства STM8 и STM32.>> и там заканчиваем весь процесс.
Universal Synchronous and Asynchronous Receiver-Transmitter (USART)
Данный коммуникационный протокол позволяет подключаться к чипу даже обычным терминалом. В минимальной конфигурации для подключения к устройству нужен всего один провод. В этом случае данные будут отправляться только в одном направлении. Либо на устройство, либо с устройства. Но все же рекомендуется применять как минимум трехпроводную схему подключения: GND, TX, RX. Для подключения с целью прошивки необходимо использовать только USART1.
На чипе STM32F103RB USART1 располагается на следующих выводах:
- CK (Clock) – PA8
- TX – PA9
- RX – PA10
- CTS (Clear To Send) – PA11
- RTS (Request To Send) – PA12
При подключении к USART следует помнить, что чипы семейства STM32 работают на напряжении 3.3 В и не стоит подключаться к ним переходниками с напряжением в 5 вольт.
Single Wire Interface Module (SWIM), Serial Wire Debugging (SWD) и ST-LINK
Фирма ST весьма крупная, на начало 2020 в ней работало более 40 тысяч человек. Это очень много и управлять такой махиной без бюрократического подхода просто невозможно. Поэтому в недрах ST периодически рождаются и формируются различные экосистемы. Экосистема STM32 не стала исключением. Она росла, развивалась до того момента, пока разобраться в нагромождении аббревиатур, названий, интерфейсов, их групп и прочего стало очень не просто. Но возможно. Аббревиатурой SWIM, как правило именуют сразу три сущности: кабель, технологию подключения по одному проводу и аппаратный модуль, обеспечивающий подобное подключение. SWD — означает технологию отладки при использовании последовательного подключения. При чтении литературы и форумов по STM32 можно так же натолкнуться на сокращения типа SWO вкупе с SWV.
SWO это Single wire output, т.е. технология позволяющая по одному проводу выдавать из чипа какую-то информацию. Как правило она используется для отладки, когда разработчики не желают использовать обычные UART для ее вывода, что весьма полезно, так как в любой момент можно подключиться к работающему устройству и начать получать отладочную информацию. Получать и просматривать информацию можно посредством Serial Wire Viewer (SWV). По сути, обычным терминалом с дополнительными функциями. Выдача информации осуществляется только при использовании режима SWD и доступна на микропроцессорах начиная с Cortex-M3.
И подбираясь к самому интересному, хочется отметить, что под наименованием ST-LINK кроется не только комплекс технологий, объединяющих SWIM, SWD, SWO и тому подобное, но еще и программное обеспечение, которое реализует весь набор практик и интерфейсов.
Для подключения ST-LINK на STM32F103RB задействованы следующие выводы:
- SWDIO (Serial Wire Data Input/Output) – PA13
- SWCLK (Serial Wire Clock) – PA14
- TRACESWO (Trace of Serial Wire Output, та самая SWO) – PB3
Для работы через SWIM/SWD нужно-то всего два проводка, не забываем про обязательное соединение земли по всем подключенным устройствам. TRACESWO можно не подключать, особенно если данной функцией вы не пользуетесь, да и для отладки она, а не для загрузки прошивки.
Можно ли использовать плату ST-Link V2.1 от плат Nucleo?
В процессе изысканий способов заливки прошивок разными способами в плату на основе чипа STM32 от платы донора Nucleo-64 была успешно отломана часть с программатором ST-Link версии 2.1 с портом USB. И сразу же возникает вопрос, а нельзя ли эту плату в дальнейшем использовать как удобный программатор? Ведь иметь одно устройство, сочетающее в себе сразу три (ST-Link, Virtual COM и USB Mass Storage) ой как удобно.
Nucleo-64 с подключенным SWD ST-Link V2.1
Давайте попробуем, в качестве бонуса, подключить программатор ST-Link от платы Nucleo обратно к плате Nucleo посредством проводков, словно мы используем произвольный чип STM32 с программатором ST-Link V2.1.
На «огрызке» имеется несколько разъемов и перемычек для подключения чего-либо, вот они:
- CN2 – выбор режима работы ST-Link через коннектор SWD или же через дорожки на печатной плате.
- CN3 – выход на UART (пины Tx, Rx).
- CN4 – коннектор SWD.
- CN12 и CN11 – на некоторых платах используется как выход для пинов вместо внешнего осцилятора. При поставке закрыты на землю с обратной стороны.
- JP1 – применяется для ограничения потребления платой через порт USB. Если перемычка снята, то максимальное потребление платой и всей ее обвязкой должно быть не более 300 мА. Если перемычка установлена, то максимальное потребление не должно превышать 100 мА, при этом питание платы Nucleo должно осуществляться через E5V или VIN пины. Однако, если плата подключена по USB не к порту компьютера, а к USB-блоку питания или USB-хабу со своим питанием, то Nucleo-64 можно запитывать и через USB при большом потреблении, но тогда нужно установить перемычку. Ограничения внесены на тот случай, если плата перестает стабильно работать/определяться при перегрузке по питанию порта USB, по большей части относится к портам USB1/USB2.
Итак, для целей использования ST-Link от Nucleo как отдельного программатора ST-Link V2.1 следует:
- Снять перемычки с CN2, таким образом мы активируем коннектор SWD.
- Подключить выводы с коннектора CN4, первый пин верхний и обозначен точкой, подключаем сразу к «огрызку» Nucleo-64:
- VDD_Target – сенсор питания платы, через него нельзя запитать что-либо, он действует наоборот. При подключении к платам со стандартным питанием его можно не подключать.
- SWCLK – подключаем к PA14
- GND
- SWDIO – подключаем к PA13.
- NRST – сброс
- SWO – порт по отладочной информации.
- Также подключаем пины Tx (сверху) и Rx (снизу) к PA10 и PA9 соответственно.
- Берем питание еще откуда-либо, например, с левого пина JP1, там 3.3 вольта.
Соответственно, если все подключено верно, то появляется сразу три возможности:
- При подключении ST-Link V2.1 к ПК по USB подключается папка с несколькими файлами, включая инструкцию. Эта папка – внутренняя Flash-память ST-Link (он так же построен на чипе STM32, поэтому в нем все есть). Если в эту папку скопировать файлик с прошивкой, то он автоматически запишется в подключенную плату. Однако, следует учитывать, что объем «флешки» программатора всего 156 Кб, и очень объемную прошивку залить таким образом может не получиться.
- Подключаться по SWD (ST-Link) программаторами и осуществлять все предусмотренные операции. При этом корректно отрабатывает Reset.
- Подключаться к USART1 (или любому другому доступному к которому были подключены выводы) терминальной программой. При этом в операционной системе COM-порт определяется как STLink Virtual COM Port. А при наличии правильной конфигурации BOOT01/BOOT1 можно так же обращаться и к заводскому загрузчику.
Вариант №2 загрузка прошивки с помощью USB-UART конвертера.
В контроллерах STM при производстве вшивается специальный программный загрузчик который может использовать выводы USART1 или USART2( зависит от контроллера) для загрузки в него прошивки, кому интересно качаем в интернете документ AN2606 и изучаем.
Схема подключения стандартная, вывод BOOT0 должен быть подключён к VCC( 3.3V) так контроллер будет знать что будет прошит через USART1.
Для прошивки вам потребуется специальная программа и сам файл прошивки flash_loader_demo_v2.8.0.exe и Protected-2-1-Bootloader.bin качаем, устанавливаем.
А также повторюсь необходима отладочная плата куда должен быть впаян прошиваемый контроллер или если делаете собственный программатор то должны позаботиться о наличие выводов BOOT0 и USART TX-RX. Я для примера буду использовать отладочную плату STM32_Smart v2.0, к которой подключен USB-UART переходник и установлена перемычка на 3V и BOOT0, смотрите ниже.
Запускаем программу flash_loader_demo_v2.8.0.exe и далее по инструкции.
Описание:
1) запустили программу, она автоматически выбирает COM порт если не тот выберите вручную, жмём Next;
2) суда попадаем если память в контроллере заблокирована для чтения, жмём Remove protection, если нет защиты то переходим к пункту №4;
3) защита снята, OK;
4) Next;
5) Next;
6) выбираем Downloads to device, жмём выбрать файл на компьютере( квадратик с точками);
7) заходим в папку с файлом Protected-2-1-Bootloader.bin, меняем название файла на Bin files (*bin);
8) выбираем Protected-2-1-Bootloader.bin, жмём Открыть;
9) жмём Next;
10) идёт прошивка;
11) прошивка закончена удачно.
Для окончания процесса вы должны впаять контроллер в плату будущего программатора( если не делается на готовом устройстве) и продолжить настройки, читаем ниже.
Прошивка STM32 с помощью USB-Uart переходника под Windows
STM32BootloaderSTM32USARTFT232RLFT232RLftdichip.comVCP
Подключаем RX и TX выходы к соответствующим выводам USART1 микроконтроллера. RX переходника подключаем к TX микроконтроллера (A9). TX переходника подключаем к RX микроконтроллера (A10). Поскольку USART-USB имеет выходы питания 3.3В подадим питания на плату от него.
Чтобы перевести микроконтроллер в режим программирования, надо установить выводы BOOT0 и BOOT1 в нужное состояние и перезагрузить его кнопкой Reset или выключить и включить питание микроконтроллера. Для этого у нас есть перемычки. Различные комбинации загоняют микроконтроллер в различные режимы. Нас интересует только один режим. Для этого у микроконтроллера на выводе BOOT0 должно быть логическая единица, а на выводе BOOT1 — логический ноль. На плате это следующее положение перемычек:
После нажатия кнопки Reset или отключения и подключения питания, микроконтроллер должен перейти в режим программирования.