Nrst stm32 что это
Перейти к содержимому

Nrst stm32 что это

  • автор:

Nrst stm32 что это

Текущее время: Пн фев 05, 2024 03:13:31

Часовой пояс: UTC + 3 часа

Запрошенной темы не существует.

Часовой пояс: UTC + 3 часа

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y

Работоспособность сайта проверена в браузерах:
IE8.0, Opera 9.0, Netscape Navigator 7.0, Mozilla Firefox 5.0
Адаптирован для работы при разрешениях экрана от 1280х1024 и выше.
При меньших разрешениях возможно появление горизонтальной прокрутки.
По всем вопросам обращайтесь к Коту: kot@radiokot.ru
©2005-2024

Nrst stm32 что это

Текущее время: Пн фев 05, 2024 03:13:31

Часовой пояс: UTC + 3 часа

Запрошенной темы не существует.

Часовой пояс: UTC + 3 часа

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y

Работоспособность сайта проверена в браузерах:
IE8.0, Opera 9.0, Netscape Navigator 7.0, Mozilla Firefox 5.0
Адаптирован для работы при разрешениях экрана от 1280х1024 и выше.
При меньших разрешениях возможно появление горизонтальной прокрутки.
По всем вопросам обращайтесь к Коту: kot@radiokot.ru
©2005-2024

Как «раскирпичить» STM32

Здравствуйте! Меня зовут Дмитрий Руднев. В этой публикации я поделюсь своим горьким опытом.

В современной разработке широко используются микроконтроллеры STM32. Они обладают неплохим соотношением цена/производительность, вокруг них сложилась развитая «экосистема». Для прошивки этих микроконтроллеров и внутрисхемной отладки обычно используют интерфейс Serial Wire (SWD).

В процессе отладки бывает всякое. Не беда, если STM32 после прошивки ведёт себя неадекватно. Обидно, если при этом к нему не удаётся подключиться.

На этом месте не надо впадать в отчаяние, т.к. «убить насмерть» STM32 в процессе программирования непросто, и его работоспособность можно восстановить штатными средствами.

После аппаратного сброса микроконтроллер первым делом запускает системный загрузчик. Системный загрузчик проверяет состояние входов BOOT0 и BOOT1 и по их состоянию определяет режим дальнейшей загрузки. В зависимости от состояния BOOT0 подключиться к микроконтроллеру можно, как минимум, двумя разными способами.

Connect Under Reset

Если на входе BOOT0 обнаружен низкий уровень, системный загрузчик передаёт управление пользовательской программе, находящейся в FLASH-памяти. Если при этом к интерфейсу SWD подключен в режиме «Connect Under Reset» внутрисхемный отладчик, ему удаётся управление перехватить.

Рассмотрим, как это сделать с помощью программы STM32 ST-LINK Utility и программатора ST-LINK/V2-1. Программа была получена с официального сайта ST. Программатор пришёл в составе платы NUCLEO-F446ZE.

Запускаем программу, входим в «Settings»:

В окне «Settings» выбираем режим «Connect Under Reset»:

Подключаемся к нашему «кирпичику»:

Производим очистку памяти программ:

Подключение по UART1

Очень часто для прошивки STM32 применяются недорогие китайские клоны ST-LINK/V2. Без аппаратной переделки режим «Connect Under Reset» они не поддерживают. В этом случае стоит попытаться очистить память программ, подключившись к микроконтроллеру по UART.

Если подать на вход BOOT0 высокий уровень, то можно подключиться к микроконтроллеру через интерфейс UART1 с использованием программы Flash Loader Demonstrator. Программу можно получить с официального сайта ST. Преобразователь USB–UART подойдёт любой.

Запускаем программу. Выбираем COM-порт, к которому подключен преобразователь USB–UART:

Убеждаемся, что соединение установлено:

На следующем экране программа показывает области памяти микроконтроллера:

На следующем экране мы должны выбрать действие. Выбираем Erase – All:

Очистка памяти программ успешно завершена:

На этом месте надо вернуть на вход BOOT0 низкий уровень.

От автора

Любое несчастье, которое происходит с Вами, с кем-то другим уже происходило. Всё, что описано в публикации, происходило со мной и моим оборудованием.

Первая часть публикации повествует о том, как я в самом начале самоизоляции «закирпичил» новенькую оригинальную NUCLEO-F446ZE.

Это не стало для меня ударом, т.к. я уже знал, что делать. Наоборот, в процессе восстановления работоспособности платы я даже получил какое-то удовольствие от работы.

Предыдущий опыт был более трагичным. Я использовал совсем бюджетную плату в связке с очень недорогим клоном ST-LINK/V2. В один прекрасный миг, связь с платой по SWD пропала.

Результаты поиска в сети убедили меня использовать режим «Connect Under Reset». Ничтоже сумняшеся, я подключил вывод NRST микроконтроллера к выводу «Reset» программатора. Не знал я тогда, что этот вывод используется только при работе с STM8.

Сигнал сброса не проходил. Связь по интерфейсу SWD не восстанавливалась. Игры с кнопкой «Reset» на плате результата не давали. В самый раз было начинать читать мануалы.

И метод RTFM сработал! Из раздела «2.3.10 Boot modes» datasheet DS5792 rev13 я узнал про загрузку через UART1. Затем я нашёл информацию о Flash Loader Demonstrator. Восстановить работоспособность STM32F103RET6 с этими инструментами было уже несложно, что и вылилось в 113 слов и пять картинок второй части публикации…

Буду рад, если мой опыт будет кому-то полезен!

  • Блог компании RUVDS.com
  • Программирование микроконтроллеров
  • Электроника для начинающих

STM32

STM32 — семейство 32-битных микроконтроллеров производства STMicroelectronics.

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

STLINK-V3MINI

STLINK-V3MINI — компактный внутрисхемный программатор и отладчик для STM32.

0483:374e STMicroelectronics STLINK-V3

Имя UART порта: /dev/ttyACM0

Адаптер

Разъёмы

STDC14

┌───────────────────────┐ │ 2 4 6 8 10 12 14 │ │ • • • • • • • │ │ │ │ • • • • • • • │ │ 1 3 5 7 9 11 13 │ └───────── ─────────┘
№ контакта Назначение
1
2
3 VCC 1)
4 TMS/SWDIO
5 GND
6 TCK/SWCLK
7 GND
8 T_JTDO/T_SWO 2)
9 T_JCLK
10 T_JTDI/NC 3)
11 GNDDetect 4)
12 T_NRST
13 T_VCP_RX
14 T_VCP_TX

ARM20

┌────────────────────────────────┐ │ 2 4 6 8 10 12 14 16 18 20 │ │ • • • • • • • • • • │ │ │ │ • • • • • • • • • • │ │ 1 3 5 7 9 11 13 15 17 19 │ └──────────── ────────────┘
№ контакта Назначение
1 VCC
2 VSUPPLY
3 nTRST
4 GND
5 TDI
6 GND
7 TMS/SWDIO
8 GND
9 TCK/SWCLK
10 GND
11 RTCK 5)
12 GND
13 TDO/SWO
14 GND
15 nSRST (NRST)
16 GND
17 DBGRQ
18 GND
19 DBGACK
20 GND

Соответствие контактов на разъёмах:

№ контакта Назначение
STDC14 ARM20
3 1 VTref
4 7 TMS/SWDIO
5 GND
6 9 TCK/SWCLK
7 GND
8 13 TDO/SWO
9 11 T_JCLK / RTCK
10 5 T_JTDI/NC / TDI
11 GNDDetect 6)
12 15 NRST
13 RX
14 TX

STM32MP157A

Тип Код Название Версия Дата Ссылка
Product Specifications DS12504 Arm® dual Cortex®-A7 800 MHz + Cortex®-M4 MPU , 3D GPU , TFT/DSI, 37 comm. interfaces, 29 timers, adv. analog 6.0 2021-05-18 оригинал
Reference Manuals RM0436 STM32MP157 advanced Arm®-based 32-bit MPUs 5.0 2021-01-21 оригинал
Application Notes AN5031 Getting started with STM32MP151, STM32MP153 and STM32MP157 line hardware development 3.0 2021-01-21 оригинал
AN5275 USB DFU/USART protocols used in STM32MP1 Series bootloaders 1.0 2019-10-15 оригинал
AN5168 STM32MP1 series DDR configuration 2.0 2021-10-19 оригинал
Programming Manuals PM0214 STM32 Cortex®-M4 MCUs and MPUs programming manual 10.0 2020-03-23 оригинал
Errata sheets ES0438 STM32MP15xx device errata 6.0 2021-02-25 оригинал

Программы

ST-MCU-FINDER-PC STM32 and STM8 product finder for desktops

STM32CubeProgrammer

STM32CubeProgrammer — это официальный инструмент от STMicroelectronics для создания разделов на любом накопителе, доступном на платформе STM32.

После создания STM32CubeProgrammer позволяет записывать и обновлять разделы предварительно созданными двоичными файлами.

Соединение между ПК и платой c STM32 может быть установлено через UART или USB .

Возможно понадобится установить пакет libusb

apt install libusb-1.0-0

После установки нужно добавить правила udev:

#!/bin/sh cd ~/STMicroelectronics/STM32Cube/STM32CubeProgrammer/Drivers/rules sudo cp *.* /etc/udev/rules.d/

Версия 2.8.0 не работает в Debian GNU/Linux — нужно использовать 2.7.0 или 2.6.0.

STM32CubeMX

STM32CubeMX is a graphical tool that allows a very easy configuration of STM32 microcontrollers and microprocessors, as well as the generation of the corresponding initialization C code

UM1718 User manual. STM32CubeMX for STM32 configuration and initialization C code generation. оригинал

STM32CubeIDE

Integrated Development Environment for STM32.
STM32CubeIDE is an advanced C/C++ development platform with peripheral configuration, code generation, code compilation, and debug features for STM32 microcontrollers and microprocessors. It is based on the Eclipse®/CDT framework and GCC toolchain for the development, and GDB for the debugging. It allows the integration of the hundreds of existing plugins that complete the features of the Eclipse® IDE.

SW4STM32

Это старое решение — используйте STM32CubeIDE

The System Workbench toolchain, called SW4STM32, is a free multi- OS software development environment based on Eclipse, which supports the full range of STM32 microcontrollers and associated boards. The SW4STM32 toolchain may be obtained from the website www.openstm32.org, which includes forums, blogs, and trainings for technical support. Once registered to this site, users will get installation instructions at the Documentation > System Workbench page to proceed with the download of the free toolchain.

Настройка

Дерево устройств

.dts — источник дерева устройств (DTS). Этот формат представляет собой текстовое представление дерева устройств в форме, которая может быть обработана DTC (компилятором дерева устройств) в двоичный файл, ожидаемый программными компонентами: ядром Linux, U-Boot и TF-A.

.dtsi — исходные файлы, которые могут быть включены из файла DTS
.h — файлы заголовков, которые могут быть включены из файлов DTS и DTSI

Процесс построения дерева устройств:

оригинал
Инструмент под названием DTC (Компилятор дерева устройств) позволяет компилировать исходные файлы DTS в двоичный файл.

Для настройки нужно использовать STM32CubeMX.

Готовые файлы удобно редактировать, использую стандартный редактор в Midnight Commander, для этого создан файл подсветки синтаксиса devicetree.syntax. Для включение нужно добавить в настройки (подробнее о настройке здесь):

file ..\*\\.(dts|dtsi)$ DeviceTree\sFile include devicetree.syntax

GPIO

Во время и сразу после сброса альтернативные функции не активны, а большинство портов ввода–вывода настроены на вход (input floating mode).

Когда контакт настроен как выход, значение, записанное в регистр выходных данных (GPIOx_ODR), выводится на контакт ввода–вывода. Выходной драйвер можно использовать в режиме push–pull или в режиме с открытым коллектором (open-drain), работает только низкий уровень, высокий уровень — HI-Z (Z–состояние).

Регистр входных данных (GPIOx_IDR) фиксирует данные, присутствующие на контакте ввода-вывода в каждом такте AHB(Advanced High–performance Bus).

13.3.1 General-purpose I/O ( GPIO )

During and just after reset, the alternate functions are not active and most of the I/O ports are configured in input floating mode.

When the pin is configured as output, the value written to the output data register (GPIOx_ODR) is output on the I/O pin. It is possible to use the output driver in push-pull mode or open-drain mode (only the low level is driven, high level is HI-Z).

The input data register (GPIOx_IDR) captures the data present on the I/O pin at every AHB clock cycle

GPIO используется для настройки линий ввода–вывода. Каждая группа GPIO состоит из 8 линий (K и Z) или 16 линий (A–J).

Аббревиатуры регистров

В описаниях регистров используются следующие сокращения (x = A до H, K или Z) :

GPIOx_MODER GPIO port mode register
GPIOx_OTYPER GPIO output type register
GPIOx_OSPEEDR GPIO output speed register
GPIOx_PUPDR GPIO port pull-up / pull-down register
GPIOx_IDR GPIO port input data register чтение состояний (вход)
GPIOx_ODR GPIO port output data register запись состояний (выход)
GPIOx_BSRR GPIO port bit set / reset register побитная запись в регистр (выход)
GPIOx_LCKR GPIO port configuration lock register
GPIOx_AFRL GPIO alternate function low register
GPIOx_AFRH GPIO alternate function high register
GPIOx_ASCR GPIO port analog switch control register

Загрузка

Запуск Linux на процессоре выполняется в несколько этапов, которые постепенно инициализируют периферийные устройства и память платформы.

Общая загрузочная цепочка Linux (указаны типичные размеры памяти для каждого этапа):

оригинал

Код ПЗУ

Код ПЗУ ( ROM code) — это часть программного обеспечения, которое хранится в ПЗУ . Он умещается в несколько десятков килобайт и отображает свои данные во встроенной оперативной памяти. Это первый код, выполняемый процессором, и он включает всю логику, необходимую для выбора загрузочного устройства (последовательное соединение или флэш–память), с которого первичный загрузчик (FSBL) загружается во встроенное ОЗУ . Для большинства продуктов требуется доверять приложению, работающему на устройстве, и код ПЗУ является первым звеном в цепочке доверия, которая должна быть установлена для всех запущенных компонентов: это доверие устанавливается путём аутентификации FSBL перед его запуском.

FSBL

First stage boot loader — первичный загрузчик. Он инициализирует (часть) дерева часов и внешнего контроллера ОЗУ , далее он загружает вторичный загрузчик во внешнее ОЗУ и передаёт ему управление.

В качестве такого загрузчика используется:

SSBL

Second-stage boot loader — вторичный загрузчик.

Он работает в большом объёме ОЗУ , поэтому он может работать с USB , Ethernet, дисплей и т. д., которые полезны для более гибкой загрузки ядра Linux (с флэш–устройства, сеть и т. д.) и удобны для пользователя (показывая пользователю экран-заставку).

Обычно d качестве такого загрузчика Linux во встроенных системах. используется:

TF-A

TF-A (Trusted Firmware-A) разделен на несколько двоичных файлов, каждый из которых выполняет свою главную роль. Для 32-битных процессоров Arm (AArch32) доверенная загрузка разделена на четыре этапа (в порядке выполнения):

1 (BL1) application processor trusted ROM
2 (BL2) trusted firmware
3-2 (BL32) runtime software
3-3 (BL33) non-trusted firmware

BL1, BL2 и BL32 являются частями TF-A.

В виду того, что STM32 MPU используют специальный код ПЗУ, этап загрузки BL1 удаляется. Код ПЗУ ожидает, что BL2 будет работать на уровне выполнения EL3. Этот режим выбирается, когда включён флаг сборки BL2_AT_EL3.

BL33 находится за пределами TF-A. Это первый незащищённый код, загруженный TF-A. Во время загрузки это вторичный загрузчик (SSBL). Для платформ MPU STM32 SSBL по умолчанию является U-Boot.

TF-A может управлять своей конфигурацией с помощью дерева устройств. На этапе BL2 это сокращённая версия ядра Linux, в которой во время загрузки используются только необходимые устройства. Его можно настроить с помощью STM32CubeMX.

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

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