Перейти к содержанию
    

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

Всем привет.

 

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

 

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, Сергей Борщ said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 hours ago, MiklPolikov said:

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/6/2019 at 9:25 AM, Сергей Борщ said:

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

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

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

 

1.png

2.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, MiklPolikov сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, ViKo said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...