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

 
 
> Вопросы по реализации бутлоадера, at91sam7s64, IAR5.41
mempfis_
сообщение Jul 29 2010, 08:28
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Всем добрый день.
Стоит задача написать бутлоадер для at91sam7s64.
Есть несколько ламерских вопросов по этому поводу.

1. Правильно ли я понимаю что для ARM бутлоадер это обычная программа (в отличии от AVR) которая может начинаться с какого угодно адреса?
2. Чтобы иметь возможность прошить flash собственно подпрограммы прошивки flash должны находится в оперативной памяти?
3. Если п.1 верный то где во flash лучше располагать бутлоадер (в начале или в конце)?
4. Как быть со стартапом приложения? Если я в бутлоадере инициализирую стеки, тактовый генератор и т.д. то можно ли исключить стартап из приложения и просто вызвать main? Или лучше произвести сброс переферии и вызвать приложение со стартапом?
5. Достаточно ли будет выделить в flash сегмент и размещать в нём основную программу или в startup и LowLevelInit() нужно будет както дополнительно учитывать что в МК живёт ещё и бутлоадер?

Теперь мои соображения по поводу бутлоадера - поправте если гдето буду не прав:
- Проект бутлоадера - обычная программа - т.е. создаю в IAR5.41 проект, подключаю стартап и LowLevelInint() в которых инициализируются стеки, тактовый генератор, VIC и т.д.
- В main бутлоадера настраиваю всю необходимую мне переферию (PIT, PIO, USB и т.д.).
- Перехожу в основной цикл прораммы в котором ожидаю команды с usb-терминала.
- Если приходит команда прошивки flash - прошиваю нужную страницу памяти в секции приложения.
- Если приходит команда запуска приложения - вызываю main приложения (это если можно не вставлять startup и LowLevelInit()) или прыгаю на адрес с которого начинается основная программа.

Спасибо всем кто ответит.

P.S. Также буду благодарен ссылкам на какие-либо проекты бутлоадеров для sam7s.
P.P.S. С сайта atmel скачал какойто проект но он для ARM9 и довольно запутанный и непонятный...

Сообщение отредактировал mempfis_ - Jul 29 2010, 08:31
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
RabidRabbit
сообщение Feb 21 2014, 06:25
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Как было сделано у меня (AT91SAM7S32): бутлоадер (написанный на ассемблере, размер ограничен 0x400) при старте копирует себя в ОЗУ, выполняет REMAP, выполняет переход по адресу в ОЗУ
Код
    ldr        PC, =(0x200000 + continueEntry - 0x100000)
continueEntry
; enable main oscillator and PLL
, настраивает тактирование и прочее, включает PIO контроллер, по состоянию двух пинов решает, пытаться запустить приложение или перейти в ожидание команд через DBGU. В случае попытки запуска бутлоадер проверяет (по фиксированному адресу во флэш) размер и контрольную сумму приложения, если проверка прошла, копирует векторы (из известного места во флэш) в адрес 0x20 (туда ведь уже отмаплено ОЗУ) и делает ldr PC, =0 (переход по вектору сброса). При любой ошибке следует переход на ожидание команд через DBGU). Команд всего 2 - "hello" и передача прошивки. Прошивка передаётся блоками размером со страницу флэша (в данном случае 128 байт), очередной полученный блок бутлоадер записывает во флэш, после чего отправляет подтверждение. После окончания загрузки следует попытка запуска приложения.
Само приложение построено с "дыркой" в начале рамером 0x400 - размер таблицы переходов + слово (размер приложения) + слово (контрольная сумма). При передаче бутлоадеру используется самописная программа, которая загружает бинарник в память, записывает на место размер и контрольную сумму, и потом с адреса 0x400 передаёт всё остальное постранично бутлоадеру. Соответственно при старте приложения тактирование уже настроено, можно заниматься более полезными делами.
На всякий случай начало бутлоадера:
CODE

; exception vectors - начало бутлоадера
exception_block_start
ldr pc, Reset_Addr
ldr pc, Undef_Addr
ldr pc, SWI_Addr
ldr pc, PAbt_Addr
ldr pc, DAbt_Addr
nop
ldr pc, [pc, #-0xF20] ; go to by IRQ vector
ldr pc, [pc, #-0xF20] ; go to by FIQ vector
exception_vectors
; address map for exeption vectors - сюда копируются векторы приложения
Reset_Addr
DCD Reset_Handler
Undef_Addr
DCD Undef_Handler
SWI_Addr
DCD SWI_Handler
PAbt_Addr
DCD PAbt_Handler
DAbt_Addr
DCD DAbt_Handler
exception_block_end

И начало приложения:
CODE

; exception vectors
exVectorsStart
ldr pc, Reset_Addr
ldr pc, Undef_Addr
ldr pc, SWI_Addr
ldr pc, PAbt_Addr
ldr pc, DAbt_Addr
nop
ldr pc, [pc, #-0xF20] ; go to by IRQ vector
ldr pc, [pc, #-0xF20] ; go to by FIQ vector
exVectorsEnd
; место для загрузчика
SPACE (0x400 - (exVectorsEnd - exVectorsStart))
; место для размещения данных загрузчика
SPACE 8
; address map for exeption vectors
exTableStart
Reset_Addr
DCD Reset_Handler
Undef_Addr
DCD Undef_Handler
SWI_Addr
DCD SWI_Handler
PAbt_Addr
DCD PAbt_Handler
DAbt_Addr
DCD DAbt_Handler
exTableEnd
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- mempfis_   Вопросы по реализации бутлоадера   Jul 29 2010, 08:28
- - aaarrr   Цитата(mempfis_ @ Jul 29 2010, 12:28) 1. ...   Jul 29 2010, 08:40
|- - mempfis_   Спасибо за быстрый ответ. В целом начинает проясня...   Jul 29 2010, 08:53
|- - aaarrr   Цитата(mempfis_ @ Jul 29 2010, 12:53) Обо...   Jul 29 2010, 09:23
|- - mempfis_   ЦитатаПомимо стеков есть еще копирование секций, и...   Jul 29 2010, 09:31
|- - mempfis_   Дошёл до того момента когда бутлоадер вот-вот уже ...   Aug 12 2010, 08:04
|- - aaarrr   Цитата(mempfis_ @ Aug 12 2010, 12:04) Дос...   Aug 12 2010, 12:15
|- - mempfis_   Цитата(aaarrr @ Aug 12 2010, 15:15) На пе...   Aug 16 2010, 13:44
- - dimka76   Цитата(mempfis_ @ Jul 29 2010, 12:28) P.S...   Jul 29 2010, 08:57
|- - mempfis_   Цитата(dimka76 @ Jul 29 2010, 11:57) http...   Jul 29 2010, 08:59
- - sergeeff   Ну и если вы задумаете еще и на С++ постепенно пер...   Jul 29 2010, 11:13
- - Exeland   Я тоже занят написанием загрузчика. А как заставит...   Aug 16 2010, 10:18
|- - aaarrr   Цитата(Exeland @ Aug 16 2010, 14:18) Я то...   Aug 16 2010, 10:24
- - Exeland   Я с линкером не работал. Можете дать кусочек кода ...   Aug 16 2010, 10:27
|- - aaarrr   Цитата(Exeland @ Aug 16 2010, 14:27) Я с ...   Aug 16 2010, 11:10
|- - Wano   Цитата(Exeland @ Aug 16 2010, 13:27) Я с ...   Aug 16 2010, 15:06
- - Exeland   Поменял в Target Diolog адреса, грузится если pc=S...   Aug 17 2010, 06:16
|- - Wano   Цитата(Exeland @ Aug 17 2010, 09:16) Поме...   Aug 17 2010, 08:18
- - Exeland   Хотя нет все работает. Прыжок на ПО делаю так, е...   Aug 17 2010, 07:36
- - Exeland   Еще один вопрос. Необходимо разместить константы (...   Aug 17 2010, 09:42
|- - aaarrr   Цитата(Exeland @ Aug 17 2010, 13:42) Как ...   Aug 17 2010, 10:26
|- - Exeland   Цитата(aaarrr @ Aug 17 2010, 14:26) Можно...   Aug 19 2010, 05:41
|- - Wano   Цитата(Exeland @ Aug 19 2010, 08:41) Не м...   Aug 20 2010, 09:30
- - skripach   Цитата3. Не делать фиксированную область, а создат...   Aug 17 2010, 12:50
- - aaarrr   Думаю, восьми байт как раз достаточно. Если ...   Aug 17 2010, 12:57
- - skripach   ЦитатаЕсли "потолком" служил генератор п...   Aug 17 2010, 13:32
- - TU-104   Цитата(mempfis_ @ Aug 16 2010, 19:44) Сег...   Feb 19 2014, 11:57
- - TU-104   Добавил копирование первых 64 байт прошивки в нача...   Feb 20 2014, 04:39
- - ar__systems   Я расскажу как я делал. (1788) И приложение, и пр...   Feb 20 2014, 22:07
|- - toweroff   Цитата(ar__systems @ Feb 21 2014, 02:07) ...   Feb 20 2014, 22:10
|- - ar__systems   Цитата(toweroff @ Feb 20 2014, 17:10) а з...   Feb 21 2014, 01:06
|- - toweroff   Цитата(ar__systems @ Feb 21 2014, 05:06) ...   Feb 21 2014, 07:36
|- - ar__systems   так прерывания выключил, и все ок   Feb 21 2014, 17:03
|- - toweroff   Цитата(ar__systems @ Feb 21 2014, 21:03) ...   Feb 21 2014, 22:12
- - TU-104   Цитата(ar__systems @ Feb 21 2014, 04:07) ...   Feb 21 2014, 05:07
- - TU-104   а все-таки подскажите, как запустить приложение с ...   Feb 23 2014, 17:39


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

 


RSS Текстовая версия Сейчас: 29th August 2025 - 22:11
Рейтинг@Mail.ru


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