|
Проблемы с 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. В скриптах/коде которые настраивают внешнюю шину для связи с флеш так же должна быть настройка режимов тактирования ядра. Так что ищите такую настройку или внимательно читайте доки, там должно быть все описано.
|
|
|
|
|
Jun 21 2007, 06:30
|
Участник

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

|
Цитата(SpyBot @ Jun 20 2007, 18:39)  Возможно надо понизить клок JTAG-а? Пробовал и понижать (до 125 кГц), и повышать (до 8 МГц). Не помогает. Старый ведь Cygwin в состоянии очистить и записать Flash без дополнительных операций по настройке чего-либо! Цитата В скриптах/коде которые настраивают внешнюю шину для связи с флеш так же должна быть настройка режимов тактирования ядра. Так что ищите такую настройку или внимательно читайте доки, там должно быть все описано. Наверное, так получается, что в старой версии Cygwin при программировании Flash сначала происходил сброс делителей тактовой частоты, а затем уже следовали команды по инициализации внешней шины, к которой подключена Flash. Получается, что в новой версии Cygwin данную процедуру опустили (по крайней мере по умолчанию).
|
|
|
|
|
Jun 22 2007, 08:43
|
Частый гость
 
Группа: Новичок
Сообщений: 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...
|
|
|
|
|
Jun 22 2007, 11:53
|
Участник

Группа: Новичок
Сообщений: 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? Что не пробовал вводить, всегда выдает ошибку соединения. Если кто прошел данный этап, пожалуйста, подскажите.
|
|
|
|
|
Jun 22 2007, 13:01
|
Участник

Группа: Новичок
Сообщений: 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 с неверным кодом, а новый - нет. Получается, что ошибки при программировании лучше не допускать - потом не сможешь перепрограммировать.
|
|
|
|
|
Jun 22 2007, 18:44
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(IgorKossak @ Jun 22 2007, 21:20)  Такое же мнение было и по поводу ветки для MIPS. Ну и насколько она популярна? Основание должно быть именно такое, а не просто желание что-то выделить и ещё более раздуть структуру форума. Подождём пока. IgorKossakДумаю что AVR32 таки придется выделять в отдельную ветку, правда спешить с этим точно нет смысла. Наверное имело бы смысл попросить авторов топиков про avr32 начинать свои топики типа так: AVR32: описание теммы... что бы потом было легко это выделить в отдельную ветку. P.S. Эээ... ну мне просто сказали сегодня что через пару недель у меня тоже будет кит NWG100 для разбирательства с avr32...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|