Перейти к содержанию
    

IAR Flashloader для AT91RM9200 + AM29LV160D

Только начал работать с 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С вопросом номер 3 разобрался сам. Был невнимателен и не заметил, что Flashloader работает не на частоте PLLB, а на частоте PLLB/16. А это всего лишь 6 МГц. Кстати, наверное надо в макросе флэшлоадера прописать тактироваться от (Main Clock)/4 . Так можно будет шить на системах, где PLLB не заводится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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, работать будет быстрее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

CP15 registers can only be accessed in privileged mode by:

• MCR (Move to Coprocessor from ARM Register) instruction

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Случайно примера как в IAR написать команды включения кэшей у меня нет, а то что касается включения и настройки кэш-памяти - можно посмотреть как это делается в Linux.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо отдать должное 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 прямо на ассемблере.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно что-нибудь по-проще?

Не понимаю как его (flashloader) использовать - сам пока только "лампочками мигаю" и тестирую (пишу/читаю) SDRAM. Гружусь Xmodemом (виглер бастует).

Вот...

А записать/прочитать флэш (такой же) ой как хочется. Об kernele конечно не может быть и речи, пока...

 

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

 

Ткните ПОЖАЛУЙСТА куда копать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Для X-Modem это решение не идет. Подойдет вот это

http://www.ucrouter.ru/download/AT91RM9200-29lv160d.bin

Собственно там еще много чего интересного есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для того чтобы использовать этот 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 не видит :angry2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Кстати, на подходе новая версия с поддержкой DataFlash на SPI. На выходных дотестирую и выложу. В связи с этим вопрос к спецам возник. Я хочу сделть команду, которая позволит прописать в вектора прерываний данные, чтобы BootLoader распознал прошивку как загрузочную. Что делать с 6-м вектором понятно - там рамер прошивки и параметры flash, которые определяются на автомате. А как бытьс остальными векторами? Если они не прописаны, что туда записать? Есть идея просто 0-й продублировать. Прокатит ли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мы просто меняли в редакторе нех-значение 6 байта и всё работало.

В принципе и у тебя должно получиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос не в том чтобы загрузиться, это я как раз умею и без hex-редактора. Вопрос в том чтобы FlashLoader делал поправки на автомате. Для того чтобы прошивка загрузилась из SPI надо выполнить два условия:

1) Шестой вектор содержит информацию о размере кода и типе Flash

2) Все остальные вектора команду перехода.

 

Если с первым все понятно - никаких вольностей, все до бита определено, то ко второму вопросу можно подойти творчески.

- ничего не менять. Это правильней всего, пусть программист сам все определит в программе.

- если какие-то вектора пустуют, то их можно насильно прописать. Это упростит жизнь новичкам, которые еще не весь даташит наизусть знают. Только хочется сделать это максимально правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такие дела: Wiggler глючит - отложил пока, в использование Embedded srvcов не въехал. Написал свой загрузчик по XModemу в SDRAM оттуда во флэш - в начало 0го сектора.

Загружаю(во флэш) тестовый .bin с добавлеными вперёд 32 байтами. В шестой вектор пишу размер всего кода. Пробовал как Little так BigEndian (в отношении первых 32 бойтов). Также пробовал перекл. флэш в 8бит (пин у неё ByteModeSelect).

Не грузит с флэша и всё :angry2:

Подскажите мож чё нетак делаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще раз внимательно прочти страницу 88 и особенно 89 даташита doc1768.pdf.

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

 

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

 

Ну и про Embedded Services - все работает. Причем, точно так как написано в даташите. Надо только не забывать проверять статус занятости микросхемы перед выполнением каких-либо действий с ней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, эти 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'ов - ,были там какие-то - ну хрен с ними - и так работало...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...