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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Проблемы с STK1000 для AVR32, Программирование AVR32 без Linux
Busel Roman
сообщение Jun 19 2007, 14:18
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 19-06-07
Из: Республика Беларусь, г.Витебск
Пользователь №: 28 538



Пытаюсь программировать 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
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 19 2007, 16:48
Сообщение #2


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(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 пока не работал, так что это лишь общие соображения...
Go to the top of the page
 
+Quote Post
GDI
сообщение Jun 20 2007, 06:34
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Может стоит Еррату почитать? AP7000 ещё вроде даже не выпускают, багов много у них... правда это моё имхо...


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Busel Roman
сообщение Jun 20 2007, 09:41
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 19-06-07
Из: Республика Беларусь, г.Витебск
Пользователь №: 28 538



Цитата(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 моя ошибка не описана.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jun 20 2007, 10:08
Сообщение #5


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



По-моему несовместимость разных версий - это стандартный затык сигвина. Жаль что тулчейны у атмела не нативные. Видимо и в дальнейшем будет геморой.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 20 2007, 10:40
Сообщение #6


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(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.
Go to the top of the page
 
+Quote Post
Busel Roman
сообщение Jun 20 2007, 12:17
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 19-06-07
Из: Республика Беларусь, г.Витебск
Пользователь №: 28 538



Цитата(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 работает на пониженной частоте)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 20 2007, 12:43
Сообщение #8


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(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.
В скриптах/коде которые настраивают внешнюю шину для связи с флеш так же должна быть
настройка режимов тактирования ядра.
Так что ищите такую настройку или внимательно читайте доки, там должно быть все описано.
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Jun 20 2007, 15:39
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



Возможно надо понизить клок JTAG-а?
Go to the top of the page
 
+Quote Post
Busel Roman
сообщение Jun 21 2007, 06:30
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 19-06-07
Из: Республика Беларусь, г.Витебск
Пользователь №: 28 538



Цитата(SpyBot @ Jun 20 2007, 18:39) *
Возможно надо понизить клок JTAG-а?

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

Наверное, так получается, что в старой версии Cygwin при программировании Flash сначала происходил сброс делителей тактовой частоты, а затем уже следовали команды по инициализации внешней шины, к которой подключена Flash. Получается, что в новой версии Cygwin данную процедуру опустили (по крайней мере по умолчанию).
Go to the top of the page
 
+Quote Post
Master
сообщение Jun 22 2007, 08:43
Сообщение #11


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(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...
Go to the top of the page
 
+Quote Post
Busel Roman
сообщение Jun 22 2007, 11:53
Сообщение #12


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 19-06-07
Из: Республика Беларусь, г.Витебск
Пользователь №: 28 538



Цитата(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? Что не пробовал вводить, всегда выдает ошибку соединения. Если кто прошел данный этап, пожалуйста, подскажите.
Go to the top of the page
 
+Quote Post
Busel Roman
сообщение Jun 22 2007, 13:01
Сообщение #13


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 19-06-07
Из: Республика Беларусь, г.Витебск
Пользователь №: 28 538



Наконец, нашел причину возникновения ПРОБЛЕМЫ 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 с неверным кодом, а новый - нет. Получается, что ошибки при программировании лучше не допускать - потом не сможешь перепрограммировать.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 22 2007, 17:20
Сообщение #14


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Master @ Jun 22 2007, 11:43) *
P.S. Пора бы уже создавать ветку по AVR32...

Такое же мнение было и по поводу ветки для MIPS. Ну и насколько она популярна?
Основание должно быть именно такое, а не просто желание что-то выделить и ещё более раздуть структуру форума.
Подождём пока.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 22 2007, 18:44
Сообщение #15


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



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

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

P.S. Эээ... ну мне просто сказали сегодня что через пару недель у меня тоже
будет кит NWG100 для разбирательства с avr32...
Go to the top of the page
 
+Quote Post

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

 


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


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