|
Проблемы с STK1000 для AVR32, Программирование AVR32 без Linux |
|
|
|
Jun 19 2007, 14:18
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Jun 19 2007, 16:48
|
дятел
    
Группа: Свой
Сообщений: 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 пока не работал, так что это лишь общие соображения...
|
|
|
|
|
Jun 20 2007, 09:41
|
Участник

Группа: Новичок
Сообщений: 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 моя ошибка не описана.
|
|
|
|
|
Jun 20 2007, 10:40
|
дятел
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jun 20 2007, 12:17
|
Участник

Группа: Новичок
Сообщений: 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 работает на пониженной частоте)
|
|
|
|
|
Jun 20 2007, 12:43
|
дятел
    
Группа: Свой
Сообщений: 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. В скриптах/коде которые настраивают внешнюю шину для связи с флеш так же должна быть настройка режимов тактирования ядра. Так что ищите такую настройку или внимательно читайте доки, там должно быть все описано.
|
|
|
|
Сообщений в этой теме
Busel Roman Проблемы с STK1000 для AVR32 Jun 19 2007, 14:18 GDI Может стоит Еррату почитать? AP7000 ещё вроде даже... Jun 20 2007, 06:34 SpiritDance По-моему несовместимость разных версий - это станд... Jun 20 2007, 10:08 SpyBot Возможно надо понизить клок JTAG-а? Jun 20 2007, 15:39 Busel Roman Цитата(SpyBot @ Jun 20 2007, 18:39) Возмо... Jun 21 2007, 06:30  Master Цитата(Busel Roman @ Jun 21 2007, 10:30) ... Jun 22 2007, 08:43   Busel Roman Цитата(Master @ Jun 22 2007, 11:43) ... D... Jun 22 2007, 11:53    Busel Roman Наконец, нашел причину возникновения ПРОБЛЕМЫ 2 (б... Jun 22 2007, 13:01   IgorKossak Цитата(Master @ Jun 22 2007, 11:43) P.S. ... Jun 22 2007, 17:20    singlskv Цитата(IgorKossak @ Jun 22 2007, 21:20) Т... Jun 22 2007, 18:44     bzx Цитата(singlskv @ Jun 22 2007, 22:44) P.S... Jun 23 2007, 07:02     IgorKossak Цитата(singlskv @ Jun 22 2007, 21:44) Igo... Jun 23 2007, 09:15      Busel Roman Товарищи участники форума, убедительная просьба по... Jun 25 2007, 07:19       Busel Roman Наконец получилось повысить частоту микроконтролле... Jun 26 2007, 11:34        Busel Roman Есть два способа перепрограммировать Flash в том с... Oct 1 2007, 13:18
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|