Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с STK1000 для AVR32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Busel Roman
Пытаюсь программировать AP7000 в среде AVR32 Studio на языке С, без применения ОС Linux. Планировщик использую встроенный в AVR32 Studio.
Сразу написал программку по переменному переключению двух областей светодиодов LED0...LED7 (по 4 в каждой) через некоторую паузу. Все сразу заработало.
Далее решил ускорить работу микроконтроллера (по умолчанию все такты идут с частотой OSC0=20 MHz). Тут и возникли трудности.

ПРОБЛЕМА 1
Никак не могу заставить работать PLL на частоту 100 MHz (деление на 4 с последующим умножением на 20).
Текст программы следующий (часть кода, только то, что касается PLL):
Код
volatile avr32_pm_t *pm=&AVR32_PM;
pm->PLL0.pllosc=0;
pm->PLL0.pllmul=19;
pm->PLL0.plldiv=3;
pm->PLL0.pllopt=4;
pm->PLL0.pllen=1;
pm->MCCTRL.pllsel=1;

Микроконтроллер при запуске программы на выполнение сразу подвисает, в том числе и в режиме отладки.
После тщетных попыток добиться нормальной работы PLL, попробовал притормозить работу микроконтроллера, поделив тактовую частоту для CPU. Взамен приведенной выше части кода написал новые строки:
Код
pm->CKSEL.cpusel=2;
pm->CKSEL.cpudiv=1;

Единственный раз мне удалось откомпилировать и запустить на выполнение в STK1000. Вроде пауза между переключениями светодиодов увеличилась. Решил еще уменьшить частоту тактирования CPU изменив значение CKSEL.cpusel=5.

Вот тут и возникла
ПРОБЛЕМА 2
Программа компилируется успешно, однако, при попытке ее выполнения на STK1000, AVR32 Studio выдает ошибку:

Exception occurred during launch

Reason:
Connected to JTAGICE mkII version 4.38

Flash chip was not added.

No CFI device detected at address 0x00000000.


Далее любые мои действия по записи/стиранию Flash вызывают данную ошибку. То есть, фактически, я сейчас никак не могу изменить зашитую во Flash-память программу. Кроме того, в режиме Debug Run при пошаговом выполнении программы, строки выполняются не последовательно, а скачет сразу через несколько строк.

Прошу высказать свои мысли.

P.S. Хороший форум по AVR32: 3w avr32 ru
singlskv
Цитата(Busel Roman @ Jun 19 2007, 18:18) *
ПРОБЛЕМА 2
выдает ошибку:
Exception occurred during launch
Reason:
Connected to JTAGICE mkII version 4.38
Flash chip was not added.
No CFI device detected at address 0x00000000.

А что тут непонятного ?
Все бутлодеры я так понимаю вы уже из флеш стерли, так что теперь перепрошивка
только через JTAG.
Для того что бы можно было прошить внешнюю флеш через JTAG нужны 2 штуки:
- некоторый скрипт который будет конфигурировать(через JTAG) интерфейс
с внешней памятью (причем конкретно для Вашего чипа флеш)
- утилитки для стирания/записи Вашего типа флешь которые STK через JTAG будет
подсовывать контроллеру

P.S. c AVR32 пока не работал, так что это лишь общие соображения...
GDI
Может стоит Еррату почитать? AP7000 ещё вроде даже не выпускают, багов много у них... правда это моё имхо...
Busel Roman
Цитата(singlskv @ Jun 19 2007, 19:48) *
А что тут непонятного ?
...
P.S. c AVR32 пока не работал, так что это лишь общие соображения...


Прошиваю Flash, расположенную на STK1000 (в самом AVR32 Flash-память отсутствует, как собственно и RAM - есть только небольшой кэш данных и команд) непосредственно через JTAG ICE mkII.
Дело в том, что прошивать удавалось и без наличия загрузчиков, скриптов, утилит и т.п. Перестало прошиваться конкретно после записи во Flash откомпилированной программы со строками
Код
pm->CKSEL.cpusel=2;
pm->CKSEL.cpudiv=1;

которые инициализируют делитель тактовой частоты CPU микроконтроллера.
Для прошивки Flash STK1000 любым кодом может использоваться программа Cygwin (среда Linux под Windows). Так вот, та версия этой программы (еще 2006 года выпуска), которая была на установочном диске STK1000 (шел в комплекте), позволяет без проблем перезаписывать эту самую Flash после возникновения ошибки.

Пока я пришел к выводу, что проблема именно в этом Cygwin. AVR32 Studio тесно с ним связана, то есть написание программы происходит в среде AVR32 Studio, но запись кода идет неявно через Cygwin. Установка самой последней версии AVR32 Studio и всего что с ней в комплекте идет, ситуацию с ошибкой обращения к Flash не изменила. Сейчас пробую скрестить старую версию Cygwin с оболочкой AVR32 Studio.

P.S. В Errata моя ошибка не описана.
SpiritDance
По-моему несовместимость разных версий - это стандартный затык сигвина. Жаль что тулчейны у атмела не нативные. Видимо и в дальнейшем будет геморой.
singlskv
Цитата(Busel Roman @ Jun 20 2007, 13:41) *
Прошиваю Flash, расположенную на STK1000 (в самом AVR32 Flash-память отсутствует, как собственно и RAM - есть только небольшой кэш данных и команд) непосредственно через JTAG ICE mkII.
Вроде 32K RAM там все-таки есть ?
Цитата
Дело в том, что прошивать удавалось и без наличия загрузчиков, скриптов, утилит и т.п.

JTAG ICE не имеет непосредственного доступа к внешней Flash.(Flash то может быть разной
организации, с разными wait state, и т.д.)
Для того что бы прошить что-то во внешнюю Flash он должен загрузить некоторый код(настройка
внешней шины, процедуры стирания/записи) в внутреннюю RAM и там его запустить,
и этот код должен быть в том или ином виде(скрипты, утилиты и т.д.) быть у Вас на винте.
Вот эта ошибка:
No CFI device detected at address 0x00000000.
говорит о том, что этот (загруженный через JTAG) код не смог получить ответ от Flash на
команду "CFI Detect".
Видимо это происходит из-за ошибок в инициализации внешней шины контроллера,
так что ищите(скрипты, код) где у Вас лежит такая инициализация и настройка параметров Flash.
Busel Roman
Цитата(singlskv @ Jun 20 2007, 13:40) *
Вроде 32K RAM там все-таки есть ?

Прошу прощения, действительно SRAM=32K on-chip.

Цитата(singlskv @ Jun 20 2007, 13:40) *
... Для того что бы прошить что-то во внешнюю Flash он должен загрузить некоторый код(настройка
внешней шины, процедуры стирания/записи) в внутреннюю RAM и там его запустить,
и этот код должен быть в том или ином виде(скрипты, утилиты и т.д.) быть у Вас на винте.

Я имел ввиду то, что не требуется никаких дополнительных утилит для программирования - все необходимое содержит комплект AVR32 Studio, который и вызывает необходимую утилиту при прошивке Flash.
Цитата
... в внутреннюю RAM и там его запустить

Вы имеете ввиду RAM, расположенную в JTAG?

P.S. Ошибка возникает именно после попытки понизить тактовую частоту CPU микроконтроллера! Если не понижать частоту, то можно без проблем переписывать Flash сколько угодно раз. Вопрос: как Cygwin определяет, что внутри Flash записан код деления тактовой частоты? Или проблема именно из-за пониженной частоты тактирования CPU в тот момент, когда к микроконтроллеру обращается JTAG? (При включении питания STK1000 зашитая во Flash моя программа запускается и CPU работает на пониженной частоте)
singlskv
Цитата(Busel Roman @ Jun 20 2007, 16:17) *
Я имел ввиду то, что не требуется никаких дополнительных утилит для программирования - все необходимое содержит комплект AVR32 Studio, который и вызывает необходимую утилиту при прошивке Flash.

Вот в комплекте и нужно искать
Цитата
Вы имеете ввиду RAM, расположенную в JTAG?

Нет, я имею в виду SRAM которая в AVR32.
Цитата
P.S. Ошибка возникает именно после попытки понизить тактовую частоту CPU микроконтроллера! Если не понижать частоту, то можно без проблем переписывать Flash сколько угодно раз. Вопрос: как Cygwin определяет, что внутри Flash записан код деления тактовой частоты? Или проблема именно из-за пониженной частоты тактирования CPU в тот момент, когда к микроконтроллеру обращается JTAG? (При включении питания STK1000 зашитая во Flash моя программа запускается и CPU работает на пониженной частоте)

Вам нужно в документации найти такой режим запуска STK1000 при котором никакой код
в AVR32 не выполняется(грубо говоря если флеш пустая при производстве, то ведь
никакой код не может выполниться), просто подключен JTAG и контроллер ждет команд
через JTAG.
В скриптах/коде которые настраивают внешнюю шину для связи с флеш так же должна быть
настройка режимов тактирования ядра.
Так что ищите такую настройку или внимательно читайте доки, там должно быть все описано.
SpyBot
Возможно надо понизить клок JTAG-а?
Busel Roman
Цитата(SpyBot @ Jun 20 2007, 18:39) *
Возможно надо понизить клок JTAG-а?

Пробовал и понижать (до 125 кГц), и повышать (до 8 МГц). Не помогает.
Старый ведь Cygwin в состоянии очистить и записать Flash без дополнительных операций по настройке чего-либо!
Цитата
В скриптах/коде которые настраивают внешнюю шину для связи с флеш так же должна быть
настройка режимов тактирования ядра.
Так что ищите такую настройку или внимательно читайте доки, там должно быть все описано.

Наверное, так получается, что в старой версии Cygwin при программировании Flash сначала происходил сброс делителей тактовой частоты, а затем уже следовали команды по инициализации внешней шины, к которой подключена Flash. Получается, что в новой версии Cygwin данную процедуру опустили (по крайней мере по умолчанию).
Master
Цитата(Busel Roman @ Jun 21 2007, 10:30) *
Наверное, так получается, что в старой версии Cygwin при программировании Flash сначала происходил сброс делителей тактовой частоты, а затем уже следовали команды по инициализации внешней шины, к которой подключена Flash. Получается, что в новой версии Cygwin данную процедуру опустили (по крайней мере по умолчанию).

Обратите внимание на комментарий к разделу AVR32 Studio 1.0 final release на бета-сайте Atmel.no - Don't use version 1.0.1!
Большая просьба, отпишите, если разрешите проблему.
В ближайшее время получу STK1000, думаю, столкнусь с аналогичными трудностями.

P.S. Пора бы уже создавать ветку по AVR32...
Busel Roman
Цитата(Master @ Jun 22 2007, 11:43) *
... Don't use version 1.0.1!

Я собственно с этого сайта и скачал новую версию AVR32 Studio. На официальном сайте Atmel ссылка появилась через 4 дня (19.06.2007).

P.S. Выбившись из сил, попробовал запустить (для интереса) программку под Linux - HelloWorld. Она идет вместе с AVR32 Studio как демонстрационная для набора STK1000 (те, кто запускал новую версию AVR32 Studio, меня поймут). Ну неужели я такой глупый, либо это полоса невезения... Вроде все правильно по пунктам сделал, но так и не смог понять, где посмотреть IP-адрес отладочной платы, т.е. то, что следует вводить в поле Network Address вкладки Target в свойствах JTAGICEmkII? Что не пробовал вводить, всегда выдает ошибку соединения. Если кто прошел данный этап, пожалуйста, подскажите.
Busel Roman
Наконец, нашел причину возникновения ПРОБЛЕМЫ 2 (блокировка доступа к Flash). Как говорится, "сам дурак". В Datasheet на AP7000 в разделе Power Manager черным по белому написано условие деления тактовой частоты:
F_CPU >= F_HSB >= F_PBA,B
Поэтому, код программы должен быть таким:
Код
    volatile avr32_pm_t *pm=&AVR32_PM;
    pm->CKSEL.pbbsel=7;
    pm->CKSEL.pbbdiv=1;
    pm->CKSEL.pbasel=7;
    pm->CKSEL.pbadiv=1;
    pm->CKSEL.hsbsel=7;
    pm->CKSEL.hsbdiv=1;
    pm->CKSEL.cpusel=7;
    pm->CKSEL.cpudiv=1;

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

P.S. Остается загадкой, почему старый Cygwin позволяет разлочить Flash с неверным кодом, а новый - нет. Получается, что ошибки при программировании лучше не допускать - потом не сможешь перепрограммировать.
IgorKossak
Цитата(Master @ Jun 22 2007, 11:43) *
P.S. Пора бы уже создавать ветку по AVR32...

Такое же мнение было и по поводу ветки для MIPS. Ну и насколько она популярна?
Основание должно быть именно такое, а не просто желание что-то выделить и ещё более раздуть структуру форума.
Подождём пока.
singlskv
Цитата(IgorKossak @ Jun 22 2007, 21:20) *
Такое же мнение было и по поводу ветки для MIPS. Ну и насколько она популярна?
Основание должно быть именно такое, а не просто желание что-то выделить и ещё более раздуть структуру форума.
Подождём пока.

IgorKossak
Думаю что AVR32 таки придется выделять в отдельную ветку, правда спешить с этим точно
нет смысла.
Наверное имело бы смысл попросить авторов топиков про avr32 начинать свои
топики типа так:
AVR32: описание теммы...
что бы потом было легко это выделить в отдельную ветку.

P.S. Эээ... ну мне просто сказали сегодня что через пару недель у меня тоже
будет кит NWG100 для разбирательства с avr32...
bzx
Цитата(singlskv @ Jun 22 2007, 22:44) *
P.S. Эээ... ну мне просто сказали сегодня что через пару недель у меня тоже будет кит NWG100 для разбирательства с avr32...

Пока поезд не ушёл, т.е. действует рекламная акция от Атмеля: jtagice2+stk500=$150, спеши обзавестись отладчиком jtagice2, если такового не имеется. По началу думал, что без него смогу обойтись, ан нет, на начальном этапе освоения AVR32 без него совсем никак.
IgorKossak
Цитата(singlskv @ Jun 22 2007, 21:44) *
IgorKossak
Думаю что AVR32 таки придется выделять в отдельную ветку, правда спешить с этим точно
нет смысла.
Наверное имело бы смысл попросить авторов топиков про avr32 начинать свои
топики типа так:
AVR32: описание теммы...
что бы потом было легко это выделить в отдельную ветку.

Я над этим бьюсь уже давно, да всё попусту. Пользователей не переделать. Особенно начинающих и неопытных.
Потому то и пестрит форум сообщениями типа: "Тупой вопрос", "Помогите", "Как решить проблему?" и т. д.
Надеюсь, что в случе с AVR32 ситуация хоть как-то улучшится. Камень то далеко не любительский и народ, подступающийся к нему, далеко не дилетанты.
А что касается наполнения новой ветки существующими сообщениями, то за этим дело не станет.
Busel Roman
Товарищи участники форума, убедительная просьба посылать сообщения поближе к сути вопроса (проблемы с STK1000 для AVR32), а то получается общение на вольные темы...
Если так наболел вопрос "быть или не быть ветке AVR32", ну возьмите и откройте новую тему с опросом - пусть заинтересованные участники выскажут все за и против создания новой ветки.

Что касается умножения главной тактовой частоты микроконтроллера AP7000, то опытным путем я установил, что тактовая частота может принимать любые значения в диапазоне (10...70) MГц. Причем не важно какие именно значения имеют поля PLL0.plldiv и PLL0.pllmul. Как только пытаюсь получить такты с частотой вне этого диапазона, программа отказывается работать. По идее, элементы фильтра PLL должны с большой точностью задавать частоту главных тактов.
Busel Roman
Наконец получилось повысить частоту микроконтроллера аж до 140 MHz не меняя элементов фильтра PLL! Решение проблемы было описано в datasheet на AP7000 в главе 40.4 Clock Characteristics:
Note: 1. The bus clocks in the system should be divided, relative to the CPU, to be sure they operate in their specified range. The HSB and PBB bus clocks should be divided by two and the PBA bus clock should be divided by four relative to the CPU clock.

Вопрос о запуске программы HelloWorld под Linux остается открытым.

P.S. Как говорится, внимательно читайте договор!
Busel Roman
Есть два способа перепрограммировать Flash в том случае, если были неверно выставлены значения делителей тактовой частоты различных шин AVR32 и Flash вдруг перестала определяться:

1) Самое простое - нажать на отладочной плате кнопку Reset сразу после того, как Вы запустите команду записи кода во Flash или стирания Flash. Это приведет к тому, что контроллер еще не успеет исполнить код, записанный во Flash, который понижает тактовую частоту. После нескольких неудачных попыток, я думаю, Вы поймете в какой именно момент жать Reset.

2) С помощью программы Cygwin, которая записана на фирменном CD-ROM к отладочному комплекту. Причем очень важно, чтобы программа Cygwin ставилась на "чистый" компьютер, т.е. на котором ранее не был установлен GNU Tool Chain!!! Обновление версии GNU Tool Chain проблему не решает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.