Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Утилита для программирования STM8S своими руками

Сб янв 16, 2021 05:02:15

Подскажите пожалуйста, где можно найти информацию (код) по непосредственной прошивке микроконтроллера типа STM8S (и наверное ему подобных) с помощью готового ST-LINK/V2 по интерфейсу SWIM. В интернете находил исходники для консольной версии на языке «C» вообще без каких либо объяснений. В моей ситуации это два минуса. Первый минус - привык делать оконные версии в Delphi на "Паскале", поэтому не подходит язык, команды вообще другие, много отсылок на библиотеки и DLL, второй минус – так как пример консольный, очень много лишнего, а объяснения как говорил ранее, нет вообще …. чужая душа потёмки.

Причина создания утилиты: она как всегда тривиальная, защитить себя от кражи своего исходного файла прошивки, написанного под микроконтроллер STM8S003F3, которую передаю сторонним лицам на программирование. И другой возможности просто нет, это требование заказчика/хозяина. Результат со мной будет обговоариваться спустя несколько месяцев, аж после продажи готовых изделий самим заказчиком. Но вот если я предоставлю утилиту для программирования МК это будет нормально, мало ли сколько есть всевозможных «прошивателей» микроконтроллеров, например тот же ST-VP.exe (оконная версия) и STVP_CmdLine.exe (консольная версия) и появление ещё какой-то ни у кого не вызовет лишних вопросов. Тем более что в своей программе смогу сделать защиту от кражи, как самого исходного файла прошивки, так и саму возможность программирования можно будет приостановить в любой момент, или поставить счетчик и т.п.

Краткое описание текущей ситуации: программа написана под самую завязку STM8S003F3, ноги полностью все заняты, в основном на выход, только одна на вход АЦП, кроме ножки сброса, поэтому скорее всего вариант с bootloader-ом не пройдет (если честно я ещё не совсем разобрался с этим моментом). Из того что понял на данный момент, мне кажется банально не хватит места, ведь у меня еле влезло то что требовалось, а использовать именно этот МК опять же требование заказчика. Да и программировать в два этапа, сначала откуда-то bootloader, а потом каким-то образом ещё откуда-то основную программу - не подойдет. Никого не устроит этот вариант. Если в этом моменте что-то недопонимаю поправьте.

Почти уверен, что просто прошивка через уже готовый ST-LINK/V2 через SWIM блоками по 256 или 512 байт в программную часть флеш наверняка даже проще чем городить сам bootloader, который пусть и сам себя может прошивать – ну незачем всё усложнять …. или я опять же что то не до понимаю!!!

P.S. защиту от чтения ROP уже прошитого МК установил в коде прошивки, поэтому об этом уже тоже позаботился

Re: Утилита для программирования STM8S своими руками

Сб янв 16, 2021 08:46:56

Так это нужно писать свой бутлоадер с шифрованием....
Глупая идея.

P.S. А код прошивальщика можно найти на гитхабе. Вот он. Если бы его не было, то STM8 просто невозможно было бы прошить: все-таки, у них, в отличие от тех же STM32F0x2, не так-то много возможностей загрузить прошивку: ни USB-DFU, ни встроенного бутлоадера нет…
Последний раз редактировалось Eddy_Em Сб янв 16, 2021 10:00:16, всего редактировалось 2 раз(а).

Re: Утилита для программирования STM8S своими руками

Сб янв 16, 2021 08:49:04

Изучайте программирование. Нет никакой проблемы работать с dll, это обязан уметь каждый программист. Да и нет там ничего сложного, фактически - тот же вызов функций/процедур и обработка их результата.
В консольных примерах, как правило, наоборот - нет ничего лишнего. Там всегда самая суть.
Если что-то на Си - значит, надо уметь читать Си, вряд ли кто-то будет портировать только ради Вас. Разве что, может это уже кто-то сделал, но тогда надо искать...
Вам поможет:
https://www.st.com/en/development-tools ... b-stm8.htm
PM0051 How to program STM8S and STM8A Flash program memory and data EEPROM
UM0470 STM8 SWIM communication protocol and debug module
UM0560 STM8 bootloader user manual
RM0016 STM8S and STM8A microcontroller families reference manual
AN2737 Basic in-application programming example using the STM8 I2C and SPI peripherals
AN2659 STM8 in-application programming (IAP) using a customized user-bootloader

Re: Утилита для программирования STM8S своими руками

Сб янв 16, 2021 12:21:54

Делал подобное, правда для STM32
прошивку размещаете в теле программы, можно зашифровать
Код:
const flashCode: array [1..11184] of byte = (
$48,$05,$00,$20, $D1,$00,$00,$08, $81,$0E,$00,$08, $ED,$09,$00,$08,
$00,$00,$00,$00, $00,$00,$00,$00, $00,$00,$00,$00, $00,$00,$00,$00,
...
)

конвертер в массив с бинарника пишется или ищется - слегка переделал
BIN2C (C) JRVV, ELECSAN S.A., 2016

затем из массива восоздаете файлик куда ни будь в мутное рандомное место типа
Код:
c:\Windows\Temp\cadf3629-8a5a\' + RandomPassword(15);
BlockWrite(f, flashCode, SizeOf(flashCode));

файл экзешника программатора тоже лучше переименовать STVP_CmdLine.exe->у меня отфонарное 'ch.bks' и приложить к программе
и вызвать это из своей программы:
Код:
str2 := 'ch.bks -c UR -P ' + str + ' 0x08000000';
RunDosInMemo(str2 , mmo1);

mmo1 нужно скрыть, удобно на этапе отладки
созданный файлик удаляете

Re: Утилита для программирования STM8S своими руками

Сб янв 16, 2021 15:13:36

Результат со мной будет обговоариваться спустя несколько месяцев, аж после продажи готовых изделий самим заказчиком.
Что-то мутное. Как правило такие условия выдумывают когда собираются кинуть разработчика. Тем или иным способом. Хотя решать конечно вам. :dont_know:

Добавлено after 4 minutes 41 second:
у меня еле влезло то что требовалось, а использовать именно этот МК опять же требование заказчика.
Насчёт "требования заказчика" - скорее всего просто не сумели убедить его. Хотя иногда реально встречаются крайне упёртые личности.

Да и программировать в два этапа, сначала откуда-то bootloader, а потом каким-то образом ещё откуда-то основную программу - не подойдет.
Текстовым редактором пользоваться умеете? Если да: берёте два .hex-файла (бутлоадер + основное ПО) и тупо склеиваете их в текстовом редакторе несколькими нажатиями клавиш. Предварительно удалив некоторые строчки одного из файлов.
Всё - единый комплексный файл прошивки готов.

Re: Утилита для программирования STM8S своими руками

Вс янв 17, 2021 03:24:54

oleg110592, спасибо Вам за дельный совет, так как все остальные очень и очень не простые, изучать все не смогу чисто физически, поэтому для ускорения этого вопроса собственно и пришел сюда, а Вашу идею можно очень неплохо развить, конечно небольшой изъян есть, но это уже нужно четко понимать и нахрапом не возьмешь, думаю этого будет достаточно.

Eddy_Em, я даже попытался разобраться в исходниках, но он даже не "компилится" с помощью Borland C++ 5.5.1, там куча ошибок как с синтаксисом, так и вплоть до нехватки библиотек (стандартные что были в инсталяторе все подтянул через .cfg).... не достающие пробовал находить и подставлять, так вылазят ещё ошибки в них. Безусловно можно было докопаться, рассмотреть, вплоть до того что удалять ругающиеся команды, но буду откровенен сдался, так как рубая одну голову вылазило две новые.

Re: Утилита для программирования STM8S своими руками

Вс янв 17, 2021 10:42:57

MarkTok, компилировать в линуксе надо, а не на игровой приставке!

Re: Утилита для программирования STM8S своими руками

Пн янв 18, 2021 06:41:53

Тем более что в своей программе смогу сделать защиту от кражи, как самого исходного файла прошивки, так и саму возможность программирования можно будет приостановить в любой момент, или поставить счетчик и т.п.


Не сможешь.
В этой схеме, если захотят, тебя кинут просто на раз. Передал программу программирования - считай передал прошивку, которую будут шить столько раз, сколько захотят.
У тебя нет возможности приостановить возможность программирования, если только твой программатор не будет управляться тобой через интернет.

Если у тебя настолько ценная программа, что стоимость работ по извлечению прошивки перекроет написание прошивки с нуля,
то в твоей схеме прошивка извлекается логическим анализатором в процессе программирования.
Затем можно сделать дизассемблирование и поиск/удаление закладки.

Для того, чтобы тебя не кинули, ты должен предусмотреть возможность кинуть самому: например, сделать прошивку с закладкой.

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

-------

Вероятно оптимальный для тебя вариант: сделай программу программирования в виде законченного независимого аппаратного программатора.
Устройство: плата с процессором, кнопкой, парой светодиодов (зеленый, красный). Подключили контакты программирования, нажали кнопку.
По факту успеха внутри процессора учлось количество сделанных копий.

Конечно, это не защитит тебя от слива логическим анализатором, но в первом приближении ты сможешь проконтролировать количество копий и маленько скорректировать баланс сил.

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

Re: Утилита для программирования STM8S своими руками

Пн янв 18, 2021 18:43:42

У тебя нет возможности приостановить возможность программирования, если только твой программатор не будет управляться тобой через интернет.

Что мешает сдампить SWIM интерфейс? Собственная прога на ПК это ерунда. Только самостоятельная прошивка с защитой даст хоть какую гарантию.

Re: Утилита для программирования STM8S своими руками

Чт янв 21, 2021 23:47:48

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

P.S. Ещё что-то слышал о существовании такого способа:
Некий запрограммированный чип (заведомо с большей памятью и естественно залоченный) в который залита необходимая прошивка, и он уже в свою очередь программирует серийные МК. Может это и есть аппаратный программатор о котором говорил pavel2000?! Только там вообще получается всё на уровне «0» и «1» нужно передавать в SWIM порт, с необходимыми паузами и т.п., а из порта наверное и обратно что то посылается в свою очередь.... это же жесть какая-то, там же четко нужно знать протокол связи «SWIM» или как его там в узких кругах называют.

Re: Утилита для программирования STM8S своими руками

Пт янв 22, 2021 00:22:32

единственый способ ограничитьклдонировааниен -не давать прошифку в доступ
тут либо ты (или твой работник которому 200%доверия ) сам шьет чипы или делаеш сервер-сайт у себя дома и для прошифки софт прошива-клиент к нему логинится число логов считается счетчиком после выбора лимита(напрмерр 200шт) сервер болше не дает слить вылдавая что то типа ваш лимит исчерпан купите новый доступ на 200 шт
так давно делают изготовители совта для прошива и разлочки соток..

Добавлено after 7 minutes 32 seconds:
купить досту на нужно число чипоф можно онлай
кстати в ходе процедуры не сложно присвоит каждому кленту индивидуалный ID и прошить в него тогда вопрос легалности колпии заране легко проверить
толка не переувлекайтесь проверка успешности запуси чтением в процеси сесии обязателно лиш потом инкрементмруем счетчик циклоф записи..на сервере
это исключит апрорблемы если был сбой и потерю клиентом числакопий например изза битого чипа

Добавлено after 50 seconds:
и да весь трафик криптуйте своим апаратным ключом

Добавлено after 2 minutes 35 seconds:
есть еще вариант средний если полднять сесию нелзя изза протокола секретности или канала связи - апаратный HASP с счетчиком попыток каждая 3апись инкрементирут числ попыток после расхода лимита пусть покупают у вас новый HASP

Re: Утилита для программирования STM8S своими руками

Пт янв 22, 2021 01:07:01

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

Re: Утилита для программирования STM8S своими руками

Пт янв 22, 2021 04:49:23

Ярослав555 Оооочень интересный вариант! Главное чтобы в самом протоколе во время заливки не было предусмотрено запросов: типа "вопрос" - " логически правильный ответ", тогда вся затея может накрыться

Хотя если это будет делать сам программатор, то ответ можно впоследствии и игнорить ... но если наоборот, тогда такой "финт ушами" не пройдет

Re: Утилита для программирования STM8S своими руками

Пт янв 22, 2021 08:09:38

Только там вообще получается всё на уровне «0» и «1» нужно передавать в SWIM порт, с необходимыми паузами и т.п., а из порта наверное и обратно что то посылается в свою очередь.... это же жесть какая-то, там же четко нужно знать протокол связи «SWIM» или как его там в узких кругах называют.


Немножко гуглим и через пару минут получаем ссылки

https://community.st.com/s/question/0D5 ... m-protocol
https://github.com/dimitarm1/SWIM_Programmer
http://kuku.eu.org/?projects/stm8spi/stm8spi

и так далее, затем по ссылкам изучаем информацию.
При этом фраза "STM8 microprocessors utilize a proprietary (but well documented) programming protocol called "SWIM" вселяет надежду на успех мероприятия.
Ответить