STM32 - входим в bootloader по кнопке.


Года 4 назад начались у нас продажи мелких партий устройств, основанных на STM32. Так как на само устройство мы, в виду миниатюрности устройства, не ставили разъём под программирование, то заливать прошивку был решено используя родной bootloader. Но тут опять возникла проблема — как в bootloader входить. Замыкать ножку BOOT при помощи джампера показалось плохой идеей. И тогда была поставлена задача — контроллер должен входить в bootloader по нажатию 1й кнопки.
Отмазки
Статья про небольшое схемотехническое решение, сделанное по принципу «собрать из того что уже есть». Так что строго прошу не судить. Ну к сути.
Суть
Как уже указал выше, сделать надо было всё максимально дёшево, и и того что можно достать в ближайших радиодеталях. И тогда родилась вот эта схема:

Немножко о том, как это работает:
Контроллер после подачи питания (после нажатия RESET) первым делом смотрит на ножки BOOT, для того что бы понять, откуда ему грузится. Делает он это довольно быстро, и уже после того как решение о том, откуда грузится принято — состояние ножек BOOT может быть абсолютно любое. Значит из этого и будем исходить.
Для перехода контроллера в bootloader надо что бы после нажатия RESET, BOOT1 был равен «0» а BOOT0 равен «1». Соответственно на плате замыкаем BOOT1 на землю, а BOOT0 и RESET подключаем к схеме.
После нажатия на кнопку происходят 2 вещи:
- Открывается транзистор Q1, тем самым замыкая RESET на землю, и перезагружая контроллер.
- Через диод D1 заряжается конденсатор C9.
Схема используется уже несколько лет и ни разу не подводила.
Достоинства и недостатки
Достоинством схемы является то, что теперь мелкие партии девайсов можно отдать прошивать любому человеку, который умеет кликать мышкой. Ибо запустив перед ним DfuSeDemo, и сказав «подключи USB к девайсу, нажми на нём кнопку, нажми кнопку „прошить“ в программе DfuSeDemo» можно оставить его работать без присмотра. Никаких теряющихся джамперов и так далее. А так же можно удалённо помочь заказчику, в том случае если настал «магический пипец» и ничего не работает, попросив его только подключить девайс к компьютеру и нажать на кнопку. Дальше прошивку можно сделать по удалённому доступу.
Явным недостатком является то, что выходить из bootloader'а эта кнопка не позволяет. Так что после прошивки надо выключить и включить девайс (вынуть и вставить USB кабель). Но с этим мы решили смирится.
Ещё отмазки
Есть варианты решений, что бы кнопка работала и как выход из bootloader'а, например добавив логический элемент, или как подсказал уважаемый SiberK , поставить резюк после диода, тогда время нажатия кнопки будет влиять на то, просто ли ребутнётся МК или перепрыгнет в загрузчик. Но нам это было не надо.
Так что если надо — пользуйтесь. И удачи в ваших разработках.
- +5
- 22 сентября 2016, 17:20
- zloiMOZG
Есть варианты решений, что бы кнопка работала и как выход из bootloader'а, например добавив логический элемент.А как выйти из бутлоадера по кнопке?
Нажали на кнопку — открыли транзюк, логика сказала «1» на BOOT. Ещё раз, тоже самое но логика сказала «0». Транзюк в любом случае открываем что бы резет сделать. D-триггер в режиме делителя частоты…
когда я делал bootloader на tms320f28335 то, по завершению прошивки и проверки всех CRC, делал классический jumb на нужный адрес, эмитируя нормальный boot, и таким образом загружая новую прошивку.
Исходником лодыля поделитель? Занимаюсь тоже TMSами(приводом), а как написать лодырь пока не успеваю разобраться.
не получится, код был на работе, и я не вынашивал мысль его с работы красть. так что разве что по памяти смогу советы дать. кстати я вел дискусию про BL на electronix.ru/ в разделе «Сигнальные процессоры и их программирование — DSP» и там человек (doom13) делился своим кодом под этот проц, там сможете найти. Вот тут electronix.ru/forum/index.php?showtopic=120294&hl= или вот тут electronix.ru/forum/index.php?showtopic=121198 — почитаете, много узнаете.
Кстати, вот сегодня мне попалось на глаза, думаю что Вам пригодится.
github.com/rafaelrmmartins/tms320f28335monitor/
PS: Жаль я раньше не встретит сей линк. Свой лоадер не пришлось б писать
github.com/rafaelrmmartins/tms320f28335monitor/
PS: Жаль я раньше не встретит сей линк. Свой лоадер не пришлось б писать
Это то прекрасно. А что делать ДО того как была залита какая либо прошивка в МК? Потом то понятно, что можно в бутлоадер падать, когда уже зашил что либо своё…
Привет. Предлагаю схему для сброса/перехода в boot по одной кнопке: короткое нажатие на кнопку (менее секунды) вызывает сброс, длительное нажатие (более 2 секунд примерно) с последующим отпусканием переводит в boot. Естественно также, что при подаче питания вырабатывается лишь сброс.

- ColdWeather
- 11 октября 2016, 18:17
- ↑
- ↓
все-таки я бы поставил на плату slider-switch… Столько внешних компонентов ради входа в загрузчик!
- DeusExMachina
- 11 октября 2016, 05:18
- ↓
Иногда бывает, что под него места особо нету. Рассыпуха ща очень мелкая, а движковые переключатели довольно крупные.
да явно не крупнее, чем горсть рассыпухи + разводка, ну и всё ещё и запаять надо…
не, решение по-своему красивое, но немного напоминает конструкции, где катится шарик и включает одно, другое, потом импульс передаётся уже электрический, потом идёт химическая реакция, потом тарелочка на весах опускается, свечка пережигает верёвку… короче, загорается лампочка)
возможно, необходимость в однокнопочнопожимательном решении и была (нельзя корпус дырявить под слайдер или разбирать заказчиком), но из псто этого не видно)
не, решение по-своему красивое, но немного напоминает конструкции, где катится шарик и включает одно, другое, потом импульс передаётся уже электрический, потом идёт химическая реакция, потом тарелочка на весах опускается, свечка пережигает верёвку… короче, загорается лампочка)
возможно, необходимость в однокнопочнопожимательном решении и была (нельзя корпус дырявить под слайдер или разбирать заказчиком), но из псто этого не видно)
Комментарии (25)
RSS свернуть / развернуть