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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Самопрограммирование 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
makc
сообщение Apr 14 2005, 14:10
Сообщение #2


Гуру
******

Группа: Админы
Сообщений: 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
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 14 2005, 14:12
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Возможность подключить собственный бутлоадер есть у обоих (LPC и AT91).
Эта функция как правило называется IAP (In Application Programming).
Возможность защитить код от несанкционированного чтения также имеется (кроме LPC2104/05/06).
Go to the top of the page
 
+Quote Post
mpo
сообщение Apr 15 2005, 08:44
Сообщение #4


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

Группа: Свой
Сообщений: 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
Сообщение #5


Гуру
******

Группа: Админы
Сообщений: 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
Vitaliy_ARM
сообщение Mar 21 2008, 12:25
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 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\

Там есть примеры загрузчиков практически под все процессоры. smile.gif


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Kirill Frolov
сообщение Mar 21 2008, 19:17
Сообщение #7


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

Группа: Новичок
Сообщений: 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
Shkn
сообщение Mar 24 2008, 07:06
Сообщение #8


Участник
*

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



Можно посмотреть на сайте www tnkernel com. на его основе я делал себе обновлялку с sd карты.

Сообщение отредактировал Shkn - Mar 24 2008, 07:07
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 24 2008, 08:12
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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
_dem
сообщение Mar 24 2008, 14:35
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



Загрузчик размещаете в конце памяти, при запуске передаете управление ему (RESET вектор на него направьте).
Он ждет сигнала с внешнего канал и либо апдейтит приложение, либо запускает существующее.
Для получение приложения "снаружи" вам и прерывания-то не нужны будут, получить по любому интерфейсу десяток-два килобайт, имея в своем распоряжении все процессорное время (мы же в загрузчике !) легко можно и без прерываний.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 24 2008, 14:45
Сообщение #11


Гуру
******

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



Цитата(_dem @ Mar 24 2008, 17:35) *
Загрузчик размещаете в конце памяти..
...апдейтит приложение, либо запускает существующее.

И при неудачной заливке все вместе накрывается медным тазом.
Кроме того, например, у LPC в конце FLASH сектора по 32K - многовато для загрузчика.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
meister
сообщение Mar 24 2008, 15:04
Сообщение #12


Местный
***

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



Цитата(zltigo @ Mar 24 2008, 17:45) *
И при неудачной заливке все вместе накрывается медным тазом.


И в начале накроется медным тазом. Запишутся первые 512 байт с правильной CRC векторов и CRP - этого уже хватит, чтобы ISP запускал только "приложение". Если "приложение" больше 512 байт - медный таз. Кстати. Если писать в конец и делать нестандартным способом - можно "не накрыться".

Сообщение отредактировал meister - Mar 24 2008, 15:05
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 24 2008, 15:10
Сообщение #13


Гуру
******

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



Цитата(meister @ Mar 24 2008, 18:04) *
И в начале накроется медным тазом.

Bootloader сам себя не перешивает. И посему останется в неприкосновенности. Для пущей надежности можно и его область прикрыть от записи так-же, как и штатный.
Цитата
чтобы ISP запускал только "приложение"....

Приложения, однако, запускает/не запускает тот самый bootloader, который остается целым.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
meister
сообщение Mar 24 2008, 15:11
Сообщение #14


Местный
***

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



Цитата(zltigo @ Mar 24 2008, 18:10) *
Приложения, однако, запускает/не запускает тот самый bootloader, который остается целым.


Это если ему повезет записаться целиком.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 24 2008, 15: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
Go to the top of the page
 
+Quote Post

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

 


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


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