Jump to content
    

Автономный программатор через SWD.

Кто-либо разрабатывал нечто подобное? Как успехи/впечатления?

Интересует только сабж для МК на базе Cortex-M ядер. Соответственно - SWD only. Хотя - может быть имеет смысл и добавить JTAG?

Цель: Возможность прошивать на производстве только что изготовленные устройства. Без передачи ему (производству) открытых прошивок. Прошивка (или прошивки) должна храниться в памяти программатора, в закрытом виде. Также возможно (опционально) - кроме заливки прошивки, программатор должен:

  1. автоматически определять тип подключенного МК и не давать зашить в него прошивку, ему не предназначенную;
  2. автоматически назначать серийный (заводской) номер устройству;
  3. зашивать дату/время прошивки;
  4. зашивать ID экземпляра программатора (на производстве несколько человек, каждый имеет свой экземпляр программатора с уникальным ID, может пользоваться только своим, никому не передавая);
  5. вести лог прошитых устройств, с учётом количества и т.п.;
  6. ещё есть мнение (коллег), что программатор также должен иметь возможность коннектиться к какому-то серверу и автоматически обновлять комплект прошивок, имеющийся в его памяти (не знаю - нужно ли реально такое?);
  7. что-то ещё может нужно?....

 

PS: Знаю, что существуют готовые автономные программаторы от Segger (с кнопочкой). Даже имеем такие несколько штук. По некоторым соображениям они не подходят. Хотим свой.

PPS: Также нашёл на GitHub проект подобного автономного программатора: https://github.com/XIVN1987/DAPProg  Сделано примитивно - ногодрыгом. Но в принципе - большая скорость прошивки и не нужна.

Share this post


Link to post
Share on other sites

15 минут назад, jcxz сказал:

автоматически определять тип подключенного МК и не давать зашить в него прошивку, ему не предназначенную;

такое делал на OpenBLT https://www.feaser.com/openblt/doku.php?id=manual:security

 

15 минут назад, jcxz сказал:

в закрытом виде

также этот OpenBLT поддерживает хуки для AES

 

вообщем, как вариант не заморачиваться и делать прошивку открытого бута и потом боевую закрытую прошивку через бутлодырь

Share this post


Link to post
Share on other sites

7 минут назад, megajohn сказал:

вообщем, как вариант не заморачиваться и делать прошивку открытого бута и потом боевую закрытую прошивку через бутлодырь

И какая разница - всё шить или только бут? Что это даст?

4 минуты назад, HardWareMan сказал:

Была тема на Хабре: https://habr.com/ru/articles/771970/

Читал её ещё до создания темы. Оттуда и привёл ссылку на GitHub.

Меня интересует мнение не хабра, а местных обитателей, которые занимались чем-то подобным. Гуглить я умею. :smile:

Share this post


Link to post
Share on other sites

3 минуты назад, jcxz сказал:

И какая разница - всё шить или только бут?

ну под разные платы разные буты, а не один и тот же.

и вообще, ничто не мешает перед прошивкой вычитывать CPUID, UID, через STM32_Programmer_CLI 

Share this post


Link to post
Share on other sites

36 минут назад, jcxz сказал:

автоматически назначать серийный (заводской) номер устройству;

Имеет смысл сконнектить с принтером этикеток, чтобы сразу печатать этикетку с присвоенным устройству серийным номером.

38 минут назад, jcxz сказал:

зашивать дату/время прошивки;

То бишь должны быть встроенные часы (RTC).

40 минут назад, jcxz сказал:

ещё есть мнение (коллег), что программатор также должен иметь возможность коннектиться к какому-то серверу и автоматически обновлять комплект прошивок, имеющийся в его памяти (не знаю - нужно ли реально такое?);

Ни в коем случае! Одно устройство - одна конкретная прошивка. Тогда возможно и п1. не понадобится. В противном случае путаница с прошивками будет 100%. Закон Мёрфи: "если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдёт!" 😉

21 минуту назад, jcxz сказал:

И какая разница - всё шить или только бут? Что это даст?

Бутлоадер может быть универсальным, а прикладная часть уникальная (для данного конкретного кристалла). У нас, например, МК вначале прошивается через встроенный Bootloader (посредством UART, кстати) нашим собственным бутлоадером. Затем после перезагрузки стартует уже наш бутлоадер, который под конкретную функциональность прибора может загрузить прошивку с флешки или через Ethernet.

Share this post


Link to post
Share on other sites

59 минут назад, rezident сказал:

Имеет смысл сконнектить с принтером этикеток, чтобы сразу печатать этикетку с присвоенным устройству серийным номером.

Да, имеет смысл. Особенно при крупной серии. Хотя пока это - оверхид. У нас всё мелкосерийное.

На позапрошлой работе так делали.

59 минут назад, rezident сказал:

То бишь должны быть встроенные часы (RTC).

Нет. См. п.6. Если будет коннект к серверу, то будет и SNTP.

59 минут назад, rezident сказал:

Ни в коем случае! Одно устройство - одна конкретная прошивка. Тогда возможно и п1. не понадобится. В противном случае путаница с прошивками будет 100%. Закон Мёрфи: "если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдёт!" 😉

Однозначно - нет. Один программатор -> много прошиваемых устройств. Разных.

После прошивки есть этап настройки, калибровки, испытаний и т.п. В любом случае: "не туда" зашитая прошивка не заработает.

59 минут назад, rezident сказал:

Бутлоадер может быть универсальным, а прикладная часть уникальная (для данного конкретного кристалла). У нас, например, МК вначале прошивается через встроенный Bootloader (посредством UART, кстати) нашим собственным бутлоадером. Затем после перезагрузки стартует уже наш бутлоадер, который под конкретную функциональность прибора может загрузить прошивку с флешки или через Ethernet.

Ещё раз повторю вопрос: А смысл какой? Зачем шить только часть, если можно сразу зашить всё?

И в прошиваемых устройствах не обязательно есть Ethernet. Скорее его нет. Какая тут тогда универсальность?

Да - и к тому же ваша универсальность резко ограничивает круг применяемых МК. Подсаживает на иглу.  :biggrin:  В любом случае - не о бутлоадерах тема.

Share this post


Link to post
Share on other sites

Не весь список функций, но примерно такая же хрень. На ESP32-S3 дисплеем. Работают.

Edited by whoami

Share this post


Link to post
Share on other sites

On 10/3/2025 at 4:06 PM, jcxz said:

Меня интересует мнение не хабра, а местных обитателей, которые занимались чем-то подобным. Гуглить я умею. :smile:

А какое мнение вас интересует ?
Реализуемо ли ? - Да, реализуемо.
Писать самому или искать opensource ? - Ну, тут вам решать. Документация есть. Гуглить умеете :smile:

Лично я для себя делал SWD программатор для MKE04Z4 и Cypress PSoC 4. Но без шифрования. Не автономный, а с компа по USB.

Кстати, насчет шифрования. По SWD у вас же прошивка будет идти в открытом виде.

Можно к SWD подключиться сниффером и стырить вашу прошивку :smile:

Share this post


Link to post
Share on other sites

19 часов назад, jcxz сказал:

Ещё раз повторю вопрос: А смысл какой? Зачем шить только часть, если можно сразу зашить всё?

Если вас интересует зашифрованная прошивка (или что такое "должна хранится в закрытом виде"?), то как иначе-то?

Share this post


Link to post
Share on other sites

2 часа назад, dimka76 сказал:

А какое мнение вас интересует ?

Интересует:

  • Реализовывал ли кто-то подобный программатор для нужд прошивки на собственном производстве?
  • На чём реализовывали: какой МК? софт сами писали или взяли что-то готовое, типа того что по ссылке выше?
  • Для каких МК/ядер (какие умеет прошивать)?
  • С какими проблемами пришлось столкнуться?
  • Какие функции реализовали в своём программаторе (кроме собственно программирования прошивки)?
2 часа назад, dimka76 сказал:

Кстати, насчет шифрования. По SWD у вас же прошивка будет идти в открытом виде.

Можно к SWD подключиться сниффером и стырить вашу прошивку :smile:

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

И это тоже один из поводов создания темы: Если кто делал такой девайс, может он имеет ещё какие мысли по защите от стыривания?

2 часа назад, rezident сказал:

Если вас интересует зашифрованная прошивка (или что такое "должна хранится в закрытом виде"?), то как иначе-то?

Ничё не понял... :wacko2: Какая связь между "зашифрованной прошивкой" и "прошивать всё или нет"?

"Зашифрованная прошивка" - это прошивка, хранимая на флешке (SPI-флешке) в зашифрованном (закрытом) виде.

Share this post


Link to post
Share on other sites

7 минут назад, jcxz сказал:

"Зашифрованная прошивка" - это прошивка, хранимая на флешке в зашифрованном (закрытом) виде.

Зашифрованная прошивка имеет смысл тогда, когда шифруется также и канал передачи ее в целевое устройство. Если в канале передачи данных (SWD в вашем случае) прошивка не зашифрована, то какой смысл шифрования ее в памяти программатора? Ваши программаторы для шабашек домой берут что ли?

Share this post


Link to post
Share on other sites

1 час назад, rezident сказал:

Зашифрованная прошивка имеет смысл тогда, когда шифруется также и канал передачи ее в целевое устройство. Если в канале передачи данных (SWD в вашем случае) прошивка не зашифрована, то какой смысл шифрования ее в памяти программатора?

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

И шифрование её - почти ничего не стоит (в плане затрат).

1 час назад, rezident сказал:

Если в канале передачи данных (SWD в вашем случае) прошивка не зашифрована

Через SWD её тоже можно передавать в зашифрованном виде. Если что. Программа только немного усложнится.

Но перехватить всё равно будет возможно. Хоть и трудозатраты на перехват будут ещё выше.

Share this post


Link to post
Share on other sites

20 hours ago, jcxz said:

SPI-флешку прочитать гораздо проще, чем сниффить SWD и вытаскивать оттуда данные. И прочитать флешку может любой обрыган.

Зависит от проца, в некторых сделанотак, что фимваре храниться во внешней SPI-флешке в том-же зашифрованном виде, и при старте переписывается встроенным бутлоадером проца в ОЗУ проца и уже оттуда работает (флеша в проце вобще нет).

256 или 512 битный код расшифровки хранится в ОТР памяти проца (прошивается при первой прошивке).

 

Share this post


Link to post
Share on other sites

4 минуты назад, Allregia сказал:

Зависит от проца, в некторых сделанотак, что фимваре храниться во внешней SPI-флешке в том-же зашифрованном виде, и при старте переписывается встроенным бутлоадером проца в ОЗУ проца и уже оттуда работает (флеша в проце вобще нет).

256 или 512 битный код расшифровки хранится в ОТР памяти проца (прошивается при первой прошивке).

Знаю. Сам работал с такими и бутлоадеры для таких писал.

И речь в теме идёт - как раз о первоначальной прошивке. Чистого МК. С обновлением прошивки проблем нет - оно у нас уже давно (изначально) делается защищённым способом.

 

PS: И пока речь идёт только о прошивке МК со встроенной флешь. На нынешней работе пока только такие. Но и ROM-less МК можно таким же автономным программатором шить. Если потребуется. Не проблема.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...