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

 
 
> загрузка AT91R40008
Sarez
сообщение Aug 17 2006, 14:49
Сообщение #1


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

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



Доброго всем дня (ночи, утра ...) ! Вопрос новичка профессионалам . С ARM работать только начинаю , и в качестве стартового использую AT91R40008 . Имеет на борту 256 kb RAM , ПЗУ и Boot Rom отсутствует. Подскажите , кто работал , как можно осуществить загрузку кода из внешней FLASH в внутреннее ОЗУ , чтобы исполнять код оттуда ? Можно ли организовать загрузку по USART ? В даташите сказано относительно этого , что микросхема , с которой происходит загрузка , цепляется на вывод NCS0 , указываются параметры задержек и базовые адреса и больше ничего...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 12)
AlexB
сообщение Aug 17 2006, 15:14
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 37
Регистрация: 9-08-05
Из: The Netherlands
Пользователь №: 7 477



Правильный выбор. Хороший процессор. Ничего лишнего и достаточно шустрый.

Нужно внести изменения в cstartup файл. Копируете данные из внешнего ПЗУ во внутренне ОЗУ, а потом REMAP. Пример из работающего проекта прикреплён. Там увидите - выделено ; COPY.

Прикрепленный файл  at91_cstartup.txt ( 16.59 килобайт ) Кол-во скачиваний: 705


Цитата(afad @ Aug 17 2006, 19:15) *
Непонятно, зачем переписывать программу из ПЗУ в ОЗУ? Чтобы быстрее работала?


Есть множество приложений, где 66 Мгц его тактовой просто необходимы. И выполнение программы из внутреннего ОЗУ является единственным спасением.

Сообщение отредактировал AlexB - Aug 17 2006, 15:25
Go to the top of the page
 
+Quote Post
afad
сообщение Aug 17 2006, 15:15
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545



Действительно, вначале начинает выполняться программа из внешнего ПЗУ (FLASH), подключенного к NCS0. Со стартового адреса в Вашем случае должна быть программка, которая берет другую программу, загруженную в это же ПЗУ и переписывает ее во внутреннюю RAM и передает ей управление. Т.е. эта вторая программа должна быть оттранслирована по адресам RAM, но находиться во внешней ПЗУ по другим адресам, откуда загрузчик будет ее переписывать. Непонятно, зачем переписывать программу из ПЗУ в ОЗУ? Чтобы быстрее работала?

Вопрос также в том, как программа попадает в FLASH. Если у Вас FLASH стоит на колодке и вы в нее записываете программатором, то нет проблем. Не нужен и загрузчик. Просто располагаете свою программу во ФЛЭШ и работаете оттуда. Но, конечно, для увеличения быстродействия программу нужно переписать в RAM и оттуда выполнять.

Если FLASH припаяна, тогда только через JTAG.
Я делал так.
1. Через JTAG записываем в ОЗУ начальный загрузчик и запускаем его.
2. По UARTу передаем рабочую программу (я передавал в HEX коде), загрузчик берет ее, расшифровывает и записывает во FLASH.
3. Отключаем JTAG, запускаем программу из FLASH и наслаждаемся работой программы. Если ошибка программы переходим на п.1 и так до посинения, пока все не заработает.

Загрузчик писал сам, правда он весьма несовершенен.
Go to the top of the page
 
+Quote Post
Sarez
сообщение Aug 18 2006, 10:41
Сообщение #4


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

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



Большое спасибо за ответы ! В принципе все понятно , но появилась еще пара вопросов . В даташите указано , что объем внутреннего ОЗУ - 256 kb . Насколько я понимаю , в эту память и будет грузиться код из Flash , а еще помимо прочего определенные участки этой памяти выделенны на внутреннюю перефирию ? Опять же в даташите указано , что внутренняя область памяти располагается в первых четырех мегабайтах адресного пространства - откуда взялась цифра в 4 мегабайта? Или по этим адресам я могу адресовать внешние микросхемы RAM в случае нехватки внутреннего ОЗУ ? Я представляю себе процесс так - во время загрузки из микросхемы FLASH сидящей на ноге NCSO происходит копирование данных по адресу 0x00300000 во внутреннюю память МК ( общим объемом 256 kb ). Затем происходит Remap , и данные участки становятся доступными с адреса 0x00. Если я думаю правильно , тогда интересно следующее :

1) Какой объем памяти из 256 kb выделяется на память программ с учетом использования внутренней периферии , которой тоже выделяется память из этого же объема ?

2) Каким образом организуется защита участка памяти программ ?

3) Могу ли я учаски памяти , выделенные под периферию использовать для памяти программ , в случае если я эту периферию не использую (вероятней всего нет , поскольку участки расположенны в разных адресных пространствах , но хотелось бы удостовериться )

4) В случае нехватки внутренней памяти под память программ каким образом можно подцепить внешнее ОЗУ для расширения ?

Или же в МК есть еще память , помимо 256 kb?

Заранее благодарен за помощь !
Go to the top of the page
 
+Quote Post
afad
сообщение Aug 18 2006, 12:06
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545



Цитата
Я представляю себе процесс так - во время загрузки из микросхемы FLASH сидящей на ноге NCSO происходит копирование данных по адресу 0x00300000 во внутреннюю память МК ( общим объемом 256 kb ). Затем происходит Remap , и данные участки становятся доступными с адреса 0x00.
Так, только это происходит не автоматически. Начинает выполняться программа из FLASH. Из FLASH выполняется STARTUP, в котором и есть это копирование программы в ОЗУ.
Цитата
Какой объем памяти из 256 kb выделяется на память программ с учетом использования внутренней периферии , которой тоже выделяется память из этого же объема ?
Все 256 Кб используются по собственному усмотрению для программ, данных и стека.
Что значит часть памяти выделена для периферии???
Цитата
Каким образом организуется защита участка памяти программ ?
Скорее всего никак, я, по крайней мере никаких упоминаний об этом не нашел.
Цитата
В случае нехватки внутренней памяти под память программ каким образом можно подцепить внешнее ОЗУ для расширения ?
Или же в МК есть еще память , помимо 256 kb?
Читай DataSheet, там только 256 Кбайт. Можно подключить и внешнюю память.
Go to the top of the page
 
+Quote Post
Sarez
сообщение Aug 18 2006, 12:53
Сообщение #6


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

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



Благодарю ! По поводу вопроса о выделении памяти периферии. В даташите указано , что интегрированная в МК периферия размещается в верхних 4 Mb адресного пространства , а так же дана карта ее распределения по адресам ( стр. 17 Peripheral Memory Map - карта прилагается ). То есть , насколько я понимаю , периферия и программный код логически расположены в различных адресных пространствах , но физически в одной 256 kb области. Согласно Peripheral Memory Map объем памяти периферии равен 128 kb ( просуммировал выделенные в отдельности для каждого из устройств участки ) . Таким образом на память программ остается 128 kb . Или я что - то не так понимаю ?
Прикрепленные файлы
Прикрепленный файл  AT91X40karta.rar ( 15.95 килобайт ) Кол-во скачиваний: 232
 
Go to the top of the page
 
+Quote Post
afad
сообщение Aug 18 2006, 13:03
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545



Цитата
насколько я понимаю , периферия и программный код логически расположены в различных адресных пространствах , но физически в одной 256 kb области.
НЕТ!!! Регистры периферии и RAM располагаются по разным адресам и никак не перекрываются, Вы что-то путаете. Объем RAM 256 Kb и все их можно использовать.
Периферия с 0xFFC00000 до 0xFFFFFFFF,
а RAM c 0x00300000 до 0x003FFFFF до REMAP
и с 0x00000000 до 0x000FFFFF после REMAP.
Где тут перекрытие? О чем Вы?

Сообщение отредактировал afad - Aug 18 2006, 13:19
Go to the top of the page
 
+Quote Post
Sarez
сообщение Aug 18 2006, 14:03
Сообщение #8


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

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



Так ... То есть если я работаю , допустим с USART0 , я адресую относительно базового адреса для USART0 0xFFFD0000 регистры , которые участками RAM не являются. Количество регистров для USART0 - 16 ( адреса с 0xFFFD0000 по 0xFFFD003С ), каждый по 4 байта , следовательно общий объем - 64 байта. Зачем тогда согластно Peripheral Memory Map на него выделяются адреса с 0xFFFD0000 по 0xFFFD3FFF , или 16 k bytes памяти ? И еще хотел уточнить - адресное пространство для внутренней ОЗУ у нас 1 M , объем - 256 kb Что происходит при адресации выше 256 kb ? Или имеется в виду 256 kb адресов с учетом разрядности 32 ???

Сообщение отредактировал Sarez - Aug 18 2006, 14:29
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 18 2006, 14:26
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Sarez @ Aug 18 2006, 18:03) *
Зачем тогда согластно Peripheral Memory Map на него выделяются адреса с 0xFFFD0000 по 0xFFFD3FFF , или 16 k bytes памяти ?

Так адреса дешифрировать проще.
Go to the top of the page
 
+Quote Post
afad
сообщение Aug 18 2006, 14:31
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545



Процессор-то 32 разрядный, адресное пространство - огромное, не жалко smile.gif
Go to the top of the page
 
+Quote Post
Sarez
сообщение Aug 18 2006, 14:40
Сообщение #11


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

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



to afad :
biggrin.gif


to aaarrr :

"Так адреса дешифрировать проще."

Почему проще ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 18 2006, 15:40
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Sarez @ Aug 18 2006, 18:40) *
Почему проще ?

Чем больше размер блока, тем меньше логики нужно для дешифрации адреса. Впрочем, afad прав - пространства много, особо жаться смысла нет.
Go to the top of the page
 
+Quote Post
Sarez
сообщение Aug 19 2006, 05:07
Сообщение #13


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

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



OK. Спасибо за ответы!!!
Go to the top of the page
 
+Quote Post

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

 


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


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