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

 
 
 
Reply to this topicStart new topic
> Вопрос по структуре hex файла
DeC_NN
сообщение Mar 14 2013, 12:22
Сообщение #1


Участник
*

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



Пишу bootloader для xmega - заливка hex файла в контроллер посредством usart.
Собственно уже написал и даже работает. Все hex файлы прошивок на которых произвожу проверку работоспособности имеют структуру в которой адреса расположены последовательно, т.е. нулевая страница, затем первая, и т.д. Собственно под это заточен мой бутлоадер.
При этом задался вопросом - а не может ли после компиляции очередной программы сгенерироваться hex файл c разбросом страниц? Т.е. например такой файл в котором сначала идет часть адресов нулевой страницы, затем первая страница, вторая, а потом скажем еще часть адресов нулевой страницы. В этом случае по моему алгоритму бутлоадера первоначальные адреса для нулевой страницы я потеряю.
Подскажите могут формироваться такие hex файлы или мои опасения напрасны и адресация в файлах прошивок (скажем сгенераированных winavr) всегда идет последовательно?

Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Mar 14 2013, 12:35
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Такие файлы могут встретиться. Насчёт WINAVR не скажу.
Но в жизни видел.
Как и размер "страницы" - который не размер страницы, а просто количество байт с указанного адреса - тоже бывает разным. И адрес может быть не "круглым" числом.

Сообщение отредактировал Genadi Zawidowski - Mar 14 2013, 12:37
Go to the top of the page
 
+Quote Post
Арк К
сообщение Mar 14 2013, 13:59
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 8-05-08
Пользователь №: 37 363



Цитата(DeC_NN @ Mar 14 2013, 16:22) *
При этом задался вопросом - а не может ли после компиляции очередной программы сгенерироваться hex файл c разбросом страниц? Т.е. например такой файл в котором сначала идет часть адресов

Если флэш-память контроллера больше 64К, то в hex-файле будут включены специальные записи адреса сегмента памяти. Под сегментом здесь понимается кусок памяти в 64КБ. Это сделано потому, что в стандартных записях хекса адрес только двухбайтный.
А порядок следования записей хекса есть следствие работы линкера и вполне может быть так, что записи не всегда могут идти подряд. Поэтому, лучше следовать букве стандарта, если хотите, чтоб бутлодер понимал любые файлы, сгенерированные любым линковщиком
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Mar 14 2013, 14:06
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(DeC_NN @ Mar 14 2013, 15:22) *
При этом задался вопросом - а не может ли после компиляции очередной программы сгенерироваться hex файл c разбросом страниц? Т.е. например такой файл в котором сначала идет часть адресов нулевой страницы, затем первая страница, вторая, а потом скажем еще часть адресов нулевой страницы.


Подобный маразм врятли Вы получите. Но запросто можете получить такой вариант, когда не все строки будут содержать 16 байт полезных данных. Я видел как иар спокойно генерит такие файлы. Когдато для моего бутлоадера для мега128 подобные сокращённые строки стали камнем предкновения. Выход был найден - поставил галочку fill unused memory все файлы стали генерироваться без сокращённых строк. Ещё одна проблема касающаяся файлов с размером более 64к - это наличие команд переключения страниц памяти. После такой команды адресация обычно снова начинается с нуля.
Go to the top of the page
 
+Quote Post
DeC_NN
сообщение Mar 14 2013, 15:30
Сообщение #5


Участник
*

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



Цитата(mempfis_ @ Mar 14 2013, 18:06) *
Подобный маразм врятли Вы получите. Но запросто можете получить такой вариант, когда не все строки будут содержать 16 байт полезных данных. Я видел как иар спокойно генерит такие файлы. Когдато для моего бутлоадера для мега128 подобные сокращённые строки стали камнем предкновения. Выход был найден - поставил галочку fill unused memory все файлы стали генерироваться без сокращённых строк. Ещё одна проблема касающаяся файлов с размером более 64к - это наличие команд переключения страниц памяти. После такой команды адресация обычно снова начинается с нуля.


Сокращенные строки не проблема, у меня обрабатываются строки любой длины. Переключение сегментов тоже работает. А вот чего нет в моем бутлоадере - это защиты от таких хитрых хексов. Вот сколько не пробовал сейчас компилировать атмеловские исходники разного размера, все время на выходе получается правильный hex файл c последовательной адресацией, без возвратов.
Можно конечно сделать защиту от такого хитрого хекса, при возврате к уже записанной странице, сначала вычитывать ее, добавлять новые слова и снова записывать, но у меня память в области бута уже почти под завязку, боюсь этот код не влезет.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Mar 14 2013, 18:06
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(DeC_NN @ Mar 14 2013, 19:30) *
Можно конечно сделать защиту от такого хитрого хекса, при возврате к уже записанной странице, сначала вычитывать ее, добавлять новые слова и снова записывать, но у меня память в области бута уже почти под завязку, боюсь этот код не влезет.


Вы что на ходу пишите во флэш контроллера? Я бы для серийного устройства ни в коем случае не применял подобные методы. Как минимум сохранение в промежуточную память + файл должен содержать контрольную сумму + некий признак что эта прошивка именно для вашего устройства. И только когда примете весь файл, проверете его целостность и приналежность к вашему устройству, только тогда можно прошивать флэш. При таком варианте даже сбои питания не страшны.

Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 14 2013, 19:11
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(DeC_NN @ Mar 14 2013, 17:30) *
А вот чего нет в моем бутлоадере - это защиты от таких хитрых хексов.

Можно шить bin-файл. Размер записываемого блока тогда может быть кратен размеру страницы flash.
К тому же не нужно будет пребразовывать из хекса (место сэкономится) .
Go to the top of the page
 
+Quote Post
Арк К
сообщение Mar 15 2013, 05:07
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 8-05-08
Пользователь №: 37 363



Цитата(mempfis_ @ Mar 14 2013, 22:06) *
И только когда примете весь файл, проверете его целостность и приналежность к вашему устройству, только тогда можно прошивать флэш. При таком варианте даже сбои питания не страшны.

Это где же столько оперативки взять, чтоб всю флэш туда вместить?
Я, например, делаю так. hex-файл при помощи специально разработанной утилиты для PC компилируется в загрузочный файл с разбивкой на страницы с шифрованием (если требуется), туда добавляем информацию о принадлежности к устройству, CRC всей флэши и т.д. Затем, опять же при помощи спец утилиты, которая связывается с бутлодером контроллера и делает все необходимые проверки соответствия, содержимое флэши передаётся в контроллер постранично. Каждая страница идёт со своей собственной CRC16, проверяется бутлодером, им же расшифровывается и пишется во флэш. Другими словами, hex разбирается на большом компе, а пользователю отправляем только файл образа прошивки и маленькую утилитку.
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 15 2013, 05:18
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



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


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
DeC_NN
сообщение Mar 15 2013, 06:39
Сообщение #10


Участник
*

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



Цитата(ARV @ Mar 15 2013, 09:18) *
не встречал хексов с беспорядочным размещением блоков данных (хотя это допускается его структурой и "стандартом"), но сплошь и рядом бывают хексы, когда в них имеются "дыры", т.е. участки адресов, для которых данные не определены.


У меня собственно откуда все эти подозрения возникли. Я такие хексы видел для 51-го контроллера. Вот прицепил файл с примером (поставил там комментарии, чтобы не искать). Это hex сгенерированный кейлом под силабсовский контроллер C8051F340. Правда там в отличии от avr байты пишутся в память по одному, а целиком происходит только стирание страницы.
Для avr пока таких файлов не наблюдал.
Прикрепленные файлы
Прикрепленный файл  hex_exmpl.zip ( 13.59 килобайт ) Кол-во скачиваний: 15
 
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Mar 15 2013, 08:06
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(Арк К @ Mar 15 2013, 09:07) *
Это где же столько оперативки взять, чтоб всю флэш туда вместить?


А кто говорит про оперативку? В моих серийных устройствах, которые могут обновляться дистанционно, стоит flash-память для хранения данных и обновления прошивок. Процедура обновления прошивки выполняется только через внешнюю память - сначала файл прошивки сохраняется во внешнюю flash, потом проверяется целостность файла, потом принадлежность к данному устройству. Если всё ок, то загрузчик выполняет обновление ПО. Если какой-либо сбой в результате которого не удалось обновить ПО (например незапланированная перезагрузка) то при следующем запуске загрузчика он обнаружит обновление во flash и снова попытается обновить ПО. Этот процесс будет повторяться до тех пор пока прошивка не обновится. Дополнительно имеется возможность отката на старую версию прошивки.
Как показала практика серийных устройств возможность надёжной дистанционной перепрошивки невероятно полезная вещь.

Цитата(Арк К @ Mar 15 2013, 09:07) *
... Затем, опять же при помощи спец утилиты, которая связывается с бутлодером контроллера и делает все необходимые проверки соответствия, содержимое флэши передаётся в контроллер постранично. Каждая страница идёт со своей собственной CRC16, проверяется бутлодером, им же расшифровывается и пишется во флэш. Другими словами, hex разбирается на большом компе, а пользователю отправляем только файл образа прошивки и маленькую утилитку.


Это по сути ничем не отличается от перепрошивки на месте обычным программатором. Вы даёте возможность пользователю самостоятельно обновить ПО. Даже если обновление ПО не удастся он всегда может самостоятельно заново попытаться прошить устройство.
Если у топикстартера нет необходимости удалённого обновления ПО то подобный метод вполне может подойти. В одном из моих первых устройств с загрузчико atmega128 на ходу успевала принимать hex-файл, выделять страницы и прошивать flash контроллера. Но я всегда хотел чтобы ктото написал утилиту для PC которая могла-бы разбивать бинарный файл и по принципу запрос-ответ отправлять данные постранично.


Go to the top of the page
 
+Quote Post
Арк К
сообщение Mar 15 2013, 13:38
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 8-05-08
Пользователь №: 37 363



Цитата(mempfis_ @ Mar 15 2013, 12:06) *
В моих серийных устройствах, которые могут обновляться дистанционно, стоит flash-память для хранения данных и обновления прошивок.

Согласен, такой подход выгоден для удалённых и/или недоступных устройств (марсоход sm.gif) в таких случаях на доп. флэш-памяти нельзя экономить
Цитата(mempfis_ @ Mar 15 2013, 12:06) *
Это по сути ничем не отличается от перепрошивки на месте обычным программатором. Вы даёте возможность пользователю самостоятельно обновить ПО. Даже если обновление ПО не удастся он всегда может самостоятельно заново попытаться прошить устройство.

Ну, не совсем. Не нужно вскрывать корпус, пользователи, как правило, ничего не знают ни о каких программаторах. Максимум, что они могут - это запустить утилитку на компе, который и так всегда подсоединён к устройству. Если файл зашифрован, то сильно снижается вероятность кражи прошивки. Если прошивка не удалась, в моём варианте, означает, что либо слетел бутлодер, либо само железо, но тут уже "по телефону" ничем не помочь.
Go to the top of the page
 
+Quote Post
alag57
сообщение Mar 15 2013, 14:53
Сообщение #13


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

Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355



Цитата(DeC_NN @ Mar 15 2013, 12:39) *
Для avr пока таких файлов не наблюдал.

Вот, посмотрите. Мега162. Во второй строке - адрес устройства. Надо убрать расширение rar.

Прикрепленные файлы
Прикрепленный файл  1.hex.rar ( 2.75 килобайт ) Кол-во скачиваний: 17
 
Go to the top of the page
 
+Quote Post
DeC_NN
сообщение Mar 15 2013, 16:11
Сообщение #14


Участник
*

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



Цитата(alag57 @ Mar 15 2013, 18:53) *
Вот, посмотрите. Мега162. Во второй строке - адрес устройства. Надо убрать расширение rar.

Так в этом файле я никакого "криминала" не вижу. Все в порядке. Вот если вторую и третью строки переставить местами, тогда да - уже проблема.
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 15 2013, 17:48
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



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


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post

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

 


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


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