|
|
  |
Вопрос по структуре hex файла |
|
|
|
Mar 14 2013, 12:22
|
Участник

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

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

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

|
Цитата(DeC_NN @ Mar 14 2013, 16:22)  При этом задался вопросом - а не может ли после компиляции очередной программы сгенерироваться hex файл c разбросом страниц? Т.е. например такой файл в котором сначала идет часть адресов Если флэш-память контроллера больше 64К, то в hex-файле будут включены специальные записи адреса сегмента памяти. Под сегментом здесь понимается кусок памяти в 64КБ. Это сделано потому, что в стандартных записях хекса адрес только двухбайтный. А порядок следования записей хекса есть следствие работы линкера и вполне может быть так, что записи не всегда могут идти подряд. Поэтому, лучше следовать букве стандарта, если хотите, чтоб бутлодер понимал любые файлы, сгенерированные любым линковщиком
|
|
|
|
|
Mar 14 2013, 15:30
|
Участник

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

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

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

|
Цитата(mempfis_ @ Mar 14 2013, 22:06)  И только когда примете весь файл, проверете его целостность и приналежность к вашему устройству, только тогда можно прошивать флэш. При таком варианте даже сбои питания не страшны. Это где же столько оперативки взять, чтоб всю флэш туда вместить? Я, например, делаю так. hex-файл при помощи специально разработанной утилиты для PC компилируется в загрузочный файл с разбивкой на страницы с шифрованием (если требуется), туда добавляем информацию о принадлежности к устройству, CRC всей флэши и т.д. Затем, опять же при помощи спец утилиты, которая связывается с бутлодером контроллера и делает все необходимые проверки соответствия, содержимое флэши передаётся в контроллер постранично. Каждая страница идёт со своей собственной CRC16, проверяется бутлодером, им же расшифровывается и пишется во флэш. Другими словами, hex разбирается на большом компе, а пользователю отправляем только файл образа прошивки и маленькую утилитку.
|
|
|
|
|
Mar 15 2013, 06:39
|
Участник

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

|
Цитата(ARV @ Mar 15 2013, 09:18)  не встречал хексов с беспорядочным размещением блоков данных (хотя это допускается его структурой и "стандартом"), но сплошь и рядом бывают хексы, когда в них имеются "дыры", т.е. участки адресов, для которых данные не определены. У меня собственно откуда все эти подозрения возникли. Я такие хексы видел для 51-го контроллера. Вот прицепил файл с примером (поставил там комментарии, чтобы не искать). Это hex сгенерированный кейлом под силабсовский контроллер C8051F340. Правда там в отличии от avr байты пишутся в память по одному, а целиком происходит только стирание страницы. Для avr пока таких файлов не наблюдал.
|
|
|
|
|
Mar 15 2013, 08:06
|

Профессионал
    
Группа: Свой
Сообщений: 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 которая могла-бы разбивать бинарный файл и по принципу запрос-ответ отправлять данные постранично.
|
|
|
|
|
Mar 15 2013, 13:38
|
Участник

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

|
Цитата(mempfis_ @ Mar 15 2013, 12:06)  В моих серийных устройствах, которые могут обновляться дистанционно, стоит flash-память для хранения данных и обновления прошивок. Согласен, такой подход выгоден для удалённых и/или недоступных устройств (марсоход  ) в таких случаях на доп. флэш-памяти нельзя экономить Цитата(mempfis_ @ Mar 15 2013, 12:06)  Это по сути ничем не отличается от перепрошивки на месте обычным программатором. Вы даёте возможность пользователю самостоятельно обновить ПО. Даже если обновление ПО не удастся он всегда может самостоятельно заново попытаться прошить устройство. Ну, не совсем. Не нужно вскрывать корпус, пользователи, как правило, ничего не знают ни о каких программаторах. Максимум, что они могут - это запустить утилитку на компе, который и так всегда подсоединён к устройству. Если файл зашифрован, то сильно снижается вероятность кражи прошивки. Если прошивка не удалась, в моём варианте, означает, что либо слетел бутлодер, либо само железо, но тут уже "по телефону" ничем не помочь.
|
|
|
|
|
Mar 15 2013, 14:53
|
Частый гость
 
Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355

|
Цитата(DeC_NN @ Mar 15 2013, 12:39)  Для avr пока таких файлов не наблюдал. Вот, посмотрите. Мега162. Во второй строке - адрес устройства. Надо убрать расширение rar.
Прикрепленные файлы
1.hex.rar ( 2.75 килобайт )
Кол-во скачиваний: 17
|
|
|
|
|
Mar 15 2013, 16:11
|
Участник

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

|
Цитата(alag57 @ Mar 15 2013, 18:53)  Вот, посмотрите. Мега162. Во второй строке - адрес устройства. Надо убрать расширение rar. Так в этом файле я никакого "криминала" не вижу. Все в порядке. Вот если вторую и третью строки переставить местами, тогда да - уже проблема.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|