Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC2478 IAP
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
lecko
Всем привет!

Имеется устройство на основе LPC2478, которое, в том числе, умеет подключаться как Mass Storage Device и обрабатывать произвольные SCSI-команды с компьютера. Возникла необходимость сделать обновление прошивки через USB. Я узнал, что контроллер поддерживает IAP-функции, позволяющие модифицировать содержимое встроенной памяти. Таким образом, предполагается создать код, который будет либо подгружать прошивку, либо передавать на нее управление. Среда разработки - Keil uVision 4.
Вопросы:
1) как корректно интрепретировать HEХ-файл, создаваемый кейлом? где про это можно прочитать?
2) Как правильно разместить прошивку в памяти?
3) У кого нибудь есть примеры кода с подобным функционалом?
4) Можно ли (если да, то как) скомпилировать кейлом код, который корректно разместится НЕ по нулевому адресу?

Полдня гуглил, ничего не нашел sad.gif

Заранее спасибо!
toweroff
В скаттере создать область в нужном месте
В коде обозначить, что это все дело должно лежать в этой области
По какому-то фиксированному адресу расположить константу, в которой на этапе компиляции ляжет Entry Point
Из бута, который будет передавать управление, прочитать эту константу и прыгнуть по расположенному в ней адресу

ну как-то так
skripach
Всё писано на этом форуме много раз.
Сергей Борщ
QUOTE (skripach @ Nov 18 2011, 14:44) *
Всё писано на этом форуме много раз.

Афигенно информативно. Ну так приведите хотя бы несколько ключевых слов, поиск по которым выведет вопрошающего на нужные обсуждения. Но предварительно потрудитесь убедиться, что поиск по этим ключевым словам дает необходимые результаты. А пока будете проверять поиск - сможете скопировать в ответ и несколько прямых ссылок. Может быть тема и обсуждалась, но прочитать весь форум прежде чем задать вопрос нереально физически, а чтобы воспользоваться поиском надо знать хотя бы часть ответа - ключевые слова.

Для lecko: формат HEX-файла един для всех, погуглите на тему "Intel HEX". По вопросам 2 и 4 читайте документацию к компилятору, ключевое слово scatter (управляющий файл для линкера). По вопросу 3 - у меня есть, но не под кейл и не под 2478, хотя и под LPC. А у кейла в комплекте разве нет подобных примеров?
skripach
Цитата
Афигенно информативно.
более чем, все прошли путь ТС, ну или почти все.
Цитата
Ну так приведите хотя бы несколько ключевых слов

В первом посте есть всё что нужно:
HEХ-файл - первая ссылка из гугла ответ на первый вопрос http://ru.wikipedia.org/wiki/Intel_HEX
IAP* - поиск по форуму даст ответы на след. вопросы.

Цитата
Полдня гуглил, ничего не нашел sad.gif

думаю не искал.
toweroff
Цитата(Сергей Борщ @ Nov 19 2011, 00:43) *
А у кейла в комплекте разве нет подобных примеров?

скорее, не у Keil, а у NXP, в примерах вторичного бутлоадера
Сергей Борщ
QUOTE (skripach @ Nov 19 2011, 14:57) *
более чем, все прошли путь ТС, ну или почти все.
И видимо именно skripach писал на форуме на эту тему много раз и ему лень написать еще раз (что можно понять)? Или все же не skripach, просто он проходил мимо и не упустил случая пнуть новенького?
skripach
Цитата
И видимо именно skripach писал на форуме на эту тему много раз и ему лень написать еще раз (что можно понять)?

Писал не я, я читал/искал, поэтому знаю что ответы на вопросы ТС имеются. Сам недавно писал USB-загрузчик для lpc2478 правда host и было не лень помочь ТС но
Цитата
Полдня гуглил, ничего не нашел sad.gif

отбило желание помочь.
Цитата
Или все же не skripach, просто он проходил мимо и не упустил случая пнуть новенького?

Жаль если вам так показалось, не в моих принципах пинать кого бы то ни было и уж тем более не за что.
lecko
И еще раз всем привет!

Собственно, возник следующий вопрос. Прошивка по USB успешно выполняется. То есть почти успешно...
Уточню детали реализации.
Вся память с помощью scatter-файла разбита на 2 региона: 0x0-0x60000 и 0x60000-0x80000. В первом содержится, собственно, обновляемый код, а во втором - код, вызывающий IAP-функции и отключающий прерывания на время их работы. Основной код (в первом регионе) получает данные по USB и записывает их в RAM, а затем, опять же по команде с USB, управление передается на код, расположенный во второй области памяти, осуществляющий перепрошивку. После перепрошивки предполагается аппаратная перезагрузка.

Утилита для перепрошивки по СОМ (FlashMagic) сравнивает содержимое памяти с исходным хекс файлом и говорит что все ок. Однако контроллер до следующей перепрошивки по кому не работает. Вопрос: почему? Не надо ли помимо собственно перепрошивки дополнительно изменять какие-то служебные области? Или в чем еще может быть дело?

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