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

 
 
> IAR Flashloader для AT91RM9200 + AM29LV160D, Выкладываю. Может кому будет полезно.
VladislavS
сообщение Jun 20 2005, 06:56
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Только начал работать с ARM и сразу на AT91RM9200. До этого имел дело c ATMega128. Потихоньку начал разбираться. Сначала во внутренней RAM простенькие программы запускал, шупал настройки и проникался масштабом бедствий. Потом дошло дело до Flashloader. Два дня отладчика и он заработал.

В эттаче FlashLoader для AT91RM9200 + AM29LV160DB(T) с исходниками.
Может кому полезно будет.

Ну и попутно вопросы созрели:

1. Помогите разобраться с тактовыми частотами. PLLB = 96 МГц c выходом 48 для USB это понятно. Все остальное буду тактировать от PLLA. Какую MCK надо подать на Memory Controller, если на нем подключено AM29LV160DB 70 нc и SDRAM с CL=2 при 100 МГц.

2. Тактовая на SDRAM равна MCK? Тогда что лучше в плане производительности
a) Процессор на 180 МГц и SDRAM на 90 МГц
б) Процессор на 100 Мгц и SDRAM на 100 МГц
Код будет исполняться из SDRAM.

3. Не совсем понял с времянкой работы FLASH на SMC. Во флэшлоадере MCK у меня 96 МГц c PLLB и все настройки SMC по умолчанию. Как это вяжется с 70 нc скоростью микросхемы AM29LV160D? Похоже, я что-то не понимаю.

4. Стоит ли стэк помещать во внутренней RAM процессора, а не в SDRAM. Получу ли я прибавку в скорости. Как к этому отнесется кэш?

Прикрепленный файл  FL_AT91RM9200_AM29LV160D.RAR ( 33.65 килобайт ) Кол-во скачиваний: 364
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 38)
VladislavS
сообщение Jun 20 2005, 13:57
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



С вопросом номер 3 разобрался сам. Был невнимателен и не заметил, что Flashloader работает не на частоте PLLB, а на частоте PLLB/16. А это всего лишь 6 МГц. Кстати, наверное надо в макросе флэшлоадера прописать тактироваться от (Main Clock)/4 . Так можно будет шить на системах, где PLLB не заводится.
Go to the top of the page
 
+Quote Post
GSG
сообщение Jun 21 2005, 07:43
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 35
Регистрация: 21-06-05
Пользователь №: 6 178



Цитата
1. Помогите разобраться с тактовыми частотами. PLLB = 96 МГц c выходом 48 для USB это понятно. Все остальное буду тактировать от PLLA. Какую MCK надо подать на Memory Controller, если на нем подключено AM29LV160DB 70 нc и SDRAM с CL=2 при 100 МГц.

2. Тактовая на SDRAM равна MCK? Тогда что лучше в плане производительности
  a) Процессор на 180 МГц и SDRAM на 90 МГц
  б) Процессор на 100 Мгц и SDRAM на 100 МГц
Код будет исполняться из SDRAM.

3. Не совсем понял с времянкой работы FLASH на SMC. Во флэшлоадере MCK у меня 96 МГц c PLLB и все настройки SMC по умолчанию. Как это вяжется с 70 нc скоростью микросхемы AM29LV160D? Похоже, я что-то не понимаю.

4. Стоит ли стэк помещать во внутренней RAM процессора, а не в SDRAM. Получу ли я прибавку в скорости. Как к этому отнесется кэш?


Ответ на первый и попутно на второй вопросы - с точки зрения производительности лучше :
a) Процессор на 200 МГц и SDRAM на 100 МГц, но т.к производитель нормирует максимальную частоту работы на внешней шине всего лишь 80 Мhz, то есть ещё 2 варианта:
б) Процессор на 209 МГц и SDRAM на 70(209/3) МГц;
в) Процессор на 160 МГц и SDRAM на 80 МГц.
ВЫбирай сам.

Ответ на третий вопрос - нужно внимательно посмотреть на значение МСК и настройки SMC для нужного nCS.

Ответ на четвертый вопрос - по моему мнению стэк стоит помещать во внутренней RAM процессора, а не в SDRAM, работать будет быстрее.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jun 21 2005, 09:11
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Просветление потихоньку приходит. Спасибо. С частотами разобрался. FLASH пашет как милая, SDRAM сейчас буду запускать.

А нет случайно примера как в IAR написать команды включения кэшей? Что-то пока не приходит просветление по поводу:

CP15 registers can only be accessed in privileged mode by:
• MCR (Move to Coprocessor from ARM Register) instruction
Go to the top of the page
 
+Quote Post
GSG
сообщение Jun 21 2005, 09:33
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 35
Регистрация: 21-06-05
Пользователь №: 6 178



Случайно примера как в IAR написать команды включения кэшей у меня нет, а то что касается включения и настройки кэш-памяти - можно посмотреть как это делается в Linux.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jun 21 2005, 11:51
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Надо отдать должное IAR за исчерпывающую документацию. Для включения кэша (вообще для доступа к CP15) можно пользоваться функцией __MCR void __MCR(__ul coproc, __ul opcode_1, __ul src, __ul CRn, __ulCRm, __ul opcode_2); Generates a coprocessor write instruction (MCR). Так как это надо делать в режиме ARM, то гораздо проще оказалось прописать все в cstartup.s79 прямо на ассемблере.
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 16 2005, 14:27
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



А можно что-нибудь по-проще?
Не понимаю как его (flashloader) использовать - сам пока только "лампочками мигаю" и тестирую (пишу/читаю) SDRAM. Гружусь Xmodemом (виглер бастует).
Вот...
А записать/прочитать флэш (такой же) ой как хочется. Об kernele конечно не может быть и речи, пока...

Не нашёл в этом loaderе даже обращения к SMC.

Ткните ПОЖАЛУЙСТА куда копать?
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 16 2005, 17:12
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Для того чтобы использовать этот FlashLoader надо подключиться по J-TAG. Не важно чем Wiggler подойдет. С его помощью можно flash прошить. Подробнее смотри EWARM User Guide страницу 232. Там все подробно.

Для X-Modem это решение не идет. Подойдет вот это
http://www.ucrouter.ru/download/AT91RM9200-29lv160d.bin
Собственно там еще много чего интересного есть.
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 21 2005, 10:45
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Цитата(VladislavS @ Sep 16 2005, 20:12)
Для того чтобы использовать этот FlashLoader надо подключиться по J-TAG. Не важно чем Wiggler подойдет. С его помощью можно flash прошить. Подробнее смотри EWARM User Guide страницу 232. Там все подробно.

Читал. Между делом и флэш раскочегарил - пишу, читаю, стираю.

Но т.к. слишком зелёный в этом деле (начал вот читать уже с первых страниц) - непонял что конкретно подсовывать в качестве пути в диалог Override default flash loader path?
FlashAT91RM9200_AM29LV160.d79?
выдаёт ошибку "Overlapping address ranges"
И в перспктиве осталось неясным как выполнить этот самый пункт первый
"C-SPY downloads the flash loader into target RAM" ?

PS> А как вообще IAR с Wigglerом совмещать надо?
схема с двумя буферами и ресетами (SRst инвентирован), IAR_4.30
Я как-то пару раз вошёл в debug (CtrlD) режим без проблем.
А теперь никак: "Check that all cables are connected and power is OK"
Настройки wigglerа не менял, изменение последних (скорость и ресет) результатов недаёт. А OCD Commander работает...

Здесь промелькала тема что IAR4.11 c Wigglerом не дружит. Ну блин это же не значит что савсем несовместим! Между прочим, насколько я теперь вспоминаю я перезапустил IAR с другим проектом. И теперь он Wiggler не видит angry.gif
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 21 2005, 18:55
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



В меню настройках Debuger надо указать Use macro file на файл .mac, а на вкладке Download галку Use flashloader. И потом добавить запись с указанием файлв d79. В параметрах указать стартовый адрес flash. Дополнительно можно задать параметры --erasechip чтобы стереть весь чип перед записью или --eraseonly чтобы только стереть чип без записи.

Кстати, на подходе новая версия с поддержкой DataFlash на SPI. На выходных дотестирую и выложу. В связи с этим вопрос к спецам возник. Я хочу сделть команду, которая позволит прописать в вектора прерываний данные, чтобы BootLoader распознал прошивку как загрузочную. Что делать с 6-м вектором понятно - там рамер прошивки и параметры flash, которые определяются на автомате. А как бытьс остальными векторами? Если они не прописаны, что туда записать? Есть идея просто 0-й продублировать. Прокатит ли?
Go to the top of the page
 
+Quote Post
GSG
сообщение Sep 22 2005, 10:39
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 35
Регистрация: 21-06-05
Пользователь №: 6 178



Мы просто меняли в редакторе нех-значение 6 байта и всё работало.
В принципе и у тебя должно получиться.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 22 2005, 12:30
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Вопрос не в том чтобы загрузиться, это я как раз умею и без hex-редактора. Вопрос в том чтобы FlashLoader делал поправки на автомате. Для того чтобы прошивка загрузилась из SPI надо выполнить два условия:
1) Шестой вектор содержит информацию о размере кода и типе Flash
2) Все остальные вектора команду перехода.

Если с первым все понятно - никаких вольностей, все до бита определено, то ко второму вопросу можно подойти творчески.
- ничего не менять. Это правильней всего, пусть программист сам все определит в программе.
- если какие-то вектора пустуют, то их можно насильно прописать. Это упростит жизнь новичкам, которые еще не весь даташит наизусть знают. Только хочется сделать это максимально правильно.
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 23 2005, 14:05
Сообщение #13


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Такие дела: Wiggler глючит - отложил пока, в использование Embedded srvcов не въехал. Написал свой загрузчик по XModemу в SDRAM оттуда во флэш - в начало 0го сектора.
Загружаю(во флэш) тестовый .bin с добавлеными вперёд 32 байтами. В шестой вектор пишу размер всего кода. Пробовал как Little так BigEndian (в отношении первых 32 бойтов). Также пробовал перекл. флэш в 8бит (пин у неё ByteModeSelect).
Не грузит с флэша и всё angry.gif
Подскажите мож чё нетак делаю?
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 23 2005, 14:24
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Еще раз внимательно прочти страницу 88 и особенно 89 даташита doc1768.pdf.
Лучше чем там написано объяснить трудно. Вкратце - шестрой вектор содержит ИНФОРМАЦИЮ О ТИПЕ МИКРОСХЕМЫ Flash и РАЗМЕР КОДА для загрузки. А остальные вектора команды LDR или B. И все будет грузится. Кстати, эти 32 байта не добавляются, а являются частью кода, так что лучше скомпилировать код сразу как надо.

Только не советую проводить опыты без JTAG, а то как только оно начнет грузиться из SPI, то про загрузку по XModem можно забыть. Разве что NPCS0 отключить джампером. Ну или предварительно загрузчик в параллельную флэш прописать и дергать BMS в случае чего.

Ну и про Embedded Services - все работает. Причем, точно так как написано в даташите. Надо только не забывать проверять статус занятости микросхемы перед выполнением каких-либо действий с ней.
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 23 2005, 19:15
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Цитата(VladislavS @ Sep 23 2005, 17:24)
Кстати, эти 32 байта не добавляются, а являются частью кода, так что лучше скомпилировать код сразу как надо.
догадывался, но я то ожидал увидеть вектора в начале .bin'а, а там только первый есть, остальные - нули.
Может покажете свой cstartup.s79 - ведь цивильно вектора вписываются туда как я понял из EWARM_CompilerReference.pdf (а не hex редактором). Кстати надоли тоогда что менять в.xcl ? Впринципе же эти директивы о содержимом табдицы векторов можно в любой имеющийся в проекте .s79 засунуть?
Сам то я пользуюсь пока тест проектом от тов. Bender'а: там был в OBJ директории cstartup.r79 - я его потёр - ничё неизменилось.
Теперь про шестой вектор.
В шите говориться об установках для dataFlash. Но у меня то обычная 29LV160 от EBI через SMC. SPI нету. А стр. 95 п.7.3.3.5 упоминается размер кода в шестом векторе.
Благодарю всех за исчерпывающие ответы особенно что-нибудь про этот cstartup. Как-то сам теперь удивляюсь что позади работа c 51ми TUSB3210 и 7C68013(EZ-FX2, USB2.0 поднимал - детский сад, как теперь вижу) на Keilе, а вот удалось прожить не вдаваясь в подробности cstartup'ов - ,были там какие-то - ну хрен с ними - и так работало...
Go to the top of the page
 
+Quote Post
Bender
сообщение Sep 24 2005, 01:26
Сообщение #16


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

Группа: Участник
Сообщений: 123
Регистрация: 28-06-05
Из: Тула
Пользователь №: 6 361



Да, аналогично smile.gif
У фуджиков тоже были свои стартап'ы, но я их почти не трогал-все работало и так.
А тут без помощи не обойтись - все таки не понятно ни с .xcl, ни с cstartup.s79 - не мог бы кто нибудь поподробнее осветить это дело?

2VVJ- Тут буквально в пятницу в конце рабочего дня вроде заработал WIGGLER- похоже следовало поставить галку в DEBUGGER/DOWNLOAD на пункте Attach programm - стал коннектится, но это теперь до понедельника.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 24 2005, 06:04
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Ребят, давайте мух от котлет отделять.

1. vvj, Если у тебя 29LV160 в 16-разрядном режиме, то забей на Bootloader. Тебе достаточно прошить код, перевести BMS в 0 и он стартанет прямо с флэшки. Только не забывай про ремэпы и что внутренняя SRAM проца будет по адресу 0x200000 и это надо указать в XCL-файле. Для 8-разрядного режима будет работать механизм Bootloader, только почитай Errata пункт 37.

2. Насчет cstartup.s79 и векторов. Все вектора, которые используются в приложении, будут вкомпилены в выходной файл. Если часть векторов не используется, как в вашем случае, на их местах будут нули. Для обычного приложения это штатная ситуация. Если мы хотим чтобы BootLoader признал наш код за валидное приложение, то должны прописать все вектора, а шестой еще и специальной информацией. Проще всего это сделать в cstartup.s79. Пример такого cstartup.s79 прикрепляю. Обратить внимание на код по адресу 0x14.

3. Насчет XCL-файла. Смею вас огорчить, но запрограммировать ARM в IAR не прописав руками XCL нереально. Справедливости ради надо отметить, что в настройках линкера есть кнопочка Command line configuration tool, но я как-то попробовал ей законфигурить и плюнув просто написал все в XCL. А необходимо это все по очень простой причине. ВЫ ДОЛЖНЫ СКАЗАТЬ КОМПИЛЯТОРУ СКОЛЬКО КАКОЙ ПАМЯТИ ПО КАКИМ АДРЕСАМ ЕСТЬ В СИСТЕМЕ И КУДА РАЗМЕЩАТЬ ВЕКТОРА ПРЕРЫВАНИЙ, СТЭКИ, СЕГМЕНТЫ КОДА И ДАННЫХ, КУЧУ. Ведь ARM может иметь довольно богатый набор различных типов памяти на борту и за бортом. Плюс тот же REMAP надо учесть. При этом, в отличии напримр от AVR, адресное пространство данных не отделено от адресного пространства программ, что дает множество возможных вариантов построения проекта. На этом месте советую почитать про сегменты в IAR-вском хэлпе.

4. Более того, один проект обычно содержит несколько XCL. Например, для отладки совсем не обязательно прошивать флэшки, а можно использовать для размещения кода SDRAM. При финальной же компиляции все переносится во flash. И примеров, когда надо использовать разную память в проекте, может быть множество.

5. Насчет Wiggler. Он хорош, если ARM для вас хобби. Но если это ваша работа, то я не понимаю как можно экономить на инструменте. Сравните стоимость фирменного J-Link и более чем вдвое дешевого MT-Link со стоимостью изготовления опытной четырех-шестислойной печатной платы для AT91RM9200 со всей его периферией !!! После подписания счета на печатные платы мой директор счет на J-Link подмахнул даже не спросив что это.

Кстати, Flashloader для DataFlash уже работает. Так что, сегодня-завтра еще обкатаю на предмет ошибок и в понедельник выложу.
Прикрепленные файлы
Прикрепленный файл  cstartup.rar ( 1.92 килобайт ) Кол-во скачиваний: 71
 
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 26 2005, 04:25
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Как и обещал выкладываю новую версию FlashLoader-а для IAR+AT91RM9200.
Добавлена поддержка DataFlash AT45DB321 и AT45DB642. Остальные легко добавляются по аналогии. Обратите внимание на параметры, которые надо передать при запуске - они орсаны в файле !Parameters.txt.
Прикрепленные файлы
Прикрепленный файл  FL_AT91RM9200_AM29_AT45.RAR ( 94.64 килобайт ) Кол-во скачиваний: 249
 
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 27 2005, 14:12
Сообщение #19


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



извиняюсь за повтор но наболело: cranky.gif
Закачиваю значит бинарник в SDRAM и прыгаю по 0x20000000
Начинает работать, криво правда (- медленно) - потом разберусь...
Если пишу закаченное в 16битный Flash - при BMS=0 - не начинает.
Содержимое флэша уже проверял после ресета.
Где та собака ? smile3046.gif
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 27 2005, 17:37
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Может просто неправильно инициализируешь клоки? Не забудь, что SCM для флэшки надо инициализировать до того как переходишь на высокие тактовые MCK - флэшка то поди 70 нс?

А то что из SDRAM работает это заслуга загрузчика, который за тебя уже все инициализировал.
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 28 2005, 13:51
Сообщение #21


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Цитата(VladislavS @ Sep 27 2005, 20:37)
А то что из SDRAM работает это заслуга загрузчика, который за тебя уже все инициализировал.

Виноват - не работает из SDRAMа - это из SRAMа код начинает работать...
Потому как загружаемая прога компайлится используя тотже cstartup и .xcl для запуска из SRAM (по 0x00) - прав ли я?
Но загрузив в SDRAM прект (с ftp://at91dist:distrib@81.80.104.162/ "AT91RM9200-Interrupt", из архива Прикрепленный файл  AT91RM9200_BasicTools_IAR4_11A_1_1.zip ( 572.63 килобайт ) Кол-во скачиваний: 115
) скомпайленый под at91_lnk_ram20000000.xlc, тоже наблюдаю тишину. Хотя с XModema, код скомпайленый, используя at91_lnk_ram.xlc и at91_lnk_ram200.xlc "лампочками мигает".
Может я прыгаю не так: Jump((unsigned int)0x20000000);
, хотя код взят из исходников loader'а (jump.s79):

#include <at91rm9200dk.h>
MODULE MyJump
COMMON INTVEC:CODE:NOROOT(2)
PUBLIC Jump
Jump:
CODE32
msr CPSR_c, #(ARM_MODE_SYS | I_BIT | F_BIT)
mov pc, r0
ENDMOD
END
Кстати зачем перед прыжком там устанавливается режим процессора (или поправьте меня) ?
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 28 2005, 14:18
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



JTAG по тебе плачет. Недавно только на дружественном этому форуме кто-то спрашивал: "И что вы там JTAGом отлаживаете?". Мне кажется что это как раз тот случай.

А SDRAM А.C.Пушкин инициализирует? Ну хоть убейте, но никогда не поверю, что можно вслепую это сделать.
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 28 2005, 16:30
Сообщение #23


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Цитата(VladislavS @ Sep 28 2005, 17:18)
JTAG по тебе плачет.
blush.gif
Цитата(VladislavS @ Sep 28 2005, 17:18)
А SDRAM А.C.Пушкин инициализирует?
Я честно говоря думал что мой "загрузчик" "оставляет" после себя (перед прыжком) проинициализарованный SDRC. Если не так, то как закаченный им в SDRAM код вообще должен считываться?
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 28 2005, 18:26
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Ну из твоих постов не было очевидно, что ты проверяешь то что в SDRAM лежит. А что значит "прыжок" в твоем понимании? Почему ты переход по адресу 0x20000000 делаешь? Там ведь вектора прерываний в начале. А в нулевом стоит команда перехода на __program_start. Ты уверен что у тебя код скомпилирован так, что __program_start в SDRAM попадает? Посмотри Memory map, там все видно будет. Возможно, тебе нужно делать "прыжок", как ты говоришь, по адресу 0x20000040. А лучше написать XCL правильно и загружать код в соответствии с этим XCL.
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 29 2005, 10:17
Сообщение #25


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Такой вопрос:
если посмотреть на map файлы каждой из конфигураций
Debug 0x20000000\List\interrupt.map:
Absolute parts
ENTRY ADDRESS REF BY
===== ======= ======
_HEAP_SIZE 00010000
_IRQ_STACK_SIZE 00000004
_CSTACK_SIZE 00010000
RAMEND 203FFFFF
RAMSTART 20000000
ROMEND 203FFFFF
ROMSTART 20000000

Debug 0x200000\List\interrupt.map:
_HEAP_SIZE 00000100
_IRQ_STACK_SIZE 00000004
_CSTACK_SIZE 00000100
RAMEND 00203FFF
RAMSTART 00200000
ROMEND 00203FFF
ROMSTART 00200000

Debug 0x00\List\interrupt.map:
_HEAP_SIZE 00000100
_IRQ_STACK_SIZE 00000004
_CSTACK_SIZE 00000100
RAMEND 00003FFF
RAMSTART 00000000
ROMEND 00003FFF
ROMSTART 00000000
то вроде бы отвечает ожиданиям, а вот если глядеть на визуальный AddressMap из Command File Configuration Tool от Linker'а то всё одно и тоже:
0-3F Вектора, 8000-F FFFF ROM, 10 0000-7F FFFF RAM
при любой (из трёх) выбранной конфигурации!

и я уже не понимаю что имеется ввиду под ROMом и RAMом?

2. Записал 1MB c ROMа(с 0x10 0000) во FLASH и всё равно при BMS=0 не грузится. Хотя должен ли BootLoader стартануть с 16b flash'ки?
причём осциллографом видно что (при BMS0) читает после ресета - nCS0 выдаёт меандр ~5kHz в течении ~10 секунд
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 29 2005, 13:59
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Ну блин, когда BMS=0, то FLASH с адреса 0x00000000 начинается, а SRAM с 0x200000.

-DRAMSTART=200040
-DRAMEND=203FFF

-DSDRAMSTART=20000000
-DSDRAMEND=21FFFFFF

-DROMSTART=40
-DROMEND=1FFFFF

Вот с таким XCL сможешь из FLASH стартануть, только не забудь в low_level_init SDRAM инициализировать.


Код
//   INTVEC     -- Exception vector table.
//   SWITAB     -- Software interrupt vector table.
//   ICODE      -- Startup (cstartup) and exception code.
//   DIFUNCT    -- Dynamic initialization vectors used by C++.
//   CODE       -- Compiler generated code.
//   CODE_I     -- Compiler generated code declared __ramfunc (executes in RAM)
//   CODE_ID    -- Initializer for CODE_I (ROM).
// -------------
// Data segments - may be placed anywhere in memory.
// -------------
//   CSTACK     -- The stack used by C/C++ programs (system and user mode).
//   IRQ_STACK  -- The stack used by IRQ service routines.
//   SVC_STACK  -- The stack used in supervisor mode
//                 (Define other exception stacks as needed for
//                 FIQ, ABT, UND).
//   HEAP       -- The heap used by malloc and free in C and new and
//                 delete in C++.
//   INITTAB    -- Table containing addresses and sizes of segments that
//                 need to be initialized at startup (by cstartup).
//   CHECKSUM   -- The linker places checksum byte(s) in this segment,
//                 when the -J linker command line option is used.
//   DATA_y     -- Data objects.
//
// Where _y can be one of:
//
//   _AN        -- Holds uninitialized located objects, i.e. objects with
//                 an absolute location given by the @ operator or the
//                 #pragma location directive. Since these segments
//                 contain objects which already have a fixed address,
//                 they should not be mentioned in this linker command
//                 file.
//   _C         -- Constants (ROM).
//   _I         -- Initialized data (RAM).
//   _ID        -- The original content of _I (copied to _I by cstartup) (ROM).
//   _N         -- Uninitialized data (RAM).
//   _Z         -- Zero initialized data (RAM).

-carm

-DRAMSTART=200040
-DRAMEND=203FFF

-DSDRAMSTART=20000000
-DSDRAMEND=21FFFFFF

-DROMSTART=40
-DROMEND=1FFFFF

-Z(CODE)INTVEC=00-3F

-Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND
-Z(CODE)SWITAB=ROMSTART-ROMEND

-Z(CODE)CODE=ROMSTART-ROMEND

-Z(CONST)CODE_ID=ROMSTART-ROMEND

-Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND
-Z(CONST)CHECKSUM=ROMSTART-ROMEND

//************************************************
// Data segments.
//************************************************

-Z(DATA)DATA_I,DATA_Z,DATA_N=SDRAMSTART-SDRAMEND

//************************************************
// __ramfunc code copied to and executed from RAM.
//************************************************

-Z(DATA)CODE_I=SDRAMSTART-SDRAMEND

-QCODE_I=CODE_ID

//*************************************************************************
// Stack and heap segments.
//*************************************************************************

-D_CSTACK_SIZE=800
// -D_SVC_STACK_SIZE=10
-D_IRQ_STACK_SIZE=300
-D_HEAP_SIZE=4000

-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND
// -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)HEAP+_HEAP_SIZE=SDRAMSTART-SDRAMEND
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 29 2005, 18:43
Сообщение #27


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Цитата(VladislavS @ Sep 29 2005, 16:59)
Вот с таким XCL сможешь из FLASH стартануть, только не забудь в low_level_init SDRAM инициализировать.

Есть ну очень тупая апликейшн: только лампочками мигает - никаких там PLL,SDRAM etc.
Она работает со SRAMа закружаясь по XModem'у.
Если её скомпайлить с приведённым выше .xcl и прошить во FLASH - должна ли она работать (у меня не хочет) или необходимо сделать что-то ещё ?
cstartup сейчас default'овый - но ведь при BMS=0 никто и не "рыщит" за первыми 8ю векторами.

Кстати, похоже что этот Linker Command File Configuration Tool не "парсит" изменения в отредоктированном ручками .xcl - всё время показывает свои
Region: ARM
[0-3F], [800-3FFF]
что вообще ни пришей ни..
И ещё: не нашёл в своём проекте .map файлов. Ни "на диске" , ни в настройках. В скачанных с инета проектах в List директории один .map, а у меня там куча .lst и .s79ых. Настораживает однако.
Go to the top of the page
 
+Quote Post
Bender
сообщение Sep 30 2005, 05:01
Сообщение #28


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

Группа: Участник
Сообщений: 123
Регистрация: 28-06-05
Из: Тула
Пользователь №: 6 361



Цитата(vvj @ Sep 29 2005, 21:43)
И ещё: не нашёл в своём проекте .map файлов. Ни "на диске" , ни в настройках. В скачанных с инета проектах в List директории один .map, а у меня там куча .lst и .s79ых. Настораживает однако.

Посмотри настройки линкера - закладка "LIST" -> segment map,module map,static overlay map.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 30 2005, 05:37
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Вот тебе XCL для "тупого апликэйшина", работающего из FLASH при BMS=0. На коком MCK твой "тупой апликэйшин" работает? На забудь перед переходом с часового кварца на основной сделать что-то типа
SMC_CSR0= (1<<13)|(1<<12)|(3<<8)|(1<<7)|5; //DWB=1 | BAT=1 | TDF=3 | WSEN | NWS=4


Код
-carm

-DRAMSTART=200040
-DRAMEND=203FFF

-DROMSTART=40
-DROMEND=1FFFFF

-Z(CODE)INTVEC=00-3F

-Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND
-Z(CODE)SWITAB=ROMSTART-ROMEND

-Z(CODE)CODE=ROMSTART-ROMEND

-Z(CONST)CODE_ID=ROMSTART-ROMEND

-Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND
-Z(CONST)CHECKSUM=ROMSTART-ROMEND

//************************************************
// Data segments.
//************************************************

-Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND

//************************************************
// __ramfunc code copied to and executed from RAM.
//************************************************

-Z(DATA)CODE_I=RAMSTART-RAMEND

-QCODE_I=CODE_ID

//*************************************************************************
// Stack and heap segments.
//*************************************************************************

-D_CSTACK_SIZE=400
// -D_SVC_STACK_SIZE=10
-D_IRQ_STACK_SIZE=100
-D_HEAP_SIZE=0000

-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND
// -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 30 2005, 09:50
Сообщение #30


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Код
#include "AT91RM9200.h"
unsigned long cnt;
void main(void)
{
* AT91C_PIOA_OER=AT91C_PIO_PA0 | AT91C_PIO_PA1;
 for (int l = 0; l<10; l++)
 {
   * AT91C_PIOA_SODR=AT91C_PIO_PA0;
   * AT91C_PIOA_SODR=AT91C_PIO_PA1;
   for (cnt=0;cnt<99999;cnt++);
   * AT91C_PIOA_CODR=AT91C_PIO_PA0;
   * AT91C_PIOA_CODR=AT91C_PIO_PA1;
   for (cnt=0;cnt<99999;cnt++);
 }
}
Тупее не придумал, но даже это с флэша не грузится. Может в default'овом cstartup'е дело?
EDIT : лампочки зажглися w00t.gif

a14.gif
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 30 2005, 09:52
Сообщение #31


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Заработало, извиняюсь, видимо php здесь не сработал bb-offtopic.gif

TBD: эти "резонанс-посты" можно было бы удалить
Go to the top of the page
 
+Quote Post
vvj
сообщение Sep 30 2005, 09:53
Сообщение #32


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Заработало, извиняюсь, видимо php здесь не сработал bb-offtopic.gif
TBD: эти "резонанс-посты" можно было бы удалить
А FLом займёмся как только JTAG приедет
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 30 2005, 16:16
Сообщение #33


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Так заработало или нет?

Народ, а FlashLoader то у кого-нибудь работает? А то может зря распинался?
Go to the top of the page
 
+Quote Post
vvj
сообщение Oct 4 2005, 19:28
Сообщение #34


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Цитата(VladislavS @ Sep 30 2005, 19:16)
А то может зря распинался?

ни в коем случае!
J-Link вчера приехал и усё сегодня заработало!
Созрели и вопросы (ответ конечно в 1768, но что не нашёл пока): при BMS=0, по 0му адресу-флэш, а по какому адресу начинается SRAM ? Надо ли делать ремап и что он даст?
Почему спрашиваю - по дисассемблеру видно что переменные индекса цикла читаются из ~[PC,#+160] но ведь код выполняется из флэша - писать(держать там переменные) туда "нельзя"...
При BMS=1 смотрю в дебагере (работает BootLoader - ремапа значит небыло) по адресу 0x00 и 0x10_0000 - разный код.

А вообще конечно от всей души за FL благодарю!
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Oct 5 2005, 05:25
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



При BMS=0 Flash начинается с адреса 0x00000000 и копия с 0x10000000, а SRAM c 0x00200000

При BMS=1 Flash начинается с адреса 0x10000000, а SRAM c 0x00000000 и копия с 0x00200000

Remap лучше делать, так как вектора прерываний читаются из SRAM быстрее, чем из FLASH. Кэширование это немного сглаживает, но не до конца - разница в скорости исполнения кода небольшая есть.
Go to the top of the page
 
+Quote Post
vvj
сообщение Oct 5 2005, 08:30
Сообщение #36


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



А не могли бы пояснить с переменными: по инструкции LDR я не вижу что бы "cnt" читалась в R2 именно из SRAM, а вот обведённый красным комментарий сообщает об обратном:
Прикрепленное изображение

Не имеет ли к этому отношение запись в .xcl
Цитата
//************************************************
// __ramfunc code copied to and executed from RAM.
//************************************************

-Z(DATA)CODE_I=RAMSTART-RAMEND

-QCODE_I=CODE_ID

И что имеется ввиду в Debug Log'е : Driver does not support code coverage. ?
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Oct 5 2005, 13:27
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



По директиве LDR надо просто почитать о методах адресации. Я в этом не силен.

Запись
Код
-Z(DATA)CODE_I=RAMSTART-RAMEND

-QCODE_I=CODE_ID

сделана для функций, которые при инициализации сегментов копируются из ПЗУ в ОЗУ и оттуда запускаются. В программе такие функции имеют модификатор __ramfunc.
Go to the top of the page
 
+Quote Post
vvj
сообщение Oct 6 2005, 13:52
Сообщение #38


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 20-01-05
Пользователь №: 2 090



Цитата(VladislavS @ Sep 24 2005, 09:04)
Насчет XCL-файла. Смею вас огорчить, но запрограммировать ARM в IAR не прописав руками XCL нереально.

Возвращаясь к .XCL и не только: а нет ли у кого IAR'овского проекта c U-Boot'ом ?
Сам пока не догоняю возможно ли это всё в одном проекте - у него там и BootImage, и переменные окружения, и запакованный код.
Это всё по отдельности прошивать надо или возможно "за один присест" ?
FlashLoader'ом?
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Oct 6 2005, 18:09
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



В принципе, IAR-ом c FlashLoader-ом можно прошить любой предварительно подготовленный файл в формате simple-code. Про этот формат есть в его доках. То есть, можно скомпилить чем хочешь в бинарник, сделать несложный конвертер в simple-code и шить. Но это, по большомуу счету, извращение. Намного проще залить по X-Modem вот это http://www.ucrouter.ru/download/AT91RM9200-29lv160d.bin и шить что хочешь и куда хочешь. FlashLoader удобен когда весь проект в IAR сделан и отлаживается.
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 Текстовая версия Сейчас: 19th July 2025 - 22:00
Рейтинг@Mail.ru


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