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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Вопросы по реализации бутлоадера, at91sam7s64, IAR5.41
ar__systems
сообщение Feb 21 2014, 01:06
Сообщение #31


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(toweroff @ Feb 20 2014, 17:10) *
а записи приложения во флеш это не мешает?

Нет, не мешает.... а как это могло бы мешать?
Go to the top of the page
 
+Quote Post
TU-104
сообщение Feb 21 2014, 05:07
Сообщение #32


Участник
*

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



Цитата(ar__systems @ Feb 21 2014, 04:07) *
При совместном использовании БЛ заменяет собой некую заглушку которая предусмотрена в приложении, которая по сути всего лишь осуществляет переход из 0 в начала startup приложения.

вот еще больше запутался
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Feb 21 2014, 06:25
Сообщение #33


Местный
***

Группа: Свой
Сообщений: 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
toweroff
сообщение Feb 21 2014, 07:36
Сообщение #34


Гуру
******

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



Цитата(ar__systems @ Feb 21 2014, 05:06) *
Нет, не мешает.... а как это могло бы мешать?

Цитата
37.3.2.6Interrupts during IAP
The on-chip flash memory is not accessible during IAP operations. When the user
application code starts executing, the interrupt vectors from the user flash area are active.
The user should either disable interrupts, or ensure that user interrupt vectors are active in
RAM and that the interrupt handlers reside in RAM, before making an IAP call (see
Section 5.4 “Vector table remapping”). The IAP code does not use or disable interrupts.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Feb 21 2014, 17:03
Сообщение #35


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



так прерывания выключил, и все ок
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 21 2014, 22:12
Сообщение #36


Гуру
******

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



Цитата(ar__systems @ Feb 21 2014, 21:03) *
так прерывания выключил, и все ок

ну эт да sm.gif
а можно не заморачиваться - разместил в RAM и забыл
Go to the top of the page
 
+Quote Post
TU-104
сообщение Feb 23 2014, 17:39
Сообщение #37


Участник
*

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



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


Сообщение отредактировал TU-104 - Feb 24 2014, 09:56
Go to the top of the page
 
+Quote Post

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

 


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


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