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

 
 
> Сериализация устройств, Конкурс на самый негеморный способ :)
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
 
Start new topic
Ответов
kada
сообщение Jul 7 2011, 11:48
Сообщение #2


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

Группа: Свой
Сообщений: 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

Сообщений в этой теме


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

 


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


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