реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Сериализация устройств, Конкурс на самый негеморный способ :)
kada
сообщение Jul 5 2011, 15:44
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 23-05-05
Из: Ташкент
Пользователь №: 5 324



Доброго всем здравия!

Есть девайсы на базе ATMega88. Нужно каким-то способом сериализовать их, т.е. иметь константу во флеше с уникальным серийным номером (UID).
Вопрос следующий: Как автоматизировать процесс сериализации в IARе, дабы не вбивать UID каждый раз ручками, т.к. таких девайсов много? sm.gif
Процы шьем с помощью JTAGICE mkII по SPI, запуская предварительно созданный командный bat-файл.

В IARe есть удобная функция подсчета CRC области флеш памяти и сохранении результата. Использовал это в своих проектах. Но сериализацию не нашел sad.gif
В голову приходит мысль сгенерить файл с UID-ами и при линковке забирать один UID из этого файла и помещать его в исполняемый объектный файл (прошивку), после удалить этот UID с исходного файла, чтобы случайно не прописать использованный UID в другой девайс. Проблема в том что нет таких команд в линковщике по обращению к файлу и его изменению.

Поделитесь пожалуйста мыслями, уважаемые господа.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 5 2011, 16:00
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(kada @ Jul 5 2011, 21:44) *
Есть девайсы на базе ATMega88. Нужно каким-то способом сериализовать их, т.е. иметь константу во флеше с уникальным серийным номером (UID).
напишите программулину, которая будет забивать серийник в определенную область файла прошивки. Делов по времени меньше, чем будет обсуждаться данный топик.


--------------------
Go to the top of the page
 
+Quote Post
kada
сообщение Jul 5 2011, 16:07
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 23-05-05
Из: Ташкент
Пользователь №: 5 324



Вариант, но во 1-х: я уже давно ничего не писал под PC, соответственно нужно искать и инсталлить какой-нибудь компилятор, во 2-х: думаю многим будет полезно изыскать способ реализации данного вопроса средствами IAR-а
Go to the top of the page
 
+Quote Post
Artem_Petrik
сообщение Jul 5 2011, 17:00
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006




Цитата
... иметь константу во флеше с уникальным серийным номером (UID).

Переходите на AVReAL biggrin.gif . Он такое умеет
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 5 2011, 19:00
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(kada @ Jul 5 2011, 20:07) *
я уже давно ничего не писал под PC, соответственно нужно искать и инсталлить какой-нибудь компилятор

Аргумент не принимается. Ничего устанавливать не надо, компилятор есть в онлайне.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 5 2011, 19:43
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(kada @ Jul 5 2011, 22:07) *
Вариант, но во 1-х: я уже давно ничего не писал под PC, соответственно нужно искать и инсталлить какой-нибудь компилятор, во 2-х: думаю многим будет полезно изыскать способ реализации данного вопроса средствами IAR-а
IAR не заточен для прошивки множества устройств, на сколько мне известно. IAR это средство для создания прошивок. Вам же нужно написать утилиту, которая автоматизирует процесс создания прошивок с уникальным номером.

Делов то в WinAPI (к примеру):
1. CreateFile
2. WriteFile
3. ReadFile (ферификация).
4. Запуск батника для прошивки целевого МК.

компилятор для Win можно скачать у мелкософта


--------------------
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Jul 6 2011, 07:44
Сообщение #7


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Вот скрипт на Perl, генерирующий пачку hex файлов с заданными серийниками, с помощью srec_cat из комплекта SRecord.
Здесь серийник 16-битный, находится по адресам 0x42, 0x43.
Формат запуска:
Код
makefw.pl src.hex XX
makefw.pl src.hex XX YY

где XX - первый серийник, YY- последний серийник.
На выходе будет пачка от srcserXX.hex до srcserYY.hex.
После успешного программирования скрипт armprg переносит hex в другое место, чтоб не было соблазна зашить еще раз, и делает touch что позволяет потом вспомнить дату и время программирования этого устройства. rolleyes.gif
Прикрепленные файлы
Прикрепленный файл  makefw.rar ( 634 байт ) Кол-во скачиваний: 32
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 6 2011, 08:55
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Artem_Petrik @ Jul 5 2011, 20:00) *
Переходите на AVReAL biggrin.gif . Он такое умеет
Это точно. Причем он наращивает номер только в том случае, если прошивка завершилась успешно. Т.е. не будет ни пропусков в нумерации, ни двух устройств с одинаковым номером. Ну или писать подобную функциональность на языке виндовых .bat-файлов, правя серийный номер при помощи SRecord. А если учесть, что AVReal умеет циклически запускать прошивку по нажатию кнопки на адаптере (которую можно встроить в разъем программирования) - вообще конфетка для серийного производства.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 7 2011, 08:46
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Сергей Борщ @ Jul 6 2011, 11:55) *
Т.е. не будет ни пропусков в нумерации, ни двух устройств с одинаковым номером.

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


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jul 7 2011, 09:35
Сообщение #10


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Dog Pawlowa @ Jul 7 2011, 11:46) *
А вот в это не верю. Человеческий фактор - страшная вещь. Никакие технологические паспорта и контроль не помогают, ибо человек может задуматься и дважды нажать кнопку программирования.
Если на вход поступают чистые микросхемы (а на производстве оно где-то так и должно быть), то в командной строке не укаывать -e и указать -b. В уже записанную микросхему шить не будет.
А так, конечно, "спецфактор" в виде человка может всё, включая наклейку двух бумажек на одну микросхему.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
kada
сообщение Jul 7 2011, 11:48
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 23-05-05
Из: Ташкент
Пользователь №: 5 324



Благодарю всех за содействие.
Воспользовался советом Сергей Борщ, и слепил bat-файл сценарий для сериализации.
Привожу его код (файл "Serial.bat"):
Код
@echo off

set SETTINGSFILE=%~dp0\Serial.ini || exit /b 1
set HEXFILE=%1

rem Проверка существования файлов
if not exist %SETTINGSFILE% (
    echo FAIL: Файл с серийными номерами отсутствует
    exit /b 1
)
if not exist %HEXFILE% (
    echo FAIL: Файл с прошивкой отсутствует
    exit /b 1
)

for /f "eol=# delims== tokens=1,2" %%a in (%SETTINGSFILE%) do (
    rem В переменной a - ключ
    rem В переменной b - значение
    rem Мы транслируем это в переменные окружения
    set "%%a=%%b"
)
rem Вычисляем конечный адрес
set /a END_ADDRESS = %2 + %3
rem Модифицируем s/n в прошивке с помощью утилиты srec_cat.exe
srec_cat -generate %2 %END_ADDRESS% -l-e-constant %Serial% %3 ^
%HEXFILE% -Intel -exclude %2 %END_ADDRESS% ^
-o %HEXFILE% -Intel
rem Создаем временный файл для модификации s/n в файле "Serial.ini"
type NUL>"%TEMP%\Serial.ini"
rem Инкремент переменной окружения "Serial" - текущего s/n
set /a Serial = %Serial% + 1
rem Сохранение нового значения s/n во временном файле
echo:Serial=%Serial% >>"%TEMP%\Serial.ini"
rem Перезапись исходного файла временным файлом с новым s/n
move/y "%TEMP%\Serial.ini" "%SETTINGSFILE%"

exit /b 0

В том каталоге, из которого запускается "Serial.bat" должны также присутствовать "srec_cat.exe" из пакета утилит "SRecord", а также текстовый файл "Serial.ini", в котором содержится текущий s/n в виде строчки:
Код
Serial=1

К данному s/n прибавляется единица всякий раз, когда запускается "Serial.bat" и сохраняется.

Вызывать этот сценарий, например из другого bat сценария содержащего команды программатора, нужно следующим образом:
Код
call Serial.bat [Путь и имя модифицируемого hex файла] [Начальный адрес в модифицируемом файле, куда будет помещен s/n] [Размер s/n в байтах]

Пример вызова "Serial.bat":
Код
call Serial.bat %~dp0\1.hex 0x1FFB 4

В результате этого вызова по адресу 0x1FFB файла "1.hex", находящегося в том же каталоге, откуда производится вызов сценария, запишется s/n размером 4 байта из файла "Serial.ini".
В архиве "Serial.bat", "Serial.ini", "srec_cat.exe"
Прикрепленные файлы
Прикрепленный файл  Serial.rar ( 236.08 килобайт ) Кол-во скачиваний: 33
 
Go to the top of the page
 
+Quote Post
Almaz1988
сообщение Oct 18 2012, 05:47
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Возможно переписать этот батник на добавление серийника не в hex-файл, а в axf-файл?
Go to the top of the page
 
+Quote Post
Almaz1988
сообщение Oct 18 2012, 06:54
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Переписал этот батник на запуск без параметров - двойным щелчком мыши по нему.
В файле 2.hex в ячейку 0x5FFB записывает серийник.

Но если пытаюсь запустить батник из keil'а с помощью опции "Run user program". Он серийник в hex-файл не прописывает, хотя в файле ini -серийник увеличивает на 1.

В окошке сообщений при построении проекта выдает:
Цитата
linking...
Program Size: Code=11752 RO-data=280 RW-data=568 ZI-data=5896
FromELF: creating hex file...
User command #1: C:\Almaz\áàòíèêîïèñàíèå\serialNumber\Serial10.bat
"srec_cat" ­¥ ï¥âáï ¢­ãâ७­¥© ¨«¨ ¢­¥è­¥©
ª®¬ ­¤®©, ¨á¯®«­ï¥¬®© ¯à®£à ¬¬®© ¨«¨ ¯ ª¥â­ë¬ ä ©«®¬.
¥à¥¬¥é¥­® ä ©«®¢: 1.
"ufoModule.axf" - 0 Error(s), 1 Warning(s).


Прикрепленные файлы
Прикрепленный файл  serialNumber.rar ( 246.65 килобайт ) Кол-во скачиваний: 11
 
Go to the top of the page
 
+Quote Post
Almaz1988
сообщение Oct 18 2012, 08:51
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Разобрался - в пути к батнику были русские буквы
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01577 секунд с 7
ELECTRONIX ©2004-2016