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

 
 
 
Reply to this topicStart new topic
> LPC2478 IAP
lecko
сообщение Nov 17 2011, 15:54
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 22-08-11
Пользователь №: 66 820



Всем привет!

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

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

Заранее спасибо!

Сообщение отредактировал lecko - Nov 17 2011, 15:57
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 18 2011, 07:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

ну как-то так
Go to the top of the page
 
+Quote Post
skripach
сообщение Nov 18 2011, 11:44
Сообщение #3


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Всё писано на этом форуме много раз.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 18 2011, 20:43
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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

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

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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
skripach
сообщение Nov 19 2011, 11:57
Сообщение #5


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
Афигенно информативно.
более чем, все прошли путь ТС, ну или почти все.
Цитата
Ну так приведите хотя бы несколько ключевых слов

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

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

думаю не искал.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 19 2011, 17:52
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

скорее, не у Keil, а у NXP, в примерах вторичного бутлоадера
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 19 2011, 20:49
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
skripach
сообщение Nov 19 2011, 22:08
Сообщение #8


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
И видимо именно skripach писал на форуме на эту тему много раз и ему лень написать еще раз (что можно понять)?

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

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

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


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
lecko
сообщение Dec 26 2011, 09:51
Сообщение #9





Группа: Участник
Сообщений: 10
Регистрация: 22-08-11
Пользователь №: 66 820



И еще раз всем привет!

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

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



Сообщение отредактировал lecko - Dec 26 2011, 13:47
Go to the top of the page
 
+Quote Post

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

 


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


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