Jump to content

    

STM32 установка серийного номера при программировании. Как реализовать ?

Всем привет.

 

Поделитесь пожалуйста опытом, кто сумел реализовать установку серийного номера при программировании  STM32 в серии ?

 

Думаю в таком направлении: 
Нужно научится при программировании записывать номер по определённому адресу.
В стандартном ПО ST-Link Utility эта возможность есть, но крайне неудобна.
Но, у программатора ST-LINK есть api (раздел 4 в UM0892.pdf), позволяющий работать с ним, и  писать по заданному адресу.
Вопрос: неужели нет никакого готового, уже написанного кем-то ПО для программирования и одновременной установки уникальных номеров ? Может, кто-то уже нашёл и использует ?

Заранее спасибо !

 

Share this post


Link to post
Share on other sites

Чем не устраивает внутренний уникальный ID проца? Мы используем это уже как давно. Да прога своя но совсем не сложно написать. К тому же это ID используем в нескольких проектах как ключ к криптовке.

Share this post


Link to post
Share on other sites

Записываю вручную именно в ST-Link Utility по выбранному адресу где-то в дыре в таблице векторов прерываний. Номер именно серийный, то есть, начался с 0001 и инкрементируется с каждым прибором. 

Про api не знал. Посмотрю. 

Share this post


Link to post
Share on other sites

А в устройстве есть какие-либо программные "заводские" настройки? Если да, то серийник лучше записывать вместе с ними. Быстрее получается и "дырок" из-за брака не будет.

Share this post


Link to post
Share on other sites

В моих устройствах всегда присутствует мой загрузчик с шифрованием. Под него выделяется некоторое количество секторов/страниц в начале памяти. В этой области всегда остается свободное место, в котором я храню серийный номер, версию железа устройства, иногда тип устройства (если одно приложение может загружаться в несколько устройств со схожим функционалом) и тому подобные данные. При производстве в устройство сначала записывается загрузчик, эти данные и приложение для тестирования устройства. Серийный номер при записи загрузчика забит всеми единицами (нулями для STM32Lxx). Это позволяет после окончания тестирования один раз переписать его без стирания страницы/сектора. После тестировния на компе запускается скрипт записи порядкового номера. Этот скрипт берет номер из файла, при помощи утилиты из пакета srecord создает hex с этим номером, шифрует этот hex, добавляя в конец файла команду защитить загрузчик от записи, а процессор - от чтения, отсылает шифрованный файл в процессор через мой загрузчик, если запись прошла удачно - скрипт загружает приложение, увеличивает серийный номер на единицу и пишет обратно в файл. В файл отчета пишет дату, время, серийный номер, номер версии. Программирование сводится к запуску скрипта одним нажатием на клавишу Enter не трогая мышь и не глядя на экран. Раньше (во времена 98 виндовса) в конце пригрывалась веселая мелодию из трех нот (в случает неудачи проигрывалась печальная из двух). Можно было запрограммировать серию устройств вообще ни разу не посмотрев на экран.

Share this post


Link to post
Share on other sites

OTP регион памяти в контроллере? Кажется, специально создан для чего-то подобного.

Share this post


Link to post
Share on other sites
8 hours ago, Сергей Борщ said:

В моих устройствах всегда присутствует мой загрузчик с шифрованием. Под него выделяется некоторое количество секторов/страниц в начале памяти. В этой области всегда остается свободное место, в котором я храню серийный номер, версию железа устройства, иногда тип устройства (если одно приложение может загружаться в несколько устройств со схожим функционалом) и тому подобные данные. При производстве в устройство сначала записывается загрузчик, эти данные и приложение для тестирования устройства. Серийный номер при записи загрузчика забит всеми единицами (нулями для STM32Lxx). Это позволяет после окончания тестирования один раз переписать его без стирания страницы/сектора. После тестировния на компе запускается скрипт записи порядкового номера. Этот скрипт берет номер из файла, при помощи утилиты из пакета srecord создает hex с этим номером, шифрует этот hex, добавляя в конец файла команду защитить загрузчик от записи, а процессор - от чтения, отсылает шифрованный файл в процессор через мой загрузчик, если запись прошла удачно - скрипт загружает приложение, увеличивает серийный номер на единицу и пишет обратно в файл. В файл отчета пишет дату, время, серийный номер, номер версии. Программирование сводится к запуску скрипта одним нажатием на клавишу Enter не трогая мышь и не глядя на экран. Раньше (во времена 98 виндовса) в конце пригрывалась веселая мелодию из трех нот (в случает неудачи проигрывалась печальная из двух). Можно было запрограммировать серию устройств вообще ни разу не посмотрев на экран.

Жуть. В конце - лучше ноты поменять на буквы, три как раз хватает.

Share this post


Link to post
Share on other sites
17 hours ago, MiklPolikov said:

 

Мы используем внешнюю 1-wire memory с уникальным ID, заодно храним переменные, которые привязаны к этому прибору (при обновлении программы настройки остаются, не нужно под обновлении ПО прибора заново делать манипуляции, т.е. вести базу ПО). Еще можно использовать (опять же внешнюю мсх с уникальным MAC). По началу приходилось узнавать серийник пробора у пользоваателя и генерить новую "прошивку" ПО под этот серийник. А пользователь эелементарно может стереть все ПО, которjt в приборе и flash - пустая (нет там ничего) или замена МК к этому же приведет.

Share this post


Link to post
Share on other sites
On 7/6/2019 at 9:25 AM, Сергей Борщ said:

В моих устройствах всегда присутствует мой загрузчик с шифрованием. Под него выделяется некоторое количество секторов/страниц в начале памяти. В этой области всегда остается свободное место, в котором я храню серийный номер, версию железа устройства, иногда тип устройства (если одно приложение может загружаться в несколько устройств со схожим функционалом) и тому подобные данные. При производстве в устройство сначала записывается загрузчик, эти данные и приложение для тестирования устройства. Серийный номер при записи загрузчика забит всеми единицами (нулями для STM32Lxx). Это позволяет после окончания тестирования один раз переписать его без стирания страницы/сектора. После тестировния на компе запускается скрипт записи порядкового номера. Этот скрипт берет номер из файла, при помощи утилиты из пакета srecord создает hex с этим номером, шифрует этот hex, добавляя в конец файла команду защитить загрузчик от записи, а процессор - от чтения, отсылает шифрованный файл в процессор через мой загрузчик, если запись прошла удачно - скрипт загружает приложение, увеличивает серийный номер на единицу и пишет обратно в файл. В файл отчета пишет дату, время, серийный номер, номер версии. Программирование сводится к запуску скрипта одним нажатием на клавишу Enter не трогая мышь и не глядя на экран. Раньше (во времена 98 виндовса) в конце пригрывалась веселая мелодию из трех нот (в случает неудачи проигрывалась печальная из двух). Можно было запрограммировать серию устройств вообще ни разу не посмотрев на экран.

Практически один в один. ))
У меня 2 проги. Одна для программирования на предприятии. Там сразу запрашивается серийный номер. Заливается загрузчик вместе с приложением.

Вторая для обновления прошивки. При обновлении прошивки, серийный номер устройства не меняется.

 

1.png

2.png

Share this post


Link to post
Share on other sites

Нашёл самый простой способ:
В ST Link Utility, после программирования, нужно перейти на вкладку "memory, там реальное содержание памяти.
Поставить галочку "Life Update"
После этого редактирование в окне сразу же программируется в МК.
Последовательность действий можно оптимизировать на столько, что не нужно ни двигать мышкой, ни следить за положением курсора. Набор на клавиатуре, Enter , и берём следующую плату. 

Share this post


Link to post
Share on other sites
4 часа назад, MiklPolikov сказал:

Набор на клавиатуре, Enter , и берём следующую плату. 

А на следующий день (а если это понедельник после тяпницы :crazy:) пытаемся вспомнить, на каком номере остановились. Или через год с ужасом узнаем, что у нас по миру гуляет сотня приборов с попарно одинаковыми номерами... Зато способ простой...

Share this post


Link to post
Share on other sites

Я именно так и делаю в ST-Link Utility. А чтобы не путать номера, записываю в текстовый файл. Серийный номер еще и на задней панели прибора пишется, так что требуется строгое соответствие, и автомату этого доверить никак невозможно. Только вручную, в трезвой памяти. 

Share this post


Link to post
Share on other sites
2 часа назад, ViKo сказал:

Только вручную, в трезвой памяти. 

Есть люди ответственные, а есть безответственные. Но и ответственным присуща участь банального человеческого фактора (рука дрогнула, глаз замылился и т.д.). Поэтому такую скучную, однообразную, монотонно-угнетающую и изнуряющую работу ни то что студентам-практикам давать нельзя (а то сбегут, попутно распространяя негатив со скоростью венеерического заболевания), но и себя обременять. Роботов для чего придумывали? Для того, чтобы заменить человека. Так и тут - автоматизация есть большое благо.

Share this post


Link to post
Share on other sites
3 hours ago, ViKo said:

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

Почему невозможно? У меня автомат наклейки с QR-кодами печатает (ID продукта, дата производства, MAC-адрес).

Share this post


Link to post
Share on other sites
59 минут назад, aaarrr сказал:

Почему невозможно? У меня автомат наклейки с QR-кодами печатает (ID продукта, дата производства, MAC-адрес).

Зависит от серийности и типа "продукта". А клеит наклейки кто/что? У нас как деды тушью писали, так и пишут. У нас, вообще, дно... :biggrin:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now