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

 
 
> Самопрограммирование ARM, Прошивка FLASH
mpo
сообщение Apr 14 2005, 11:41
Сообщение #1


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

Группа: Свой
Сообщений: 92
Регистрация: 1-02-05
Пользователь №: 2 343



Народ, вот такой вопрос:
сейчас хочу вплотную занятся ARM, есть два конкурента AT91(на FLASH) и LPC. Но вот есть такая задача (уже реализованная на AVR)мне нужно чтобы при старте запускался мой загрузчик который по заданному мной каналу связи мог бы перепрошивать основное приложение и потом передавать ему управление. Дак вот есть ли в этих ARM возможность самим себя перепрошить, без замыкания внешних пинов, а просто взять и прошить определенную область памяти? Ну и соответственно есть ли поддержка механихма передачи управления на польховательский загрузчик, а из него в приложение?

Заранее всем спасибо,

Михаил
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mpo
сообщение Apr 15 2005, 08:44
Сообщение #2


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

Группа: Свой
Сообщений: 92
Регистрация: 1-02-05
Пользователь №: 2 343



А можно по конкретнее ибо вот
есть конкретная задача: при старте нужно чтобы закпускался загрузчик(с поддержкой некоторых прерываний), потом он по команде пришедшей по CAN (или другому итерфейсу) передает управление приложению, или перепрошивает это приложение. Мне тут видится следующие вопросы:
1. Как происходит разделение векторов прерываний между загрузчиком и приложением
2. Для прошивки приложения мне нужно выполнятся в какой то специальной области памяти? Скажем в SRAM? Т.е. я должен сначало переписать функцию прошивки в SRAM, а потом передать ей управление? Но в этом случае как быть с векторами прерываний, их то я не могу переписать куда то.
3. Как происходит передача управления на загрузчик (при старте), на приложение при необходимости, и из приложения в загрузчик.

Люди дайте тогда хоть пример какой нить, или подетальней распишите как это все происходит.

С уважением,

Михаил
Go to the top of the page
 
+Quote Post
makc
сообщение Apr 15 2005, 09:51
Сообщение #3


Гуру
******

Группа: Админы
Сообщений: 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. А вектора прерываний, как я уже сказал, можно переписать. smile.gif

Цитата
3. Как происходит передача управления на загрузчик (при старте), на приложение при необходимости, и из приложения в загрузчик.


При старте LPC родной загрузчик проверяет содержимое таблицы векторов исключений(прерываний) и если находит там по смещению 0x14 двоичное дополнение суммы всех остальных векторов, то передает управление по адресу 0x0 (вектор ресета). Далее стартует программа во Flash'e, которая может загрузить другое приложение и передать управление в ту область, куда она его загрузила.

Цитата
Люди дайте тогда хоть пример какой нить, или подетальней распишите как это все происходит.

С уважением,

Михаил
*


Рекомендую скачать описание по интересующему процессору и почитать его. Там довольно популярно все написано. smile.gif


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
Kirill Frolov
сообщение Mar 21 2008, 19:17
Сообщение #4


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

Группа: Новичок
Сообщений: 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]
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 24 2008, 08:12
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Step_ARM
сообщение Nov 28 2009, 10:20
Сообщение #6


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

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



Цитата(zltigo @ Mar 24 2008, 11:12) *
Не лучшая, это точно.

Затереть вероятно и RAM тратится впустую, только вот на РЕМАПИРОВАНУЮ таблицу NULL не указывает.

RAM тратится??? :-))) При объемах 32кБ, например, что значат 64 байта???
Не надо грешить против истины :-)))
Размещение в RAM иногда наилучшее решение, особенно когда ресурсов немного.

Приведу пример. Записываешь маленький загрузчик в начале флэш , который загружает с какого-то внешнего источника (датафлэш или UART, например) программу загрузчик под любые нужды(USB, SD Card и т.п.) в RAM. Старт загрузчика...
При этом загрузчик в начале флэш получается очень маленький (можно вписаться в 4кБ).
При работе загрузчика по барабану как RAM тратится. Ничего не затрешь.

Или такой пример. У меня стоит датафлэш со всякого рода картинками и загрузка этих картинок так и сделана -- с SD карты загрузчик записывается в RAM и записывает картинки на датафлэш. Экономия флэш около 6 кБ.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Popkov   Самопрограммирование ARM   Apr 14 2005, 11:41
- - makc   Цитата(Popkov @ Apr 14 2005, 14:41)Народ, вот...   Apr 14 2005, 14:10
- - IgorKossak   Возможность подключить собственный бутлоадер есть ...   Apr 14 2005, 14:12
|- - SasaVitebsk   Цитата(IgorKossak @ Apr 14 2005, 18:12) В...   Dec 4 2009, 19:50
|- - zltigo   Цитата(Step_ARM @ Nov 28 2009, 13:20) RAM...   Nov 28 2009, 12:27
|- - Step_ARM   Цитата(zltigo @ Nov 28 2009, 15:27) 32K R...   Nov 30 2009, 04:07
- - Vitaliy_ARM   Цитата(Popkov @ Apr 14 2005, 14:41) Народ...   Mar 21 2008, 12:25
- - Shkn   Можно посмотреть на сайте www tnkernel com. на его...   Mar 24 2008, 07:06
- - _dem   Загрузчик размещаете в конце памяти, при запуске п...   Mar 24 2008, 14:35
|- - zltigo   Цитата(_dem @ Mar 24 2008, 17:35) Загрузч...   Mar 24 2008, 14:45
|- - meister   Цитата(zltigo @ Mar 24 2008, 17:45) И при...   Mar 24 2008, 15:04
|- - zltigo   Цитата(meister @ Mar 24 2008, 18:04) И в ...   Mar 24 2008, 15:10
||- - meister   Цитата(zltigo @ Mar 24 2008, 18:10) Прило...   Mar 24 2008, 15:11
|- - zltigo   Цитата(meister @ Mar 24 2008, 18:04) Если...   Mar 24 2008, 15:15
||- - meister   Цитата(zltigo @ Mar 24 2008, 18:15) Повто...   Mar 24 2008, 15:30
||- - zltigo   Цитата(meister @ Mar 24 2008, 18:30) А пе...   Mar 24 2008, 15:39
|- - Александр_С   Цитата(meister @ Mar 24 2008, 18:04) И в ...   Mar 25 2008, 01:43
|- - zltigo   Цитата(Александр_С @ Mar 25 2008, 04:43) ...   Mar 25 2008, 05:46
- - _dem   Боже, какие ужасы, господа .... А что мешает нача...   Mar 24 2008, 15:32
|- - meister   Цитата(_dem @ Mar 24 2008, 18:32) Боже, к...   Mar 24 2008, 15:37
||- - zltigo   Цитата(meister @ Mar 24 2008, 18:37) А я ...   Mar 24 2008, 15:47
|- - zltigo   Цитата(_dem @ Mar 24 2008, 18:32) для отл...   Mar 24 2008, 15:42
|- - _dem   Цитата(zltigo @ Mar 24 2008, 19:42) Для о...   Mar 24 2008, 15:49
|- - zltigo   Цитата(_dem @ Mar 24 2008, 18:49) пишет 0...   Mar 24 2008, 16:06
- - _dem   Цитата(meister @ Mar 24 2008, 19:37) А я ...   Mar 24 2008, 15:39
|- - meister   Цитата(_dem @ Mar 24 2008, 18:39) Проясни...   Mar 24 2008, 15:43
- - _dem   хм. А чем вероятность незаписи 0-го сектора отлича...   Mar 24 2008, 18:13
|- - zltigo   Цитата(_dem @ Mar 24 2008, 21:13) хм. А ч...   Mar 24 2008, 18:43
- - _dem   Ладно, за сим закроем тему по причине, видимо, нем...   Mar 24 2008, 19:38
|- - zltigo   Цитата(_dem @ Mar 24 2008, 22:38) Перенос...   Mar 24 2008, 19:51
|- - argentum   Помогите новичку Пишу bootloader для LPC 2478 под ...   Nov 27 2009, 12:17
- - goodwin   Дык самое простое - взять, например, "lpc24x...   Nov 27 2009, 13:58
|- - argentum   Цитата(goodwin @ Nov 27 2009, 16:58) Дык ...   Nov 28 2009, 21:00
|- - zltigo   Цитата(argentum @ Nov 29 2009, 00:00) г) ...   Nov 28 2009, 23:32
|- - argentum   Цитата(zltigo @ Nov 29 2009, 02:32) Ну не...   Nov 29 2009, 20:33
|- - GetSmart   Цитата(argentum @ Nov 30 2009, 02:33) В з...   Nov 30 2009, 06:48
|- - argentum   Большое спасибо, GetSmart!!! Всё сдела...   Dec 1 2009, 07:11
- - skripach   ЦитатаНеудивительно, что ничего не работает. В про...   Nov 30 2009, 08:14
|- - GetSmart   Цитата(skripach @ Nov 30 2009, 14:14) Неп...   Nov 30 2009, 08:20
- - skripach   ЦитатаСамому написать компилятор Угу первое что пр...   Nov 30 2009, 08:26
|- - GetSmart   Цитата(skripach @ Nov 30 2009, 14:26) Угу...   Nov 30 2009, 08:39
- - skripach   ЦитатаА потребность-то в чём? Нужа такая прошивка,...   Nov 30 2009, 08:57
|- - GetSmart   Цитата(skripach @ Nov 30 2009, 14:57) Ну ...   Nov 30 2009, 09:17
- - skripach   ЦитатаХочется, чтобы исполняемая прога начиналась ...   Dec 1 2009, 07:48
- - argentum   Хм... Да... Это точно... Согласен. Но тогда...   Dec 1 2009, 13:58


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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 15:41
Рейтинг@Mail.ru


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