|
|
  |
Сериализация устройств, Конкурс на самый негеморный способ :) |
|
|
|
Jul 5 2011, 15:44
|

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

|
Доброго всем здравия! Есть девайсы на базе ATMega88. Нужно каким-то способом сериализовать их, т.е. иметь константу во флеше с уникальным серийным номером (UID). Вопрос следующий: Как автоматизировать процесс сериализации в IARе, дабы не вбивать UID каждый раз ручками, т.к. таких девайсов много?  Процы шьем с помощью JTAGICE mkII по SPI, запуская предварительно созданный командный bat-файл. В IARe есть удобная функция подсчета CRC области флеш памяти и сохранении результата. Использовал это в своих проектах. Но сериализацию не нашел  В голову приходит мысль сгенерить файл с UID-ами и при линковке забирать один UID из этого файла и помещать его в исполняемый объектный файл (прошивку), после удалить этот UID с исходного файла, чтобы случайно не прописать использованный UID в другой девайс. Проблема в том что нет таких команд в линковщике по обращению к файлу и его изменению. Поделитесь пожалуйста мыслями, уважаемые господа.
|
|
|
|
|
Jul 5 2011, 17:00
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Цитата ... иметь константу во флеше с уникальным серийным номером (UID). Переходите на AVReAL  . Он такое умеет
|
|
|
|
|
Jul 5 2011, 19:43
|

Гуру
     
Группа: Свой
Сообщений: 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 можно скачать у мелкософта
--------------------
|
|
|
|
|
Jul 6 2011, 07:44
|

читатель даташитов
   
Группа: Свой
Сообщений: 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 что позволяет потом вспомнить дату и время программирования этого устройства.
|
|
|
|
|
Jul 6 2011, 08:55
|

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

|
QUOTE (Artem_Petrik @ Jul 5 2011, 20:00)  Переходите на AVReAL  . Он такое умеет Это точно. Причем он наращивает номер только в том случае, если прошивка завершилась успешно. Т.е. не будет ни пропусков в нумерации, ни двух устройств с одинаковым номером. Ну или писать подобную функциональность на языке виндовых .bat-файлов, правя серийный номер при помощи SRecord. А если учесть, что AVReal умеет циклически запускать прошивку по нажатию кнопки на адаптере (которую можно встроить в разъем программирования) - вообще конфетка для серийного производства.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 7 2011, 09:35
|

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

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

Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 18 2012, 06:54
|
Частый гость
 
Группа: Участник
Сообщений: 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).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|