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

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

Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 17 2006, 15:15
|
Местный
  
Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545

|
Действительно, вначале начинает выполняться программа из внешнего ПЗУ (FLASH), подключенного к NCS0. Со стартового адреса в Вашем случае должна быть программка, которая берет другую программу, загруженную в это же ПЗУ и переписывает ее во внутреннюю RAM и передает ей управление. Т.е. эта вторая программа должна быть оттранслирована по адресам RAM, но находиться во внешней ПЗУ по другим адресам, откуда загрузчик будет ее переписывать. Непонятно, зачем переписывать программу из ПЗУ в ОЗУ? Чтобы быстрее работала?
Вопрос также в том, как программа попадает в FLASH. Если у Вас FLASH стоит на колодке и вы в нее записываете программатором, то нет проблем. Не нужен и загрузчик. Просто располагаете свою программу во ФЛЭШ и работаете оттуда. Но, конечно, для увеличения быстродействия программу нужно переписать в RAM и оттуда выполнять.
Если FLASH припаяна, тогда только через JTAG. Я делал так. 1. Через JTAG записываем в ОЗУ начальный загрузчик и запускаем его. 2. По UARTу передаем рабочую программу (я передавал в HEX коде), загрузчик берет ее, расшифровывает и записывает во FLASH. 3. Отключаем JTAG, запускаем программу из FLASH и наслаждаемся работой программы. Если ошибка программы переходим на п.1 и так до посинения, пока все не заработает.
Загрузчик писал сам, правда он весьма несовершенен.
|
|
|
|
|
Aug 18 2006, 10:41
|
Частый гость
 
Группа: Новичок
Сообщений: 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?
Заранее благодарен за помощь !
|
|
|
|
|
Aug 18 2006, 12:06
|
Местный
  
Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545

|
Цитата Я представляю себе процесс так - во время загрузки из микросхемы FLASH сидящей на ноге NCSO происходит копирование данных по адресу 0x00300000 во внутреннюю память МК ( общим объемом 256 kb ). Затем происходит Remap , и данные участки становятся доступными с адреса 0x00. Так, только это происходит не автоматически. Начинает выполняться программа из FLASH. Из FLASH выполняется STARTUP, в котором и есть это копирование программы в ОЗУ. Цитата Какой объем памяти из 256 kb выделяется на память программ с учетом использования внутренней периферии , которой тоже выделяется память из этого же объема ? Все 256 Кб используются по собственному усмотрению для программ, данных и стека. Что значит часть памяти выделена для периферии??? Цитата Каким образом организуется защита участка памяти программ ? Скорее всего никак, я, по крайней мере никаких упоминаний об этом не нашел. Цитата В случае нехватки внутренней памяти под память программ каким образом можно подцепить внешнее ОЗУ для расширения ? Или же в МК есть еще память , помимо 256 kb? Читай DataSheet, там только 256 Кбайт. Можно подключить и внешнюю память.
|
|
|
|
|
Aug 18 2006, 12:53
|
Частый гость
 
Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630

|
Благодарю ! По поводу вопроса о выделении памяти периферии. В даташите указано , что интегрированная в МК периферия размещается в верхних 4 Mb адресного пространства , а так же дана карта ее распределения по адресам ( стр. 17 Peripheral Memory Map - карта прилагается ). То есть , насколько я понимаю , периферия и программный код логически расположены в различных адресных пространствах , но физически в одной 256 kb области. Согласно Peripheral Memory Map объем памяти периферии равен 128 kb ( просуммировал выделенные в отдельности для каждого из устройств участки ) . Таким образом на память программ остается 128 kb . Или я что - то не так понимаю ?
|
|
|
|
|
Aug 18 2006, 13:03
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 18 2006, 14:40
|
Частый гость
 
Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630

|
to afad : to aaarrr : "Так адреса дешифрировать проще." Почему проще ?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|