Какой контакт замкнуть для перезагрузки stm
Перейти к содержимому

Какой контакт замкнуть для перезагрузки stm

Как «раскирпичить» 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 слов и пять картинок второй части публикации…

Изучаем STM32. Маленький урок по программатору

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

Контроллеры STM32 можно прошить двумя путями.
1) Через встроеный бутлоадер (бутлоадер, это такая маленькая программка внутри каждого микропроцессора STM32, которая прикидывается программатором — это если по простому). Прошивка в таком варианте происходит через UART (для связи с компьютером используется переходник USB>COM)

2)Внешним программатором. Из внешних программаторов на данный момент есть большой выбор. Это может быть и ваша отладочная плата STM32 Discovery, и китайский аналог ST-LINK V2 mini, и оригинальный ST-Link.

Первым вариантом я не пользовался, но сложного в нём вроде ничего нет. Нужно скачать утилиту STM32 ST-LINK Utility и на вашем прошиваемом микроконтроллере выставить определённый сигнал на ножке\ножках BOOT0\BOOt1. Допустим возьмём для примера самый дешёвый и простой микроконтроллер STM32F030F4P6 в корпусе TSSOP20. У него есть ножка BOOT0, которую если мы замыкаем на массу — то у нас контроллер будет прошиваться через SWD (то есть от внешнего программатора), а если на эту ножку подать напряжения питания, то контроллер будет стартовать с встроенного бутлоадера, и ждать пока мы его прошьём через UART, то есть с помощью программы ST-LINK Utility.

Вторым вариантом намного проще работать, так как помимо того что вы можете прошивать свои микроконтроллеры так ещё и в режиме реального времени отлаживать свои программы (дебажить))
Для прошивки в таких случаях используется всего 4 ножки (по минимуму)
1)Vcc — питание 3 Вольт
2)VSS(Gnd) — масса
3)SWCLK
4)SWDIO

Такой вариант подключения для прошивки используется в том случае, если вы не сконфигурировали ножки SWCLK и SWDIO в качестве портов ввода-вывода. Если же вы эти ножки используете в качестве портов ввода-вывода, то прийдётся ещё подключать "физичесу" линию сброса. — RST . В таком варианте у нас получается 5 проводов для подключения
1)Vcc — питание 3 Вольт
2)VSS(Gnd) — масса
3)SWCLK
4)SWDIO
5)NRST

Вот так выглядит распиновка на плате STM32F4Discovery разъёма для программирования внешних микроконтроллеров. Пин VDD_Target является пином, для снятия показаний напряжения с прошиваемого устройства. Этот если по простому — для согласования уровня напряжений между программатором и прошиваемым устройством.

Вот так выглядит разъём программатора ST-LINK V2 mini. В нём есть дополнительные средства для работы с STM8 и т.д, поэтому для работы с STM32 нам нужны пины
1)Vcc — питание 3 Вольт
2)SWDIO
3)VSS(Gnd) — масса
4)SWCLK
10)NRST

Вот так выглядит схема подключения для прошивки нашего простейшего микроконтроллера STM32F030F4P6

Как видите, никаких заморочек нет. На этом думаю всё, если будут вопросы, то пишите в коментах, я добавлю эти нюансы в статью.

Форум АСУТП

DemoN9577 осмотрелся
осмотрелсяСообщения: 121 Зарегистрирован: 22 июл 2017, 22:47 Имя: Сергей Страна: СССР Благодарил (а): 4 раза Поблагодарили: 22 раза

Перезагрузка ПЛК

Сообщение DemoN9577 » 06 окт 2020, 20:55

VADR администратор
администраторСообщения: 3971 Зарегистрирован: 25 июл 2008, 07:12 Имя: Диев Александр Васильевич Страна: Россия город/регион: г. Сегежа, Карелия Благодарил (а): 149 раз Поблагодарили: 216 раз

Перезагрузка ПЛК

Сообщение VADR » 06 окт 2020, 21:13

DemoN9577 осмотрелся
осмотрелсяСообщения: 121 Зарегистрирован: 22 июл 2017, 22:47 Имя: Сергей Страна: СССР Благодарил (а): 4 раза Поблагодарили: 22 раза

Перезагрузка ПЛК

Сообщение DemoN9577 » 06 окт 2020, 21:43

Alex здесь недавно
здесь недавноСообщения: 62 Зарегистрирован: 23 июл 2008, 19:30 Имя: Алексей Филиппов Благодарил (а): 3 раза Поблагодарили: 6 раз

Перезагрузка ПЛК

Сообщение Alex » 06 окт 2020, 22:30

Михайло почётный участник форума
почётный участник форумаСообщения: 3246 Зарегистрирован: 10 ноя 2009, 04:58 Имя: Толмачев Михаил Алексеевич город/регион: г. Чехов, МО Благодарил (а): 3 раза Поблагодарили: 189 раз

Перезагрузка ПЛК

Сообщение Михайло » 07 окт 2020, 06:30

Parliament74 завсегдатай
завсегдатайСообщения: 517 Зарегистрирован: 16 ноя 2016, 11:33 Имя: Галкин Максим Владимирович Страна: Россия город/регион: Магнитогорск Благодарил (а): 7 раз Поблагодарили: 129 раз

Перезагрузка ПЛК

Осознанное и необходимое решение — это физическая кнопка, подключенная к реле безопасности или safety-входу ПЛК по двум каналам с контролем целостности цепи, например.

А перезагрузка контроллера — это немного о другом ))
Но идея, конечно, интересная ))

Sergy6661 освоился
освоилсяСообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз

Перезагрузка ПЛК

Сообщение Sergy6661 » 07 окт 2020, 08:15

winb освоился
освоилсяСообщения: 248 Зарегистрирован: 31 янв 2017, 08:44 Имя: Маркушин Андрей Геннадьевич Страна: Россия город/регион: Нижегородская обл., Выкса Благодарил (а): 19 раз Поблагодарили: 63 раза

Перезагрузка ПЛК

Сообщение winb » 07 окт 2020, 08:46

Ryzhij почётный участник форума
почётный участник форумаСообщения: 5030 Зарегистрирован: 07 окт 2011, 09:12 Имя: Гаско Вячеслав Эриевич Страна: Россия город/регион: Рязань Благодарил (а): 335 раз Поблагодарили: 536 раз

Перезагрузка ПЛК

Сообщение Ryzhij » 07 окт 2020, 09:03

Т.е. речь должна идти не просто о программировании, а проектировании в целом.
Необходимость перегружать ПЛК в таких ситуациях возникает лишь в отвратительно спроектированных системах.

Отправлено спустя 3 минуты 51 секунду:

Разумеется, можно отличное грамотно увязанное железо запрограммировать спустя рукава, а можно аппаратно слепить такое. что без POPO в чувство не приведёшь, как ни изголяйся.

Отправлено спустя 6 минут 50 секунд:

Sergy6661 освоился
освоилсяСообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз

Перезагрузка ПЛК

Сообщение Sergy6661 » 07 окт 2020, 10:50

DemoN9577 осмотрелся
осмотрелсяСообщения: 121 Зарегистрирован: 22 июл 2017, 22:47 Имя: Сергей Страна: СССР Благодарил (а): 4 раза Поблагодарили: 22 раза

Перезагрузка ПЛК

Сообщение DemoN9577 » 07 окт 2020, 12:51

А каким образом перезагрузка перемещает механизмы в другое положение? Наоборот большинство переменных, хранящихся в temporary memory, теряются и положение становится еще более неопределенным.

Отправлено спустя 13 минут 35 секунд:

Sergy6661 освоился
освоилсяСообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз

Перезагрузка ПЛК

Сообщение Sergy6661 » 07 окт 2020, 14:38

Ryzhij почётный участник форума
почётный участник форумаСообщения: 5030 Зарегистрирован: 07 окт 2011, 09:12 Имя: Гаско Вячеслав Эриевич Страна: Россия город/регион: Рязань Благодарил (а): 335 раз Поблагодарили: 536 раз

Перезагрузка ПЛК

Сообщение Ryzhij » 07 окт 2020, 15:30

Jackson администратор
администраторСообщения: 13959 Зарегистрирован: 17 июн 2008, 16:01 Имя: Евгений свет Брониславович Страна: Россия город/регион: Санкт-Петербург Благодарил (а): 403 раза Поблагодарили: 815 раз

Перезагрузка ПЛК

Сообщение Jackson » 09 окт 2020, 10:27

Глупости Вам рассказывают.
При отказе — это вообще отдельная песня, мало ли что отказало, это нештатная работа. Но если отказ изделия не вызывает отказ контроллера, то к контроллеру прикасаться не надо, он должен работать. А если вызывает — паршиво значит система спроектирована или сделана. Единственное, в мануале надо написать что «при таких-то отказах перезагрузите контроллер», но даже этого сделать, я так понимаю, Ваши программисты, не удосужились. Выглядит криво, не должно такого быть.

После аварийного останова перезагружать автоматику не надо, это глупости.

По-моему, криворукие ленивые программисты просто не хотят признавать свою криворкуость и лень. Я б таких гнал далеко и надолго, или пусть переделывают.
[+] вот так надо поступать, получая такие ответы Купил как-то сын директора Opel Astra новую. Через месяц приехал по гарантии к дилеру — текла дверь пассажира от дождя. Внимательный осмотр показал что текут вообще все двери, просто не так заметно. Буквальный ответ дилера — это неустранимая недоработка OPEL, до свидания. Директор, не тормозя, набрал телефон генерального офиса OPEL в Германии и объяснил ситуацию. В течение следующих 24 часов этот дилер был лишен лицензии и начал сворачиваться.

Sergy6661 освоился
освоилсяСообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз

Перезагрузка ПЛК

Сообщение Sergy6661 » 09 окт 2020, 15:28

Jackson администратор
администраторСообщения: 13959 Зарегистрирован: 17 июн 2008, 16:01 Имя: Евгений свет Брониславович Страна: Россия город/регион: Санкт-Петербург Благодарил (а): 403 раза Поблагодарили: 815 раз

Перезагрузка ПЛК

Сообщение Jackson » 09 окт 2020, 16:17

Автору родные программисты это объясняют, так что есть куда.

Они отсылают к безопасности. А по безопасности говорится, что после срабатывания ПАЗ должны быть приняты меры к надёжной блокировке агрегата от последующего запуска — оный должен быть невозможен до разблокировки сработавшего стоп.устройства.
И программисты под это дело не говорят, но имеют в виду, что такой блокировкой является контроллер, который надо перезагрузить. Вот что происходит у автора. По сути это криво написанный софт или недоделанный хард.
Если б делали по уму, то при аварии контроллер просто отключался бы (жестко по питанию), а после разблокировки включался обратно, загружался и ехал дальше. Но этого не сделано, оператор должен сначала сбросить аварию, потом отдельным движением ребутнуть контроллер. Сие есть не фича безопасности, а баг кривых рук, не более того — баг за фичу выдать не получится. А уж чтоб при сбое в самом агрегате упраляющий контроллер в ступор вставал — это точно баг, в фичу его никак не превратить. И поскольку программисты свои (или ближние) — их можно и нужно дожать. А можно и вышестоящим накапать про такой косяк.

Автор норматива просил. Надо поднять любой норматив где упомянут аварийный стоп — там сказано то, что я в начале написал. Я могу на море только ссылки дать — это запросто.

Sergy6661 освоился
освоилсяСообщения: 277 Зарегистрирован: 19 фев 2019, 22:38 Имя: Сергей Страна: Россия город/регион: Краснодар Благодарил (а): 3 раза Поблагодарили: 26 раз

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

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