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.

Как только вы отпускаете кнопку (держать не надо, всё срабатывает моментально), контроллер начинает загружаться, а конденсатор C9 медленно разряжаться через резисторы R7 и R9, при этом поддерживая логический уровень «1» на ножке BOOT0. Диод D1 не даёт конденсатору открыть своим зарядом транзистор Q1. Того времени, пока разряжается конденсатор с запасом хватает, что бы контроллер принял решение о переходе в bootloader.
Схема используется уже несколько лет и ни разу не подводила.

Достоинства и недостатки

Достоинством схемы является то, что теперь мелкие партии девайсов можно отдать прошивать любому человеку, который умеет кликать мышкой. Ибо запустив перед ним DfuSeDemo, и сказав «подключи USB к девайсу, нажми на нём кнопку, нажми кнопку „прошить“ в программе DfuSeDemo» можно оставить его работать без присмотра. Никаких теряющихся джамперов и так далее. А так же можно удалённо помочь заказчику, в том случае если настал «магический пипец» и ничего не работает, попросив его только подключить девайс к компьютеру и нажать на кнопку. Дальше прошивку можно сделать по удалённому доступу.

Явным недостатком является то, что выходить из bootloader’а эта кнопка не позволяет. Так что после прошивки надо выключить и включить девайс (вынуть и вставить USB кабель). Но с этим мы решили смирится.

Ещё отмазки

Есть варианты решений, что бы кнопка работала и как выход из bootloader’а, например добавив логический элемент, или как подсказал уважаемый SiberK , поставить резюк после диода, тогда время нажатия кнопки будет влиять на то, просто ли ребутнётся МК или перепрыгнет в загрузчик. Но нам это было не надо.
Так что если надо — пользуйтесь. И удачи в ваших разработках.
Источник

Оставить комментарий

Вы можете использовать следующие теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>