Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil и HEX->BIN
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
PrSt
Люди добрые здравствуйе.
раньше моя программа писалась, компилилась и зашивлась из под линукса, все было отлично и радужно.
вчера код программы заставил работать в Keil и сразу появилась куча вопросов и проблем.
прога компилируется, генерится HEX, но не могу теперь получить/сгенерировать бинарик чтобы зашить его в макет.
подскажите плиз, как переконвертировать выходной HEX от Keil в BIN, что бы его скормить в загрузчик SAM-BA
пробовал утитилкой HEX2BIN - безрезультатно.
подскажите плз....
VAI
http://www.keil.com/support/docs/274.htm
может это поможет?
Sot
Таким конвертором пробовали?
PrSt
Цитата(VAI @ May 5 2006, 13:48) *
http://www.keil.com/support/docs/274.htm
может это поможет?


я же говорю - HEX2BIN не помогает

Syntax: HEX2BIN [/option] hexfile [binfile]

is the Intel HEX input file
is the binary file to create

may be any of the following

Note: n is a decimal number.

/Ln Binary file length
/Pn Pad data for binary file
/On Address offset (to add to HEX records)
/M Merge data into existing BIN file
/Q Quiet mode (no statistics are displayed)
/X Don't process ext. segment/linear address records

/? This help text


если верить хелпу то ключи не обязательно, вот например делаю (может я не так что-то понял)

d:\_work\MDSA_Keil>hex2bin mdsa.hex mdsa.bin

HEX2BIN Version 1.06
Copyright © 1995 Programix Corp.
Portions copyright © 1993-1995 BITWARE.
All rights reserved.
Status: Creating binary file.
Status: Writing 4 bytes at address 0x0000CEBC.
ERROR: Invalid record type in HEX record 1246.
Status: HEX to BIN conversion was not successful.

D:\_work\MDSA_K~1>
sensor_ua
А у Вас hex или что-то типа hex-386? А то с C8051F120 при выходном коде более 64 кило hex-а мало и предлагается эта фигня - там другой формат. Приходилось писать по-быстрому конвертилку
PrSt
Цитата(sensor_ua @ May 5 2006, 15:23) *
А у Вас hex или что-то типа hex-386? А то с C8051F120 при выходном коде более 64 кило hex-а мало и предлагается эта фигня - там другой формат. Приходилось писать по-быстрому конвертилку


каюсь, но понятия не имею, вот и спрашиваю по этому
гдето разок встречал hex-386, нощяс найти это место в упор не могу...

дело втом что Keil упорно долгое время не хотел вообще компилить мой проект, в то время как под линуксов процес шел по полной программе

и вот я вчера таки уговорил его собрать май проект, а теперь не знаю как зашить его в AT91SAM7S256

Keil генерирует ELF и HEX, а вот как их запихнуть в SAM-BA - не пойму, вот и спрашиваю у Вас.

Дело в том что было же много тех кто работал с кейлом, они же както зашивали свои камни...
вот и надеюсь что ктото подскажет... а тут кейлистов чет и не видно...
sensor_ua
В опциях проекта - опциях линкера - выходной формат
DeadMoroz
В пакете KEIL имеется утилита fromelf.exe. Я использую ее, например так: fromelf --bin -o outfile.bin infile.axf.

Удачи!
vvs157
Цитата(PrSt @ May 5 2006, 13:22) *
пробовал утитилкой HEX2BIN - безрезультатно.
подскажите плз....

А вот таким если ...
PrSt
Цитата(Sot @ May 5 2006, 15:17) *
Таким конвертором пробовали?

биг сенк!
этот конвертор сделал вроде правильный бинарик,
ну по крайней мере по размеру похож...
попробую зашить...
MiklPolikov
Доброй ночи !
Та же проблема и ничего не получается.
*.HEX создан KEILом

HEX2BIN говорит "invalid record type in HEX record 1 "

HEXTBCS говорит "reclen=4 errcod=9 errline=2 errmsg=Memory Area Owerlap"

fromelf делает *BIN из *ELF . А как *ELF в KEILе получить ?

Кто как делает BIN из HEX - расскажите .

Bin нужен для программирования AT91SAM7S по USB . Может для этого есть программа, которая hex понимает ?

Заранее благодарю !
uriy
Для AT91SAM7S64 я пользуюсь методом DeadMoroz насчет точности написания входных параметров подтвердить не могу, точно не помню. Но похоже на правду. В опциях проекта была вкладка PostBuild или AfterBuild, а может еще как-то по другому называлась, вот туда я и прописываю это строку. А elf в keil вроде по умолчанию получается.
HARMHARM
Цитата(MiklPolikov @ Jun 6 2008, 01:03) *
Доброй ночи !
Та же проблема и ничего не получается.
*.HEX создан KEILом

HEX2BIN говорит "invalid record type in HEX record 1 "

HEXTBCS говорит "reclen=4 errcod=9 errline=2 errmsg=Memory Area Owerlap"

fromelf делает *BIN из *ELF . А как *ELF в KEILе получить ?

Кто как делает BIN из HEX - расскажите .

Bin нужен для программирования AT91SAM7S по USB . Может для этого есть программа, которая hex понимает ?

Заранее благодарю !


Я пользуюсь srecord. Очень мощная штука, все умеет что надо. HEX-файлы после нее едят все.
Пример скрипта для склеивания бутлоадера с приложением с вставкой CRC. При этом формируется дополнительный бинарник для шифрования (тоже с CRC).

Код
C:\DEV\ARM\srec_cat.exe Application\application.hex --Intel --l-e-crc32 --max Application\application.hex --Intel --Output application.hex --Intel
C:\DEV\ARM\srec_cat.exe Bootloader\bootloader.hex --Intel --Output bootloader.hex --Intel
C:\DEV\ARM\srec_cat.exe bootloader.hex --Intel --fill 0xFF 0x0 0x5000 application.hex --Intel --Output combined.hex --Intel
C:\DEV\ARM\srec_cat.exe application.hex --Intel --offset -0x5000 --Output application.bin --Binary
lock
Искать по ветке где-то уже писал, думаю разберешься без коментариев:

C:\Keil\ARM\BIN30\fromelf.exe --bin -o ".\Obj\Mouse.bin" ".\Obj\Mouse.axf"

На рисунке куда и что писать, удачи.
toweroff
Лучше, наверное, в эту тему

После комеиляции размер кода 9056, размер BIN - 10772
Что туда еще напихалось?

Пользовал fromelf
aaarrr
map приложите.
toweroff
Цитата(aaarrr @ Jul 31 2011, 22:49) *
map приложите.


ну как всегда, Вы правы

код-то кодом, но цельный константный массив был объявлен как не константный, поэтому помещен в RW sm.gif

Спасибо!
yagorik
Цитата(HARMHARM @ Jun 6 2008, 22:23) *
Я пользуюсь srecord. Очень мощная штука, все умеет что надо. HEX-файлы после нее едят все.
Пример скрипта для склеивания бутлоадера с приложением с вставкой CRC. При этом формируется дополнительный бинарник для шифрования (тоже с CRC).

Код
C:\DEV\ARM\srec_cat.exe Application\application.hex --Intel --l-e-crc32 --max Application\application.hex --Intel --Output application.hex --Intel
C:\DEV\ARM\srec_cat.exe Bootloader\bootloader.hex --Intel --Output bootloader.hex --Intel
C:\DEV\ARM\srec_cat.exe bootloader.hex --Intel --fill 0xFF 0x0 0x5000 application.hex --Intel --Output combined.hex --Intel
C:\DEV\ARM\srec_cat.exe application.hex --Intel --offset -0x5000 --Output application.bin --Binary

Не проконсультируете по Srecord. Мне нужно подсчитать СRC16 hex-файла к примеру от нуля до адреса DDFD(включительно) и записать контрольную сумму по адресу DDFE. Какой должна быть строка вызова Srecord. И чем будут отличаться строки для вызова CRC16 CCITT и XMODEM?
esaulenka
На правах рекламы - вызов SRecord для подсчёта контрольной суммы векторов прерываний. Алгоритм - сумма int-ов по смещениям 0..0x20 должна быть равна нулю. Контрольная сумма записывается по адресу 0x14. Дальше "пристыковывается" остальной файл без изменений.
Под Ваши алгоритмы переделывайте самостоятельно - надо "растянуть" или обрезать файл (смотря по тому, что приходит от линкера) и подобрать правильный ключ для контрольной суммы.

Код
echo add arm core vectors checksum
srec_cat ^
         %File%.bin -binary -crop 0x00 0x14 0x18 0x20 -LECN 0x14 4 4 ^
         %File%.bin -binary -crop 0x20 -max %File%.bin -binary ^
         -o %File%.bin -binary


PS ccitt / xmodem, насколько я понимаю, различаются полиномами.
KnightIgor
Цитата(toweroff @ Jul 31 2011, 19:28) *
После комеиляции размер кода 9056, размер BIN - 10772
Что туда еще напихалось?

Пользовал fromelf

Константы для инициализация переменных в операторах типа int A = 35; и т.п.
scifi
Цитата(yagorik @ Feb 8 2012, 18:17) *
Не проконсультируете по Srecord. Мне нужно подсчитать СRC16 hex-файла к примеру от нуля до адреса DDFD(включительно) и записать контрольную сумму по адресу DDFE. Какой должна быть строка вызова Srecord. И чем будут отличаться строки для вызова CRC16 CCITT и XMODEM?

Пожалуйста:
Код
srec_cat input.hex -i -f 0xFF 0 0xDDFE -lecrc16 0xDDFE -ccitt -o output.hex -i

Возможны варианты: -lecrc16 вставляет little endian CRC, а -becrc16 вставляет big endian CRC; -ccitt можно заменить на -xmodem.
Вообще-то там есть руководство. Но программа настолько универсальная, что руководство несколько сложное для новичков.
yagorik
Цитата(scifi @ Feb 9 2012, 11:29) *
Пожалуйста:
Код
srec_cat input.hex -i -f 0xFF 0 0xDDFE -lecrc16 0xDDFE -ccitt -o output.hex -i

Возможны варианты: -lecrc16 вставляет little endian CRC, а -becrc16 вставляет big endian CRC; -ccitt можно заменить на -xmodem.
Вообще-то там есть руководство. Но программа настолько универсальная, что руководство несколько сложное для новичков.

Выдаёт вот что:
Код
srec_cat: input.hex: 4097: contradictory 0000DDFE value (previous = 31, this one = FF)

в приложенном файле hex
MiklPolikov
Много лет назад получалось, а сейчас не могу вспомнить как.

Подскажите, что я делаю не так :


0)Микроконтроллер AT91SAM7S64, кварц 18.432МГц
1)Подтягиваю ногу TST к питанию
2)Включаю питание микроконтроллера
3)Снимаю низкий уровень с reset (запускаю микроконтроллер)
4)Снимаю высокий уровень с TST
5)Втыкаю разъём в USB - и Windows находит USB devise USB\VID_03EB&PID_6124\5&20B1BB6F&0&2

6)Установил драйвер SAM-BA_CDC.zip взятый вот с этой страницы http://www.atmel.com/tools/SAM7S-EK.aspx . Хотя нам написано что он для Vista , а у меня XP
В списке устройств появился AT91 USB to serial converter COM4

7)Запускаю SAB-BA , появляется маленькое окошко в котром я выбираю COM4 и AT91SAM7S64
Жму Connect, окошко исчезает и больше ничего не происходит.
8)Если повторить п7) ещё раз, вылезет ошибка Error in Startup Scriph
DmitryM
Цитата(MiklPolikov @ Mar 1 2012, 07:45) *
7)Запускаю SAB-BA , появляется маленькое окошко в котром я выбираю COM4 и AT91SAM7S64
Жму Connect, окошко исчезает и больше ничего не происходит.
8)Если повторить п7) ещё раз, вылезет ошибка Error in Startup Scriph

Драйвера идут в составе Sam-Ba, для версий Sam-Ba они свои, например, Sam-Ba 2.11 использует стандартный usbser.sys. Посмотрите папку в которой установлена Sam-Ba, там будут и драйвера.
MiklPolikov
Цитата(DmitryM @ Mar 1 2012, 09:01) *
Драйвера идут в составе Sam-Ba, для версий Sam-Ba они свои, например, Sam-Ba 2.11 использует стандартный usbser.sys. Посмотрите папку в которой установлена Sam-Ba, там будут и драйвера.


Установил драйвер из папки SAM-BA.
Теперь та же ошибка вылезает с первого раза и сразу.
Проверил на своей плата, и на демо плате LDM-SAM7S128 , результат один.

Кто-нибудь знает в чём ошибка?
MiklPolikov


О чудо ! У меня получилось ! Сейчас составлю подробную инструкцию от начала и до конца, и выложу здесь.
MiklPolikov
Сколько не искал, ни где не нашёл полной инструкции по прошивке через SAM-BA , от и до.
Поэтому пишу подробно здесь. Думаю кому-нибудь будет полезно.

Делал на компьютере в windows XP и на ноутбуке в windows 7. Действия везде одинаковые, и ошибки при неправельных действиях то
же одинаковые.

1) Что есть :
1.1 Keil
1.2 Плата с таким функционалом:
At91SAM7S64
Кварц 18.432МГц(с другим работать не будет)
RC ячейчка на ноге PLL , такая же как в документации на отладочную плату LDM-SAM7S(без неё работать не будет)
USB pull-up резистор подключен к +питания (хотя в документации на процессор сказано, что должен быть подключен к PA16)
Джамперы на ногах ERASE , TST , которми можно подтянуть ноги к +питания

2) Генерация файла BIN
В KEIL в опциях проекта вкладка User , строка Run User Program After Build , Run #1 пишу
C:\Keil\ARM\BIN40\fromelf.exe --bin -o "keil2.bin" "keil2.axf"
кде keil2 - название проекта, соответственно keil2.axf название файла, котрый после компиляции
появляется в папке проекта и из которого fromelf.exe делает keil2.bin
Левее строчки нужно почтавить галочку.

3) Установка SAM_BA
Взял SAM-BA 2.11 for Windows с сайта Атмела http://www.atmel.com/tools/SAM7S-EK.aspx

4) Запуск загрузчика в процессоре
Включаю питание процессора
Жду >10c
Замыкаю джампер ERASE
Жду >10c
Размыкаю джампер ERASE
Жду>10c
Отключаю питание
жду >10c
Включаю питание
Жду>10c
Замыкаю джампер TST
Жду >10c
Размыкаю джампер TST
Жду >10c
Отключаю питание
жду >10c
Включаю питание
Жду>10c
Втыкаю разъём в USB . Компьютер находит новое устройство.

5) Установка драйвера
Драйвер нужно выбрать вручную. Он в той папке, куда установился SAM-BA
C:\Program Files\ATMEL Corporation\sam-ba_2.11\drv

6)Програмирование
6.1 Повторяю действия П4) . Их нужно повторить перед каждым новым запуском SAM-BA, даже если устройсто есть в списке устройств и как
будто работает.
(как правило достаточно только сбросить питание и передёрнуть USB разъём)
У меня на компьютере работает только если подключать к usb контроллеру, а если к тем usb разъёмам что на материнской плате
то нет.
6.2 Жму CTRL+ALT+DEL
В диспетчере задач ищу sam-ba.exe . Если нахожу- закрываю.
Почему-то sam-ba.exe иногда остаётся в списке задач после предыдущего программирования и закрытия.
И если она там осталась, новая попытка программирование не удастся. При нажатии connect вылезет ошибка Error in Startup Scriph
Наблюдаю это и в XP на компьютере и в 7 на ноутбуке.
6.3 Запускаю SAM-BA
В появившемся маленьком окне выбираю AT91SAM7S64 , USBserial/com и жму connect
6.4 В открывшемся большом окне, в двух одинаковых местах указываю
Adress 0x100000
Size 0x10000
Левее кнопки Sent file выбираю свой бинарник, и жму Sent file .
6.5 Во время прошивки вылезает два сообщения, в обеих жму ОК
После прошивки жму Compare send file with memory
Если сообщений об ошибке не вылезло-прошивка удалась.
aaarrr
Цитата(MiklPolikov @ Mar 2 2012, 02:41) *
4) Запуск загрузчика в процессоре

Что-то в этом пункте не так: во-первых, ждать больше 10 секунд нужно только когда установлен джампер TST; во-вторых, устанавливается он ДО включения питания (по крайней мере на старых ревизиях кристалла его установка после включения уже ни на что не влияет).
MiklPolikov
Цитата(aaarrr @ Mar 2 2012, 02:43) *
Что-то в этом пункте не так: во-первых, ждать больше 10 секунд нужно только когда установлен джампер TST; во-вторых, устанавливается он ДО включения питания (по крайней мере на старых ревизиях кристалла его установка после включения уже ни на что не влияет).

Я написал как это получается делать у меня.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.