STM32 Автономный загрузчик для обновления прошивки. Проверка концепта.
Vložit
- čas přidán 27. 11. 2020
- Не так давно на канале было видео - • STM32 Использование вс... посвященное возможности прошивки микроконтроллеров через интерфейс UART при помощи внутреннего загрузчика. Для разработки автономного программатора для партии изделий проверяем насколько сложно написать этот код и работает ли эта идея без сбоев.
Канал в телеграмм - t.me/vladimir_medintsev
Канал Яндекс.Дзен - zen.yandex.ru/vladimir_medintsev
Канал на RuTube - rutube.ru/channel/1797552/
Канал на CZcams - / vladimirmedintsev
------------------------------------------
Если вы хотите поддержать автора канала номер карты Сбер:
2202-2023-2480-4008
------------------------------------------ - Věda a technologie
Поздравляю с началом новой эпохи на ютубе. Спасибо за ваше большое дело. : )
Очень полезная информация! Ждем продолжения этой темы.
Ждём продолжения =)
По названию тема годная, лайк. Досмотрю вечером.
Познавательно, логично и грамотно! Спасибо!
хорошая идея, как-то не задумывался даже об этом
Интересно. Спасибо!
Спасибо. Полезная инф.
Класс. 👍
Автор, спасибо за видео! То же такая же проблема была - не хочу тащить ноут в поле. Взял USB OTG, воткнул в телефон с андройдом stlink китайский. Все, программатор готов. Так же на андроид есть программа для заливки через юарт, правда ее в деле не проверял.
Прикольна ідея.
Хорошая идея, очень полезно будет. Исходники будете выкладывать?
Брр. Вспомнил как рожал бутлоадер под родимые PIC-и .
Рекомендую проверить UART загрузчик при повышенной температуре. Столкнулся с ситуацией когда при температуре выше комнатной ЮАРТ загрузчик сильно сбоит. Приходилось включать кондиционер в помещениии для того чтобы обновить прошивку.
Дунул на него феном паяльным. Вроде работает. Потом в термокамере проверим.
Лет 5 назад пришлось поломать голову, но сделал таки автономный программатор по swd. Заливает тест-прошивку - тестирует - заливает рабочую прошивку (если все в порядке).
Отлично. Очень полезная штука
Прикрути к программатору mass storage чтоб бинарники шифрованные отправлять, чтоб никто не слил бинарник.
почему вы в настройках UART ставите 9 бит? ведь в документации указано configuration is: 8-bit,
even parity and 1 Stop bit
Втыкнуть фигушку 1000 раз - делов то... :))) Надеюсь, хотя бы возникла идея в инициализации кода проверять что там ходок залил и не выдернул ли раньше времени фигушку. :)
Существует автономный программатор который бы работал без загрузчика и загружал ПО например через SWD?
Мы когда-то с Эдуардом Неткачевым над этой темой рпботали. Готовое решение пока только под Атмегу есть.
Но если надо то за месяц- полтора могу сделать.
Есть не мало информации на просторах интернета по созданию загрузчика и записи прошивки с SD например. область загрузчика защищается от стирания. И если шаловливые ручки не полезут через штатные загрузчики, то все будет работать. При это достаточно скинуть заказчику файл firmware, а заказчику достаточно записать прошивку на SD и загрузить ее в устройство.
Загрузчик можно написать какой угодно, более того, обычно у любого разработчика их написанных лежит на все случаи жизни. Вопрос в другом, держатель sd это место и деньги. Теперь доже 0.5 доллара умножьте на 1000 и ставить желание отпадет моментально. К тому же бывают условия эксплуатации... Да предложите на буровой установке ребятам обновлять прошивку через SD карточку когда на улице -30. Вас просто медведям скормят.
Это немного другое. Во-первых, не все конечные устройства содержат картоприёмник. Во-вторых, создание загрузчика для работы с sd-картой - это нетривиальная задача. Можно найти примеры в сети, я видел подобные, но они занимали около 20 Кбайт кода arm, что вряд ли будет приемлемо.
Я сам делаю подобный загрузчик для загрузки hex-файлов (именно intel extended, не bin). И это не просто, если хочешь уложиться в несколько килобайт. У меня есть подобный загрузчик для avr, который в зависимости от конфигурации имеет размер от 2 до 4 Кбайт. Я пытаюсь перенести его алгоритм на arm. Вообще, у некоторых производителей контроллеров, например TI, уже лет 10 загрузчики бывают очень навороченными и поддерживают до 10 вариантов загрузки по разным интерфейсам, в том числе, используя mmc/sd. Если доделаю свой вариант, то выложу на github.
@@VladimirMedintsev Ну по цене программатор по любому выйдет дороже SD, во вторых вставить в разъем SD не сложнее чем попасть в разъем программатором. И скорее вас скормят медведям с вашим программатором. Это про минусы, плюсы описаны выше.
@@ViacheslavMezentsev Ну так чего мозг выносить, ставим на андроид CubeMXProgramer и сливаем хоть по UART, хоть по USB, хоть по CAN, хоть по SPI, если такой загрузчик есть на борту. Ну и так, не на всех платах есть свободный доступ к нужным пинам контроллера. Ну а уж если вы сами разрабатываете устройство, кто вам мешает поставить SD разъем за три копейки а не городить огород за 1500 - 2000 тысячи.
@@Diger67 Да вы правы, идея отстой, будем ставить SD.
Ревизию контроллера знать стоит, по ней можно узнать, поправили баги или нет , и если прошивка не умеет работать с багом, то уже на стадии программирования, можно отсекать не подходящие контроллеры.
Абсолютно так.
Так в STM32 есть встроенный загрузчик в каждом МК? Я думал только в тарших сериях.
Везде, во всех. Доплачивать не надо.
В 2020 я бы наверное уже брал контроллеры с набортным USB, и ставил бы бутлоадер с DFU. Впрочем, я так и делаю.
Вау, это круто.
а можно про rtc записать видео? потому-что смотрю в кубике у одних плат есть пин vbat, у других нет и у всех есть rtc. Вот хочется как-то подробно, и сам rtc и его резервные биты и тд.
Вы откройте reference manual. Там про работу RTC очень хорошо написано без лишней воды.
@@VladimirMedintsev, если сделать опросник, окажется что довольно большая часть не знает английского, а другая часть не умеет читать документацию. О чём говорить если с пинка не получилось найти видео "как читать документацию на микросхемы". (Я частично умею читать доки, но с английским проблемка)
@@romaVeber Я например в разговорном английском ноль полный, но вот даташиты прекрасно читаются со временем, что то можно и через гугель переводчик подсмотреть, что то по аналогии с другим, и со временем уже все читается и понимается.
По идее, в коммерческом устройстве делать обновление прошивки с помощью вспомогательных устройств не кошерно сейчас. Предполагаю, что надо для этих целей ставить какой-то дешевый дополнительный МК, который уже будет подкинутую ему через USB, microSD или Ethernet прошивку лить по UART в основой МК
Кто это сказал что не кошерно?
@@VladimirMedintsev Ну вы себя поставьте на место потребителя. Купил например какую-то новогоднюю гирлянду. И тут приходит письмо от производителя, что он в новой прошивке изменил (улучшил) функционал, но чтобы её залить, надо открыть корпус, подцепить преобразователь USB-UART, замкнуть пару перемычек, скачать и запустить такую то программу.. Думаю это не для рядовых потребителей.
Понятно. Спасибо.
а нельзя просто по юсб залить iso фаил? как это реализовано на том же паяльнике ts100, тем более юсб добавит солидности устройству
У f030 нет usb
@@user-ed9px3cz7g если делать для кого то и знать что потом будет геморрой с прошивкой, не лучше ли сразу подобрать микроконтроллер с поддержкой usb ничего страшного что на 50 рублей дороже получится
Автономная коробочка с кнопочкой - куда более изящна, чем ноутбук с переходником :)
Коробку в карман положил и пошёл по объекту шить устройства.
Разве что, разъём для прошивки можно сделать юсбишный - было бы удобнее подключаться. Если ног хватит. Но опять же - прошивка - довольно разовое мероприятие
@@MYDIYby никто не мешает подобным образом заливать новую прошивку на коробочку с кнопочкой же :)
А дальше с ней мчаться по полям между устройствами :)
@@Nidvoraich это нужно городить еще одну коробочку отправлять заказчику, объяснять как куда подключать) и коробочка одна, а устройств сотни. а ноутбуки и телефоны с отг шнурами это более распространенная штука, и людей шибко умных не нужно, зато их можно снарядить много)
Вопрос немного не по теме. Делаю устройство, которое впоследствии необходимо внести в Госреестр средств измерений. И там есть требование об идентификации ПО микроконтроллера по МИ 3286-2010. Ну, т.е., я должен посчитать контрольную сумму ПО и вывести её на индикатор, а также - вписать её в Описание типа средств измерений. Таким образом - об дальнейшем обновлении ПО законными методами можно забыть. Суть вопроса к Вам как к МАСТЕРУ. Можно ли каким-то образом разделить прошивку микроконтроллера, например, на мерологически значимую часть, и на всё остальное. Метролигически значимую часть впоследствии не трогать, для неё посчитана и внесена в Реестр контрольная сумма.А всё остальное - чтобы можно было перешивать любыми способами?
Я вам отвечу честно. Если попадается проект который необходимо внести в реестр средств измерения мы просто отказываемся от этого проекта. Причина простая я не знаю ни одного разработчика который бы попал в реестр средств измерения без использования незаконных приемов.
Мы просто спрашиваем заказчика хочет ли он в последствии поверять изделие. Заказчик как правило совсем не хочет. Значит мы делаем индикатор. А индикатор поверять не надо и индикатор не вносится в реестр. Но индикатор может что-либо измерять весьма точно. Ну просто ещё ни одного раза усилия на внесение чего-либо в этот реестр не окупили себя.
@@VladimirMedintsev Я извиняюсь, а по сути вопроса - прошивку, принципе, можно разделить на 2 части ?
Да, разумеется это возможно. Есть на канале ролик про передачу управления.
Вот тут czcams.com/video/z2ZjsM63yEo/video.html рассказано как это делать. Там на примере загрузчика но и части точно так же.
@@VladimirMedintsev Спасибо !!!!! А по поводу внесения в Реестр. От кого отказываетесь - направляйте ко мне. Я как раз всю жизнь этим занимался.
а почему не использовать USB к компьютеру любому и программк для прошивки?
ну или даже USB-UART микруху поставить?
Уже обсуждалось под другим видео. Это автономный программатор, который можно и заказчику дать и обновить сидя на мачте и все такое. Ну далеко не везде есть смысл это делать с ноутбука или сотового телефона. Есть несколько видео где этот вопрос поднимался и возвращаться простите не будем. Просто если у вас нет потребности в мобильности или автономности, то и мудрить ничего не надо, взять готовый программатор и использовать.
здравствуйте! У Вас как у профессионала , какая вилка зарплаты?
Если вопрос ко мне, то я получаю чуть меньше 10 тысяч рублей.
@@VladimirMedintsev Я думал, по Вашей специальности , особенно такой специалист как Вы, будет получать 300 к
@@VladimirMedintsev спасибо за ответ
Я еще пол года назад написал для себя загрузчик, в котором не надо переключать контакт boot. Часть программы , которая называется загрузчиком и лежит во втором секторе не перепрошивается. Проверял этот программатор через обычный переходник USB-UART, загонял туда новую программу (прошивку) кроме второго сектора stm32f205 .
Поздравляю.
@@VladimirMedintsev Для проверки этого программатора пришлось написать и компьютерную часть на Builder C++.
А я лет пять назад писал свой бутлоалер и прошивал stm32f107 по ethernet. И что?
@@stari40k А контакт boot переключали? В этом вся фишка.
@@retro55i нет. Если кратко - записывал прошивку в свободную область памяти, и оттуда при перезагрузке мой бутлоадер переписывал её в указанную область. После чего запускалась уже новая версия с указанного адреса. Все анти-кирпичные проверки не описываю.
Почему в Кейл перешли? Вы же вроде в кубе работали?
Я не знаю почему вы так решили.
@@VladimirMedintsev А что вообще про куб думаете?
Есть видео где я его показываю. Мне он нравится. Хорошо о нем думаю.
@@VladimirMedintsev А по какой причине не используете?)
Видеоролики которые вы видите на канале практически ничего не отражают из моей реальной работы. Ни разу и ни где я не показывал реальные исходники реальных проектов как в части схемотехники так и в части программирования. По этой причине вы не знаете что именно я использую.
В видеороликах показывается и будет показываться Кейл, потому что он дефакто является популярнейшей средой в Ютубе. Специально посвященные CubeIDE ролики я показываю с кубом, ну это логично же. Меня в принципе не сильно интересует обзор IDE это просто инструмент. Может я Segger Studio использую. Кто его знает.
Прошивка для контроля целостности контактных соединений на плате с мк, проверка работоспособности самого мк, проверка типовых задержек выхлопа конечной платы, контроль входных линий, и так далее... Всё это должно проходить на этапе сборки, в тёплом помещении, с сытым и довольным жизнью сотрудником.
Дело в том что такая прошивка занимает много места, а так-же требует дополнительного диагностического оборудования - которого в чистом поле явно не будет. К тому-же сама прошивка без возможности вывода диагностической информации - совершенно бесполезна. И тут одного единственного светодиода явно мало, тут нужен терминал - где будет выводится уже готовый чётко сформулированный список поломок, с указанием места на ПП и способом устранения. Всё это много весит, не всегда помещается с первого раза.
А вот для реальной работы достаточно светодиодика. Зелёный - всё нормально, красный - снимай модуль и неси в мастерскую. Даже если владелец умеет использовать программатор - это всегда обезьяна. Он не способен изменить логику прошивки, он только кнопки нажимать умеет (да и то не каждый).
По этому для полевых условий основная задача - целостность и актуальность прошивки. Возможность автоматического отката в случае очень активной обезьяны.
А это уже совсем другая тема, на пату выпусков хватит.
Щас этот сытый сотрудник прочитает и начнет требовать улучшения условий :-)))
@@VladimirMedintsev У многих получается раздвоиться и даже расстроиться. У Матвеева например, он-же доктор Дью, он-же где-то вокруг... Кажется это уже клиника. Гораздо приятнее когда это разные люди, так хотя-бы тараканы не бунтуют. Программатор с пиропатроном... Весело, но не надо.
@@VladimirMedintsev у Вас сотрудники "сытые"?!?!? а можно со своим обогревателем к Вам в штат?)))
Вчора взявся за SWIM (знайшов дуже дешеві stm8 але вони без завантажувача): весь день потратив на вивчення протоколу, а в вечорі подумав: мають існувати якісь готові прилади, перевірив: таки існують)
Хал_юарт_трансмит("ты кто?");
Хал_юарт_ресив(приём АСК);
if (АСК получен)
{
// Какой-то ещё код
Хал_юарт_ресив(приём айдишника);
}
Сколько времени может выполняться "какой-то ещё код"?
Получается, мы попросили сторонее устройство сниспослать нам несколько байт. Но мы сначала приняли только один байт. Откуда сторонее устройство знает, что мы поступили именно так?
И будет ли оно ждать, чтоб передать нам остальные байты?
Ну и вопрос в проброс:
При ответе айдишника МК снова посылает АСК в следующем за айдишником байте. Стоит ли для повышения надёжности проверять и его наличие?
Спасибо!)
Разумеется ждать никто не будет и в реальной программе самое место для прерываний, но в данном случае мы же вообще проверяли насколько это сложно.
@@VladimirMedintsev я к Вам совершенно без претензий :)))
Прекрасно понимаю, что это не релизная версия кода :)
Просто поинтересовался по принципу общения устройств. Я сюда не хейтить Вас пришёл, а у Вас учиться :)
Если для меня что-то интуитивно непонятно, значит, есть пробел в знаниях по этому поводу - потому и уточняю что-то.
Сейчас вот читаю про USART_DR.
Теоретически, если бы после АСК мы ждали только 8 бит данных - мы бы могли их считать хоть через час. Потому что они бы положились в приёмный регистр и не стирались бы, потому что никто их не читает пока что.
Вот не посмотрел бы Ваше видео - не полез бы читать про это :)
Спасибо за пинок!)
Сколько времени может выполняться "какой-то ещё код"?
Это не важно, юарт асинхронный интерфейс, здесь логика работает на конечных точках. Другое дело что ответа можно и не дождаться, и зависнуть в ожидании, например когда линия физически разорвана. Вам 100мс программного таймера хватит?
Ну и если использовать не хал, а весь доступный потенциал модуля юарт - то можно отлавливать многие варианты сбоя передачи и приёма. Там и таймер не понадобиться.
@@avi-crakhome2524 как не важно? Давайте не будем рассматривать обрыв линии, а именно вариант, при котором мы принимаем информацию порциями, как в примере автора. Насколько я понял - функция Ресив работает с регистром принятых данных, и никак не взаимодействует с внешним устройством а ля "пошли-ка мне ещё байтик". То есть - после того, как мы отправили через Трансмит внешнему устройству запрос на данные - оно нам их начинает слать, а наш МК складывает их в тот самый буфер DR. И обратной связи типа "погоди, не шли, я тут пока занят вычислениями" не существует (В ДАННОМ ПРИМЕРЕ).
А уж с какой скоростью и периодичностью мы из регистра забираем данные командой Ресив- это исключительно наша проблема. Не успел забрать, пока не затёрлось новыми данными - извиняй.
В примере автора - между двумя ресивами есть только if. То есть - довольно незначительная задержка. Были бы там какие-то более сложные циклические вычисления - думаю, уже не получилось бы принять всю посылку. Успели бы ухватить только её конечные байты, потому что пока мы там что-то вычисляем, инфа от внешнего утсройства продолжает поступать, затирая предыдущую.
Когда я задавал вопрос - я ещё не знал того, что сейчас тут пишу. То, что я тут написал - я не проверял, поэтому, не уверен на 100%. Но судя по тому, что я прочитал сегодня - всё именно так. И как правильно заметил автор - если не обрабатывать прерывания по переполнению того самого буфера - можно часть данных потерять.
Если я где-то заблуждаюсь - буду рад поправкам :)
Мучают меня смутные сомнения по поводу 9и бит. Всегда думал что это ОБЩЕЕ количество бит данных. Перечитал RM0360 page598.
Написано следующее : START бит, 8 или 9 бит данных LSB, потом 1 или 2 STOP bits.
На странице #600 есть картинка с описанием, там нарисованы биты с 0го по 8й. Т. Е. Это партии бит. У вас 9и битый режим с этим самым партии битом и к стартовому биту оно отношения не имеет.
У меня тоже сомнения, да. Вроде как, стартовые и стоповые не считаются
Стартовые и стоповые биты не считаются. А вот паритет считается.
8 бит данных - это для текстового обмена, в этом случае остаётся достаточно пространства для управляющих символов.
1+8 бит данных - это для бинарного обмена, доступна передача от 0x00 до 0xFF, девятый бит - это управляющий маркер команда/данные, или адрес/данные.
Попробуйте esp8266 esp32 + micropython там есть технология удаленной прошивки web repl
Хотите иногда жарить шашлыки? Попробуйте жить в пещере - там можно жарить шашлыки прям не выходя из дома :)
Ну плохое видео, но как уже писали ниже , в современных реалиях интереснее DFU или даже реализацию OTA посмотреть
блин, я даже не слышал про это. Погуглил тут, как круто
@@denwerxampp4035 не то слово. На f4 DFU вроде просто настроить, но не на чем сейчас проверить, а на f103 смещение надо похоже настраивать в линкере. Надо разобраться вобщем
Ну если 1000 штук для заказчика, значит есть у него чуть денег купить планшет на виде и ходи шей каждое устройство, а если бы эти устройства сразу прошить по CAN или RS485 полезное дело.
Это сложно для заказчика. А если апдейты будут еженедельными?
А теперь просто представьте буровую установку, -30 градусов и вы с планшетом на ветру. Работа мечты. Не все устройства работают в уютных комнатах. Иногда и подключить разъем очень тяжело не говоря уже о том, чтобы на сотовом или планшет ее пальчиком попадать.
@@VladimirMedintsevИли устройство может быть камерой в вольере с тиграми.
@@user-ed9px3cz7g уверяю вас тигры по сравнению с нефтяниками гораздо менее опасны.
@@VladimirMedintsev Тигры водятся только в дикой природе, а нефтяники везде, если нефтяник попадает в воду, нефтяник не становится мокрой, вода становится нефтью. 😜