|
|
  |
Самопрограммирование ARM, Прошивка FLASH |
|
|
|
Apr 14 2005, 14:10
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(Popkov @ Apr 14 2005, 14:41) Народ, вот такой вопрос: сейчас хочу вплотную занятся ARM, есть два конкурента AT91(на FLASH) и LPC. Но вот есть такая задача (уже реализованная на AVR)мне нужно чтобы при старте запускался мой загрузчик который по заданному мной каналу связи мог бы перепрошивать основное приложение и потом передавать ему управление. Дак вот есть ли в этих ARM возможность самим себя перепрошить, без замыкания внешних пинов, а просто взять и прошить определенную область памяти? Ну и соответственно есть ли поддержка механихма передачи управления на польховательский загрузчик, а из него в приложение? Заранее всем спасибо, Михаил Насчет AT91 ничего сказать не могу, но для LPC можно сделать так: делается прошивка для него, которая стартует первой и с помощью IAP (In application programming) прошивает основное приложение в определенную область флэша, а после этого передает на него управление. IAP работает без замыкания всяких пинов. А сам загрузчик у LPC так просто не прошьешь, да и не нужно это, поскольку есть возможность реализовать вышеописанный алгоритм.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Apr 15 2005, 09:51
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(Popkov @ Apr 15 2005, 11:44) А можно по конкретнее ибо вот есть конкретная задача: при старте нужно чтобы закпускался загрузчик(с поддержкой некоторых прерываний), потом он по команде пришедшей по CAN (или другому итерфейсу) передает управление приложению, или перепрошивает это приложение. Мне тут видится следующие вопросы: 1. Как происходит разделение векторов прерываний между загрузчиком и приложением У LPC есть маленькая таблица векторов прерываний, которая может располагаться либо в начале Flash-памяти, либо в начале SRAM. Зависит ее расположение от настроек внутренних регистров процессора. Таким образом, можно разместить эту таблицу памяти и на ходу менять ее содержимое - какие-то вектора (например, FIQ) можно обрабатывать в бутлоадере, а другие (IRQ) в приложении. Цитата 2. Для прошивки приложения мне нужно выполнятся в какой то специальной области памяти? Скажем в SRAM? Т.е. я должен сначало переписать функцию прошивки в SRAM, а потом передать ей управление? Но в этом случае как быть с векторами прерываний, их то я не могу переписать куда то. Нет, для прошивки можно просто исполняться из Flash'a. Хотя, если хочется, то можно исполнять и из SRAM, но стартовать все-равно придется из Flash'a. А вектора прерываний, как я уже сказал, можно переписать.  Цитата 3. Как происходит передача управления на загрузчик (при старте), на приложение при необходимости, и из приложения в загрузчик. При старте LPC родной загрузчик проверяет содержимое таблицы векторов исключений(прерываний) и если находит там по смещению 0x14 двоичное дополнение суммы всех остальных векторов, то передает управление по адресу 0x0 (вектор ресета). Далее стартует программа во Flash'e, которая может загрузить другое приложение и передать управление в ту область, куда она его загрузила. Цитата Люди дайте тогда хоть пример какой нить, или подетальней распишите как это все происходит. С уважением, Михаил Рекомендую скачать описание по интересующему процессору и почитать его. Там довольно популярно все написано.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Mar 21 2008, 12:25
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(Popkov @ Apr 14 2005, 14:41)  Народ, вот такой вопрос: сейчас хочу вплотную занятся ARM, есть два конкурента AT91(на FLASH) и LPC. Но вот есть такая задача (уже реализованная на AVR)мне нужно чтобы при старте запускался мой загрузчик который по заданному мной каналу связи мог бы перепрошивать основное приложение и потом передавать ему управление. Дак вот есть ли в этих ARM возможность самим себя перепрошить, без замыкания внешних пинов, а просто взять и прошить определенную область памяти? Ну и соответственно есть ли поддержка механихма передачи управления на польховательский загрузчик, а из него в приложение?
Заранее всем спасибо,
Михаил Поставьте IAR например 5.11. Если поставите по умолчанию, загляните потом в папку: C:\Program Files\IAR Systems\Embedded Workbench 5.0 Kickstart\ARM\src\flashloader\ Там есть примеры загрузчиков практически под все процессоры.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Mar 21 2008, 19:17
|

Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241

|
Цитата(makc @ Apr 15 2005, 12:51)  У LPC есть маленькая таблица векторов прерываний, которая может располагаться либо в начале Flash-памяти, либо в начале SRAM. Не у LPC, а у арма. Я кажется писал уже, лучше поместить в FLASH разумный обработчик IRQ и FIQ, на UNDEF и ABORT реализовать что-то вроде вываливания списка регистров и содержимого стека в последовательный порт с перезапуском. От программы остаётся только програмирование контроллера прерываний (речь о AT91). Почему так: РАЗМЕЩЕНИЕ ВЕКТОРОВ В RAM ДОСТАТОЧНО ДУРНАЯ ИДЕЯ. Ибо затереть что-то в той области куда указывает NULL в силу разных программных глюков -- раз плюнуть. И дальше неописуемый и трудно диагностируемый глюкодром. А так оно в аборт вывалится, жалобно пропищит, поморгает диодиком и перезапустится, если как я говорю делать.
--------------------
[ZX]
|
|
|
|
|
Mar 24 2008, 07:06
|
Участник

Группа: Новичок
Сообщений: 15
Регистрация: 28-08-07
Пользователь №: 30 105

|
Можно посмотреть на сайте www tnkernel com. на его основе я делал себе обновлялку с sd карты.
Сообщение отредактировал Shkn - Mar 24 2008, 07:07
|
|
|
|
|
Mar 24 2008, 08:12
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Kirill Frolov @ Mar 21 2008, 22:17)  ..писал уже, лучше поместить в FLASH разумный обработчик IRQ и FIQ, А я там-же "оценил" такой (c ненужной промежуточной оберткой) подход к делу. Цитата ...на UNDEF и ABORT реализовать что-то вроде вываливания списка регистров и содержимого стека в последовательный порт с перезапуском. В подавляющем большинстве случаев это хороший вариант для bootloader. Цитата Почему так: РАЗМЕЩЕНИЕ ВЕКТОРОВ В RAM ДОСТАТОЧНО ДУРНАЯ ИДЕЯ. Не лучшая, это точно. Цитата Ибо затереть что-то в той области куда указывает NULL в силу разных программных глюков -- раз плюнуть. Затереть вероятно и RAM тратится впустую, только вот на РЕМАПИРОВАНУЮ таблицу NULL не указывает.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 24 2008, 15:10
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(meister @ Mar 24 2008, 18:04)  И в начале накроется медным тазом. Bootloader сам себя не перешивает. И посему останется в неприкосновенности. Для пущей надежности можно и его область прикрыть от записи так-же, как и штатный. Цитата чтобы ISP запускал только "приложение".... Приложения, однако, запускает/не запускает тот самый bootloader, который остается целым.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 24 2008, 15:15
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(meister @ Mar 24 2008, 18:04)  Если писать в конец и делать нестандартным способом - можно "не накрыться". Шансы, естественно есть некоторые "выжить". Но зачем играть в рулетку без всякой на то надобности. Цитата(meister @ Mar 24 2008, 18:11)  Это если ему повезет записаться целиком. Повторяю последний раз по буквам - ОН НЕ ПЕРЕЗАПИСЫВАЕТСЯ и по этой причине ему везет всегда.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|