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

 
 
> Загрузка AT91RM9200 из SPI DataFlash, Использование Flashloader'а и
Ruslan1
сообщение Aug 23 2006, 09:56
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Здравствуйте!
Помогите чайнику.
Задача собственно тривиальная, но как именно к ней подступиться- не понимаю. Совсем торможу.
cranky.gif

Железо: есть плата на AT91RM9200, на которой установлена AT45DB642. Есть J-Link.
Софт: IAR 4.40A.
Пользователь: начинающий. умеет писать и отлаживать сишные программы в внутреннем SRAM и наплатном SDRAM. Понимает как править сишный стартап, но совершенно не разбирается в Армовском ассемблере. Документацию прочитал (как ему кажется).

Задача: Их собственно две:
1. Написать программу, которая, автономно загрузившись во внутреннее SRAM, сможет оттуда работать (помигать светодиодом)
2. Написать программу, цель которой- проинициализировать SDRAM, загрузить в SDRAM основную пользовательскую программу, передать этой пользовательской программе управление.

Сначала хочется разобраться с первой задачей.

Насколько я понял, Flashloader (я рассматривал написанный VladislavS, огромное спасибо!) загружает подготовленный файл в dataFlash. Однако как этот файл должен быть предварительно подготовлен, чтобы при следующем ресете бутлоадер определил его как валидное приложение и загрузил его? В даташите написано, что для этого с адреса 0 первые 32 байта должны содержать строго определенную информацию, в том числе длину кода (шестой вектор, +0x14).
Как мне это обеспечить?

Далее, как этот файл записать? Поставил в IAR галку на Flashloader, указал где сам Flashloader находится, указал куда записать (--spi 0). Что-то еще?
У меня вроде бы записывается, в лог пишет:
AT45 at NPCSO searching
AT45DB642 found
Flash program complete

Но не работает. sad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Ken@t
сообщение Aug 23 2006, 10:05
Сообщение #2


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

Группа: Свой
Сообщений: 144
Регистрация: 5-08-05
Пользователь №: 7 382



Цитата(Ruslan1 @ Aug 23 2006, 13:56) *
Однако как этот файл должен быть предварительно подготовлен, чтобы при следующем ресете бутлоадер определил его как валидное приложение и загрузил его? В даташите написано, что для этого с адреса 0 первые 32 байта должны содержать строго определенную информацию, в том числе длину кода (шестой вектор, +0x14).
Как мне это обеспечить?

После ... нет не так
последовательность такова , что во флэш вы должны первым делом залить свой загрузчик - тобишь написать его... Этот загрузчик RM9200 будет загружен в срам и отмаппирован на 0x0 и отудаже запущен. Сответственно можете просто
Код
__program_start:
        ldr    pc,=?cstartup; Absolute jump
        org    0x04+ADRSTART
undef_handler:
        ldr    pc,=undef_handler
        org    0x08+ADRSTART
swi_handler:
        ldr    pc,=swi_handler
        org    0x0c+ADRSTART
prefetch_handler:
        ldr    pc,=prefetch_handler
        org    0x10+ADRSTART
data_handler:
        ldr    pc,=data_handler
                                org           0x14  
FLASHINFO :            ; Ваше слово конфигурации              
        org    0x18+ADRSTART
                                ldr            pc, [pc,#-0xF20]   ; IRQ : read the AIC
        org    0x1c+ADRSTART
fiq_handler:
        ldr    pc,=fiq_handler

ну а далее в вашем загрузчике - инициализируете SDRAM , переливаете образ из флэша и запускаете приложение.... просто ?


--------------------
Свет мой зеркальце, скажи, да всю правду расскажи я ль на свете всех тупее, бесполезней и пьянее?
Ты - придурок. Спору нет! Но живет на белом свете вот ТАКИХ еще две трети!
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Aug 23 2006, 20:11
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(Ken@t @ Aug 23 2006, 13:05) *
[последовательность такова , что во флэш вы должны первым делом залить свой загрузчик - тобишь написать его... Этот загрузчик RM9200 будет загружен в срам и отмаппирован на 0x0 и отудаже запущен.
..............
ну а далее в вашем загрузчике - инициализируете SDRAM , переливаете образ из флэша и запускаете приложение.... просто ?

Спасибо, вроде стало проясняться. Во всех виденных мной стартапах написано что-то вроде:


org 0x00
__program_start
ldr pc,[pc,#24] ; Absolute jump can reach 4 GByte
; b ?cstartup ; Relative branch allows remap, limited to 32 MByte
; Vectors can be enabled by removing the comments below or by
; using #pragma vector from C code.
org 0x04
; ldr pc,[pc,#24] ; Branch to undef_handler
org 0x08
; ldr pc,[pc,#24] ; Branch to swi_handler
org 0x0c
; ldr pc,[pc,#24] ; Branch to prefetch_handler
org 0x10
; ldr pc,[pc,#24] ; Branch to data_handler
org 0x18
; ldr pc,[pc,#24] ; Branch to irq_handler
org 0x1c
; ldr pc,[pc,#24] ; Branch to fiq_handler


Я вставил нужный код по 0x14, но эффекта не дало.
Может быть, у вас есть пример такого стартапа, предназначенного для загрузки из флеша?

Я еще подумал, что может быть а просто-напросто неправильно произвожу загрузку в мою AT45D642. Завтра попробую Flashloader пошагово посмотреть, может и не там я ищу.

А скорее всего, у меня несколько ошибок в разных местах. Прочешу все сначала.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Sep 4 2006, 10:43
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Вот я и дополз до следующей стадии.

Сначала о том, как я понимаю процесс загрузки из внешней флешки (код исполняется из внешней SDRAM), то есть как себя ведет камень после reset:
1. Находит в DataFlash по CS0 микросхему, определяет, что в ней валидная прошивка (валидный вектор 0x14).
2. Грузит эту прошивку во внутреннее SRAM. То есть данные с нулевого адреса DataFlash попадают в нулевой адрес intRAM, и так далее, столько байт, сколько указано в векторе 0x14. Это еще не основная программа, а только загрузчик (длиной до 12 килобайт)
3. Производится remap, в результате которого intSRAM отображается на адреса с 0x00000000.
4. начинается исполнение кода загрузчика (с адреса 0x00000000)

До этого момента мне все понятно. А вот дальше собственно суть.

Действия загрузчика:
1. Проинициализировать периферию (для работы SDRAM)
2. Загрузить прошивку из DataFlash в SDRAM
3. передать управление основной программе, загруженной в SDRAM.

Вот по шагам 2 и 3 у меня и вопросы.

1.В каком формате сохранять код в DataFlash, чтобы потом его легко можно было оттуда достать и распределить загрузчиком по указанным адресам? Ведь изначально все, что известно загрузчику- это то, что код расположен в DataFlash с адреса, скажем, 0x010000 ? Или достаточно иметь сырой бинарник?
2. Как вообще все это сделать (загрузку), чтобы потом сам бутлодер не занимал место в дефицитной intSRAM ?
3. Как это все отлаживать? У меня должен быть отдельный проект загрузчика, и отдельный проект загружаемого им приложения? Или можно как-то слинковать вместе?
4. Может, кто-нибудь поделится проектиком, где используется подобная загрузка?

5. И вообще, не изобретаю ли я велосипед? u-boot может мне помочь? Только избыточен он, все что мне нужно- это при включении загрузить прогу и передать ей управление. Что бы почитать еще на эту тему ?

Вообще-то конечная цель- загрузить мой тестовый проектик юкоса из флешины. Сейчас работает в SDRAM, гружусь через J-Link.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 20:40
Рейтинг@Mail.ru


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