jcxz 350 October 3, 2025 Posted October 3, 2025 · Report post Кто-либо разрабатывал нечто подобное? Как успехи/впечатления? Интересует только сабж для МК на базе Cortex-M ядер. Соответственно - SWD only. Хотя - может быть имеет смысл и добавить JTAG? Цель: Возможность прошивать на производстве только что изготовленные устройства. Без передачи ему (производству) открытых прошивок. Прошивка (или прошивки) должна храниться в памяти программатора, в закрытом виде. Также возможно (опционально) - кроме заливки прошивки, программатор должен: автоматически определять тип подключенного МК и не давать зашить в него прошивку, ему не предназначенную; автоматически назначать серийный (заводской) номер устройству; зашивать дату/время прошивки; зашивать ID экземпляра программатора (на производстве несколько человек, каждый имеет свой экземпляр программатора с уникальным ID, может пользоваться только своим, никому не передавая); вести лог прошитых устройств, с учётом количества и т.п.; ещё есть мнение (коллег), что программатор также должен иметь возможность коннектиться к какому-то серверу и автоматически обновлять комплект прошивок, имеющийся в его памяти (не знаю - нужно ли реально такое?); что-то ещё может нужно?.... PS: Знаю, что существуют готовые автономные программаторы от Segger (с кнопочкой). Даже имеем такие несколько штук. По некоторым соображениям они не подходят. Хотим свой. PPS: Также нашёл на GitHub проект подобного автономного программатора: https://github.com/XIVN1987/DAPProg Сделано примитивно - ногодрыгом. Но в принципе - большая скорость прошивки и не нужна. Quote Share this post Link to post Share on other sites More sharing options...
megajohn 16 October 3, 2025 Posted October 3, 2025 · Report post 15 минут назад, jcxz сказал: автоматически определять тип подключенного МК и не давать зашить в него прошивку, ему не предназначенную; такое делал на OpenBLT https://www.feaser.com/openblt/doku.php?id=manual:security 15 минут назад, jcxz сказал: в закрытом виде также этот OpenBLT поддерживает хуки для AES вообщем, как вариант не заморачиваться и делать прошивку открытого бута и потом боевую закрытую прошивку через бутлодырь Quote Share this post Link to post Share on other sites More sharing options...
HardWareMan 18 October 3, 2025 Posted October 3, 2025 · Report post Была тема на Хабре: https://habr.com/ru/articles/771970/ Quote Share this post Link to post Share on other sites More sharing options...
jcxz 350 October 3, 2025 Posted October 3, 2025 · Report post 7 минут назад, megajohn сказал: вообщем, как вариант не заморачиваться и делать прошивку открытого бута и потом боевую закрытую прошивку через бутлодырь И какая разница - всё шить или только бут? Что это даст? 4 минуты назад, HardWareMan сказал: Была тема на Хабре: https://habr.com/ru/articles/771970/ Читал её ещё до создания темы. Оттуда и привёл ссылку на GitHub. Меня интересует мнение не хабра, а местных обитателей, которые занимались чем-то подобным. Гуглить я умею. Quote Share this post Link to post Share on other sites More sharing options...
megajohn 16 October 3, 2025 Posted October 3, 2025 · Report post 3 минуты назад, jcxz сказал: И какая разница - всё шить или только бут? ну под разные платы разные буты, а не один и тот же. и вообще, ничто не мешает перед прошивкой вычитывать CPUID, UID, через STM32_Programmer_CLI Quote Share this post Link to post Share on other sites More sharing options...
rezident 79 October 3, 2025 Posted October 3, 2025 · Report post 36 минут назад, jcxz сказал: автоматически назначать серийный (заводской) номер устройству; Имеет смысл сконнектить с принтером этикеток, чтобы сразу печатать этикетку с присвоенным устройству серийным номером. 38 минут назад, jcxz сказал: зашивать дату/время прошивки; То бишь должны быть встроенные часы (RTC). 40 минут назад, jcxz сказал: ещё есть мнение (коллег), что программатор также должен иметь возможность коннектиться к какому-то серверу и автоматически обновлять комплект прошивок, имеющийся в его памяти (не знаю - нужно ли реально такое?); Ни в коем случае! Одно устройство - одна конкретная прошивка. Тогда возможно и п1. не понадобится. В противном случае путаница с прошивками будет 100%. Закон Мёрфи: "если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдёт!" 😉 21 минуту назад, jcxz сказал: И какая разница - всё шить или только бут? Что это даст? Бутлоадер может быть универсальным, а прикладная часть уникальная (для данного конкретного кристалла). У нас, например, МК вначале прошивается через встроенный Bootloader (посредством UART, кстати) нашим собственным бутлоадером. Затем после перезагрузки стартует уже наш бутлоадер, который под конкретную функциональность прибора может загрузить прошивку с флешки или через Ethernet. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 350 October 3, 2025 Posted October 3, 2025 · Report post 59 минут назад, rezident сказал: Имеет смысл сконнектить с принтером этикеток, чтобы сразу печатать этикетку с присвоенным устройству серийным номером. Да, имеет смысл. Особенно при крупной серии. Хотя пока это - оверхид. У нас всё мелкосерийное. На позапрошлой работе так делали. 59 минут назад, rezident сказал: То бишь должны быть встроенные часы (RTC). Нет. См. п.6. Если будет коннект к серверу, то будет и SNTP. 59 минут назад, rezident сказал: Ни в коем случае! Одно устройство - одна конкретная прошивка. Тогда возможно и п1. не понадобится. В противном случае путаница с прошивками будет 100%. Закон Мёрфи: "если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдёт!" 😉 Однозначно - нет. Один программатор -> много прошиваемых устройств. Разных. После прошивки есть этап настройки, калибровки, испытаний и т.п. В любом случае: "не туда" зашитая прошивка не заработает. 59 минут назад, rezident сказал: Бутлоадер может быть универсальным, а прикладная часть уникальная (для данного конкретного кристалла). У нас, например, МК вначале прошивается через встроенный Bootloader (посредством UART, кстати) нашим собственным бутлоадером. Затем после перезагрузки стартует уже наш бутлоадер, который под конкретную функциональность прибора может загрузить прошивку с флешки или через Ethernet. Ещё раз повторю вопрос: А смысл какой? Зачем шить только часть, если можно сразу зашить всё? И в прошиваемых устройствах не обязательно есть Ethernet. Скорее его нет. Какая тут тогда универсальность? Да - и к тому же ваша универсальность резко ограничивает круг применяемых МК. Подсаживает на иглу. В любом случае - не о бутлоадерах тема. Quote Share this post Link to post Share on other sites More sharing options...
whoami 6 October 3, 2025 Posted October 3, 2025 (edited) · Report post Не весь список функций, но примерно такая же хрень. На ESP32-S3 дисплеем. Работают. Edited October 3, 2025 by whoami Quote Share this post Link to post Share on other sites More sharing options...
dimka76 89 October 4, 2025 Posted October 4, 2025 · Report post On 10/3/2025 at 4:06 PM, jcxz said: Меня интересует мнение не хабра, а местных обитателей, которые занимались чем-то подобным. Гуглить я умею. А какое мнение вас интересует ? Реализуемо ли ? - Да, реализуемо. Писать самому или искать opensource ? - Ну, тут вам решать. Документация есть. Гуглить умеете Лично я для себя делал SWD программатор для MKE04Z4 и Cypress PSoC 4. Но без шифрования. Не автономный, а с компа по USB. Кстати, насчет шифрования. По SWD у вас же прошивка будет идти в открытом виде. Можно к SWD подключиться сниффером и стырить вашу прошивку 1 Quote Share this post Link to post Share on other sites More sharing options...
rezident 79 October 4, 2025 Posted October 4, 2025 · Report post 19 часов назад, jcxz сказал: Ещё раз повторю вопрос: А смысл какой? Зачем шить только часть, если можно сразу зашить всё? Если вас интересует зашифрованная прошивка (или что такое "должна хранится в закрытом виде"?), то как иначе-то? Quote Share this post Link to post Share on other sites More sharing options...
jcxz 350 October 4, 2025 Posted October 4, 2025 · Report post 2 часа назад, dimka76 сказал: А какое мнение вас интересует ? Интересует: Реализовывал ли кто-то подобный программатор для нужд прошивки на собственном производстве? На чём реализовывали: какой МК? софт сами писали или взяли что-то готовое, типа того что по ссылке выше? Для каких МК/ядер (какие умеет прошивать)? С какими проблемами пришлось столкнуться? Какие функции реализовали в своём программаторе (кроме собственно программирования прошивки)? 2 часа назад, dimka76 сказал: Кстати, насчет шифрования. По SWD у вас же прошивка будет идти в открытом виде. Можно к SWD подключиться сниффером и стырить вашу прошивку Можно, да, знаем. Но мозгов надо больше, чем просто стырить готовый файл прошивки. И оборудование нужно и больше вероятность спалиться при таком стыривании. И для этого нужно предпринять определённые злонамеренные действия во время работы на предприятии. А не когда уже уволился и у тебя остался файл прошивки. И это тоже один из поводов создания темы: Если кто делал такой девайс, может он имеет ещё какие мысли по защите от стыривания? 2 часа назад, rezident сказал: Если вас интересует зашифрованная прошивка (или что такое "должна хранится в закрытом виде"?), то как иначе-то? Ничё не понял... Какая связь между "зашифрованной прошивкой" и "прошивать всё или нет"? "Зашифрованная прошивка" - это прошивка, хранимая на флешке (SPI-флешке) в зашифрованном (закрытом) виде. Quote Share this post Link to post Share on other sites More sharing options...
rezident 79 October 4, 2025 Posted October 4, 2025 · Report post 7 минут назад, jcxz сказал: "Зашифрованная прошивка" - это прошивка, хранимая на флешке в зашифрованном (закрытом) виде. Зашифрованная прошивка имеет смысл тогда, когда шифруется также и канал передачи ее в целевое устройство. Если в канале передачи данных (SWD в вашем случае) прошивка не зашифрована, то какой смысл шифрования ее в памяти программатора? Ваши программаторы для шабашек домой берут что ли? Quote Share this post Link to post Share on other sites More sharing options...
jcxz 350 October 4, 2025 Posted October 4, 2025 · Report post 1 час назад, rezident сказал: Зашифрованная прошивка имеет смысл тогда, когда шифруется также и канал передачи ее в целевое устройство. Если в канале передачи данных (SWD в вашем случае) прошивка не зашифрована, то какой смысл шифрования ее в памяти программатора? SPI-флешку прочитать гораздо проще, чем сниффить SWD и вытаскивать оттуда данные. И прочитать флешку может любой обрыган. Найдя готовый инструментарий в сети. А для сниффинга SWD, и вытаскивания из него по кусочкам прошивки - нужно уже иметь хоть какую-то квалификацию. И шифрование её - почти ничего не стоит (в плане затрат). 1 час назад, rezident сказал: Если в канале передачи данных (SWD в вашем случае) прошивка не зашифрована Через SWD её тоже можно передавать в зашифрованном виде. Если что. Программа только немного усложнится. Но перехватить всё равно будет возможно. Хоть и трудозатраты на перехват будут ещё выше. Quote Share this post Link to post Share on other sites More sharing options...
Allregia 10 October 5, 2025 Posted October 5, 2025 · Report post 20 hours ago, jcxz said: SPI-флешку прочитать гораздо проще, чем сниффить SWD и вытаскивать оттуда данные. И прочитать флешку может любой обрыган. Зависит от проца, в некторых сделанотак, что фимваре храниться во внешней SPI-флешке в том-же зашифрованном виде, и при старте переписывается встроенным бутлоадером проца в ОЗУ проца и уже оттуда работает (флеша в проце вобще нет). 256 или 512 битный код расшифровки хранится в ОТР памяти проца (прошивается при первой прошивке). Quote Share this post Link to post Share on other sites More sharing options...
jcxz 350 October 5, 2025 Posted October 5, 2025 · Report post 4 минуты назад, Allregia сказал: Зависит от проца, в некторых сделанотак, что фимваре храниться во внешней SPI-флешке в том-же зашифрованном виде, и при старте переписывается встроенным бутлоадером проца в ОЗУ проца и уже оттуда работает (флеша в проце вобще нет). 256 или 512 битный код расшифровки хранится в ОТР памяти проца (прошивается при первой прошивке). Знаю. Сам работал с такими и бутлоадеры для таких писал. И речь в теме идёт - как раз о первоначальной прошивке. Чистого МК. С обновлением прошивки проблем нет - оно у нас уже давно (изначально) делается защищённым способом. PS: И пока речь идёт только о прошивке МК со встроенной флешь. На нынешней работе пока только такие. Но и ROM-less МК можно таким же автономным программатором шить. Если потребуется. Не проблема. Quote Share this post Link to post Share on other sites More sharing options...