|
Не работает bin файл для SAM7S |
|
|
|
Jan 8 2010, 20:30
|
Группа: Участник
Сообщений: 11
Регистрация: 6-01-10
Пользователь №: 54 650

|
Уважаемые форумчане, помогите пожалуйста чайнику! Создал свой проект (IAR 5.4) для мигания светодиодами (контроллер AT91SAM7S256), в эмуляторе (RDI) все прекрасно работает, лампочки мигают, функции вызываются и т.д. Когда создаю bin файл и прошиваю, ничего не работает. Прошивал различными способами, через самбу, флешер и встроенный флеш лоадер - результат одинаковый (то есть нулевой). То же самое происходит и при отладке из флеш - "фирменные" проекты продолжают работать после переброски питания, а мой нет. Все файлы конфигурации брал из IARовских примеров атмейл. Настройки проекта также брал из рабочих примеров. Установил более свежий H-JTAG, флешлоадер стал выдавать ошибку Skipping flash loading pass because there is no data in the designated range: 0x100000-0x140000. То есть по идее, данные не в том диапазоне находятся, но как это исправить не понимаю. Проект прикладываю. Заранее спасибо!
Прикрепленные файлы
LED.rar ( 120.6 килобайт )
Кол-во скачиваний: 21
|
|
|
|
|
Jan 8 2010, 20:47
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760

|
Цитата(Arkasha @ Jan 8 2010, 23:30)  Все файлы конфигурации брал из IARовских примеров атмейл. Настройки проекта также брал из рабочих примеров. 1) В ИАР-е используются icf-файлы - в нем указания для компоновщика (linker) о том, по каким адресам разместить код-данные. 2) Все примеры включают в себя по два таких файла - один для размещения кода-данных в ОЗУ (для временной отладки) и один для размещения кода-данных во флэши (при запуске отладчика все это заливается во флэш - опционально можно отключить). 3) Разберитесь в настройках проекта - "linker" (где указать используемый icf-файл), debugger (галка для использования mac-файла и путь к нему при отладке из ОЗУ; галка для использования flashloadder-а при заливке проги во флэш). Посмотрите userguide и т.п.
|
|
|
|
|
Jan 8 2010, 21:08
|
Группа: Участник
Сообщений: 11
Регистрация: 6-01-10
Пользователь №: 54 650

|
Цитата(Student Pupkin @ Jan 8 2010, 23:47)  Разберитесь в настройках проекта - "linker" (где указать используемый icf-файл), debugger (галка для использования mac-файла и путь к нему при отладке из ОЗУ; галка для использования flashloadder-а при заливке проги во флэш). Прошу прощения, немного ввел в заблуждение, в процессе экспериментов поменял mac и icf файлы на другие. На самом деле я изначально использовал файлы at91sam7s-ek-flash.mac и flash.icf из из атмейловского примера getting started. Все настройки тоже из этого проекта. Сейчас вернул их на место, ошибка при запуске флеш дебага изчезла, но бинарник по прежнему не работает и после переброса питания перестает работать. Руководство лопатил несколько дней, но понят в чем проблема так и не смог.
Сообщение отредактировал rezident - Jan 8 2010, 21:33
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
Jan 8 2010, 23:33
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760

|
Цитата(Arkasha @ Jan 9 2010, 00:08)  ошибка при запуске флеш дебага изчезла, но бинарник по прежнему не работает Т.е. расклад, видимо, такой: 1) В IAR-е жмете Download and Debug, затем запускаете под отладчиком программу ( Go - F5) и все работает (светодиод мигает). Закрываете отладчик. 2) Отключаете питание, отцепляете JTAG от платы, включаете питание - ничего не работает, программа не запускается. 3) Пробуете зашить полученный в IAR-е bin-файл. Для этого запускаете очистку флэш-памяти (с помощью пина ERASE), затем прошиваете самбой . Зашиваете, но ничего не работает. Так? Может про пин ERASE забываете? Или может с ним косяк в плате, и каждый раз после передергивания питания флэш очищается?
|
|
|
|
|
Jan 9 2010, 07:00
|
Группа: Участник
Сообщений: 11
Регистрация: 6-01-10
Пользователь №: 54 650

|
Цитата(Student Pupkin @ Jan 9 2010, 02:33)  Т.е. расклад, видимо, такой: ... Так? Может про пин ERASE забываете? Все так, только JTAG не отцепляю и пин ERASE не использую. Прошиваю либо флешером (там есть ERASE) либо самбой. И то и другое не работает. Причем только на моем проекте, примеры работают при любом способе прошивки,а также и после Download and Debug. Более того, пытался даже "сдергивать" образ памяти прямо из окна memory в дебаггере, сохранять в hex файл, перегонять в бинарник hex2bin_ом и прошивать. Так вот, опять же, примеры после такой операции работают, а мой проект нет. Видимо что-то неверно в проекте изначально, может быть стартап (в атмейловском примере свой, а у меня стандартный) или что-то еще. Странно только, почему в дебаггере работает.
Сообщение отредактировал rezident - Jan 9 2010, 10:58
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
Jan 9 2010, 08:32
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760

|
Цитата(Arkasha @ Jan 9 2010, 10:00)  Странно только, почему в дебаггере работает. В принципе отличие тут одно - при запуске под отладчиком предварительно выполняется mac-файл. Хотя я с атмеловскими контроллерами не знаком вообще, однако в файле at91sam7s-ek-flash.mac имеется строчка _InitPLL() Код * Function description * Initializes the PMC. * 1. Enable the Main Oscillator * 2. Configure PLL to 96MHz * 3. Switch Master Clock (MCK) on PLL/2 = 48MHz Так что возможно все дело в тактовой частоте - при запуске под отладчиком генератор запускается по командам из mac-файла. У вас же в main нигде явно генератор не запускается. Не знаю, от чего камень тактируется при старте (см. даташит), но явно это не 48 МГц. Возможно, что просто Delay(8000000) превращается в ого-го задержку  . В примере, кстати, светодиод должен сразу загореться или после задержки?
|
|
|
|
|
Jan 9 2010, 12:38
|
Группа: Участник
Сообщений: 11
Регистрация: 6-01-10
Пользователь №: 54 650

|
Цитата(Student Pupkin @ Jan 9 2010, 11:32)  В принципе отличие тут одно - при запуске под отладчиком предварительно выполняется mac-файл. Похоже вы правы - если отключить мак файл, то отладчик зависает в функции wait, в то время как getting started работает и с отключенным маком. Спасибо большое, буду разбираться с клоками. А для чего вообще тогда этот мак, если и без него работает? Что то поторопился с выводами, не в этом дело похоже.. Запускается все и без маков. Попробовал в обоих проектах отключить маки, оба прекрасно работают в отладчике и без них. Если даже ставлю задержку в один такт или вообще отключаю все равно бинарник не работает. Макро файл похоже, подхватывается системный по умолчанию. Но на проблему с частотой все равно не похоже при задержке в один такт светодиоды хоть раз бы мигнули.
Сообщение отредактировал Arkasha - Jan 9 2010, 13:28
Причина редактирования: Нарушение п.3.4 Правил форума.
|
|
|
|
|
Jan 9 2010, 20:18
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760

|
Цитата(Arkasha @ Jan 9 2010, 15:38)  А для чего вообще тогда этот мак, если и без него работает? Откройте его и посмотрите, там все не сложно и с комментариями. Цитата(Arkasha @ Jan 9 2010, 15:38)  поторопился с выводами, не в этом дело похоже.. Запускается все и без маков. Попробовал в обоих проектах отключить маки, оба прекрасно работают в отладчике и без них. Поторопились. Я же не сказал, что mac-файлы виноваты. Я сказал, что в mac-файлах выполняется предварительная настройка клоков. В примерах в коде настройка клоков тоже есть. У вас в main.c описана вот такая функция: Код // Инициализация главного тактового генератора void InitFrec(void) { // Disable watchwog AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS; //Enabling the Main Oscillator: и т.д. В функции main InitFrec не вызывается. Код int main() { p_pPMC->PMC_PCER = 1 << AT91C_ID_PIOA; //Peripheral Clock Enable p_pPio->PIO_PER |= 0x0000000F; //PIO Enable Register p_pPio->PIO_OER |= 0x0000000F; //Output Enable Register while(1) { p_pPio->PIO_SODR |= 0x0000000F; //Установка порта в 1 Delay(8000000); p_pPio->PIO_CODR |= 0x0000000F; //Установка порта в 0 Delay(8000000); } } Без функции InitFrec (надеюсь вы ее со знанием дела писали  ): 1) Не установлена нужная тактовая частота - ЦПУ и периферия продолжают тактироваться от внутренненго RC-генератора (как и после ресета). 2) Не выключен сторожевой таймер (WatchDog), который по истечении определенного времени сбрасывает микроконтроллер.
|
|
|
|
|
Jan 10 2010, 09:16
|
Группа: Участник
Сообщений: 11
Регистрация: 6-01-10
Пользователь №: 54 650

|
Цитата(Сергей Борщ @ Jan 9 2010, 23:12)  И вы верите, что успели бы увидеть вспышку длительностью пусть даже 10 тактов пусть даже внутреннего 32 КГц генератора? Извините, я неправильно выразился конечно. Там как раз и есть бесконечный цикл, в отладчике там как раз и получается непрерывное свечение меньшей яркости, а в бинарнике тишина.
|
|
|
|
|
Jan 10 2010, 12:07
|
Группа: Участник
Сообщений: 11
Регистрация: 6-01-10
Пользователь №: 54 650

|
Ничего не понимаю - сейчас взял другой проект с сайта olimex для их платы (Blinking LED), тоже для мигания светодиодами. Проект изначально под четвертый IAR, запустил в IAR 4.4 Kickstart. Переделал под свою плату (поменял номера ножек и процессор) - все прекрасно работает, как в отладчике, так и в бинарнике, никакой разницы. Стал переделывать проект под IAR 5.4 - опять та же история - в дебаггере все работает, в бинарнике тишина. Видимо я не учитываю что-то, что влияет на создание бинарника в IAR 5.4, а что не могу понять.  Я правильно понимаю, что в IAR 5.4 бинарник получается путем конвертации из файла *.out и настраивается это на закладке output converter? В IAR kickstart бинарник как то более очевидно настраивается.
|
|
|
|
|
Jan 10 2010, 19:31
|
Группа: Участник
Сообщений: 11
Регистрация: 6-01-10
Пользователь №: 54 650

|
Я в основном флешером прошиваю, который из H-JTAGа, так удобнее чем самбой. Проекты примеров проишиваются и работают без проблем, а вот мой. Настройки линкера уже много раз проверял, все из рабочего проекта getting started, так же как и файлы конфигурации (icf и mac) не пойму что там нет так. Может там еще какие то более тонкие вещи есть, до которых я не добрался? До этого у меня еще были подозрения что дело в исходниках, а поскольку в четвертом яре заработало, то я вообще перестал понимать, в чем дело. В getting started стартап другой, может в этом дело? Сам проект getting started сложноват для моего понимания, поэтому у меня пока не получается досконально сравнить все содержимое. Подключешь его стартап, он начинает на кучу других файлов ссылаться, они еще на следующие и т.п., конца края не видать. Наверное простое что-то, но пока не могу нащупать. Исследование бинарников hex редакторе показало, что у "правильных" бинарников есть некий заголовок что ли, или не знаю как его назвать, а сам код начинается с сотого адреса. Тупое добавление этого "заголовка" в мой бинарник не дало результата.
|
|
|
|
|
Jan 10 2010, 22:02
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760

|
Цитата(Arkasha @ Jan 10 2010, 22:31)  Сам проект getting started сложноват для моего понимания, поэтому у меня пока не получается досконально сравнить все содержимое. Подключешь его стартап, он начинает на кучу других файлов ссылаться, они еще на следующие и т.п., конца края не видать. Наверное простое что-то, но пока не могу нащупать. А что за getting started? В какой папке лежит? И о каком стартапе говорите? И почему бы вам не взять рабочий проект из иаровских примеров, выкинуть оттуда все исходники и добавить свои, никакие настройки проекта не менять, скомпилить, загрузить и убедиться, что все работает (ну или не что работает  )?
|
|
|
|
|
Jan 14 2010, 10:28
|
Группа: Участник
Сообщений: 11
Регистрация: 6-01-10
Пользователь №: 54 650

|
Getting started это атмейловский пример из поставки IAR. По умолчанию лежит по следующему пути: c:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\examples\Atmel\at91sam7s-ek\getting-started-project\. С одной стороны удобно - там есть, все, что нужно для начала работы - мигание лампочками и базовая работа с COM портом, но с другой стороны там такое количество файлов, связанных в тугой клубок, что я никак не могу в нем разобраться. Олимексовские проекты не в пример понятнее - ничего лишнего, четко и понятно, минимум файлов. Да и вообще, хочется научиться самому проекты создавать, а не только в примеры пару строчек добавлять. Когда сам все создал с нуля, как то увереннее себя чувствуешь. :-)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|