Перейти к содержанию
    

EVK1100 + bootloader

Добрый вечер! Подскажите кто-нибудь, как залить готовый проект из Framework, например для работы с GPIO, в плату EVK1100? В режим бутлоадера я попал, FLIP установлен. Но когда начал заливать проект, бутлоадер перестал запускаться.. Где-то читал про файл trampoline, который находится в папке ASM проекта. Что с ним делать? Убрать? Вообщем - как корректно запрограммировать проц на плате через бутлоадер? Есть еще 2-я плата, и не хочется запороть загрузчик в ней.. JtagICE mk 2 не скоро получу :( П.с. работаю через AVR32 Studio.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый вечер! Подскажите кто-нибудь, как залить готовый проект из Framework, например для работы с GPIO, в плату EVK1100? В режим бутлоадера я попал, FLIP установлен. Но когда начал заливать проект, бутлоадер перестал запускаться.. Где-то читал про файл trampoline, который находится в папке ASM проекта. Что с ним делать? Убрать? Вообщем - как корректно запрограммировать проц на плате через бутлоадер? Есть еще 2-я плата, и не хочется запороть загрузчик в ней.. JtagICE mk 2 не скоро получу :( П.с. работаю через AVR32 Studio.

-Если вы используете проект-пример, то там этот трамплин уже есть, если создаете проект штатными средствами студии, то там трамплин добавляется автоматом.

Качаете документ AVR UC3 A0, A1, A3, B0, B1 USB DFU Bootloader, читаете и шьете свой проект. Командная строка будет иметь примерно такой вид:

batchisp -device at32uc3a1256 -hardware usb -operation erase f memory flash blankcheck loadbuffer вашапрога.elf program verify start reset 0

-заранее набираете в консоли командную строку(или bat файл создатете), отключаете плату от питания, нажимаете кнопку джойстика, втыкаете в плату usb кабель, винда находит драйвер, отпускаете джойстик, в консоли нажимаете ввод, чтобы запустить набранную ранее команду, в случае успеха получаете примерно такое:

................

Running batchisp 1.2.5 on Wed Jan 25 13:46:25 2012

AT32UC3A1256 - USB - USB/DFU

 

Device selection....................... PASS

Hardware selection..................... PASS

Opening port........................... PASS

Reading Bootloader version............. PASS 1.0.3

Erasing................................ PASS

Selecting FLASH........................ PASS

Blank checking......................... PASS 0x00000 0x3ffff

Parsing ELF file....................... PASS ваша прога.elf

Programming memory

WARNING: The user program and the bootloader overlap!

Programming memory..................... PASS 0x00000 0x04fdb

Verifying memory....................... PASS 0x00000 0x04fdb

Starting Application................... PASS RESET 0

 

Summary: Total 11 Passed 11 Failed 0

 

если все прошло так, отключаете юсб кабель, подключаете питание и наслаждаетесь :)

.............................................

в случае неуспеха получите примерно такое

Running batchisp 1.2.5 on Wed Jan 25 13:49:02 2012

AT32UC3A1256 - USB - USB/DFU

 

Device selection....................... PASS

Hardware selection..................... PASS

Opening port........................... FAIL Could not open USB device.

ISP done.

 

- то, что загрузчик не запускается не значит, что он стерт - могли сбить настройки запуска бутлодера в user page.

А вообще, без отладчика тяжело :(

Накидал маленькую утилиту(под 4 дотнет), которая все это делает сама, в папке usb драйвера для dfu. Работает как есть, претензии не принимаются :)

fwLoader.rar

usb.rar

Изменено пользователем vacvvn

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

-Если вы используете проект-пример, то там этот трамплин уже есть, если создаете проект штатными средствами студии, то там трамплин добавляется автоматом.

Качаете документ AVR UC3 A0, A1, A3, B0, B1 USB DFU Bootloader, читаете и шьете свой проект. Командная строка будет иметь примерно такой вид:

batchisp -device at32uc3a1256 -hardware usb -operation erase f memory flash blankcheck loadbuffer вашапрога.elf program verify start reset 0

-заранее набираете в консоли командную строку(или bat файл создатете), отключаете плату от питания, нажимаете кнопку джойстика, втыкаете в плату usb кабель, винда находит драйвер, отпускаете джойстик, в консоли нажимаете ввод, чтобы запустить набранную ранее команду, в случае успеха получаете примерно такое:

................

Running batchisp 1.2.5 on Wed Jan 25 13:46:25 2012

AT32UC3A1256 - USB - USB/DFU

 

Device selection....................... PASS

Hardware selection..................... PASS

Opening port........................... PASS

Reading Bootloader version............. PASS 1.0.3

Erasing................................ PASS

Selecting FLASH........................ PASS

Blank checking......................... PASS 0x00000 0x3ffff

Parsing ELF file....................... PASS ваша прога.elf

Programming memory

WARNING: The user program and the bootloader overlap!

Programming memory..................... PASS 0x00000 0x04fdb

Verifying memory....................... PASS 0x00000 0x04fdb

Starting Application................... PASS RESET 0

 

Summary: Total 11 Passed 11 Failed 0

 

если все прошло так, отключаете юсб кабель, подключаете питание и наслаждаетесь :)

.............................................

в случае неуспеха получите примерно такое

Running batchisp 1.2.5 on Wed Jan 25 13:49:02 2012

AT32UC3A1256 - USB - USB/DFU

 

Device selection....................... PASS

Hardware selection..................... PASS

Opening port........................... FAIL Could not open USB device.

ISP done.

 

- то, что загрузчик не запускается не значит, что он стерт - могли сбить настройки запуска бутлодера в user page.

А вообще, без отладчика тяжело :(

Накидал маленькую утилиту(под 4 дотнет), которая все это делает сама, в папке usb драйвера для dfu. Работает как есть, претензии не принимаются :)

 

Вобщем разобрался несколько дней назад, собираю проект вручную. И еще во вкладке Program, оказывается, в параметре offset надо было указать значение 0x80000000F. Сейчас все работает и прошивается. Vacvvn, спасибо за очередной совет! Как-нибудь попробую! :cheers:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос к vacvvn по поводу

Накидал маленькую утилиту(под 4 дотнет), которая все это делает сама, в папке usb драйвера для dfu. Работает как есть, претензии не принимаются

Скажите пожалуйста, есть ли новая версия вашей утилиты fwLoader?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос к vacvvn по поводу

Скажите пожалуйста, есть ли новая версия вашей утилиты fwLoader?

Новой версии нет. Утилита сделана на коленке, в лоб. Вот исходники на С#(под MS Visual Studio), модифицируйте на здоровье.

fwLoader.zip

Изменено пользователем vacvvn

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот как это сделал это наш человек в Linux :) с уже скомпилированным гексоидом

sudo dfu-programmer at32uc3a3256 erase

sudo dfu-programmer at32uc3a3256 flash /media/mmc/STDIO_USB_EXAMPLE1.hex --debug 5 --suppress-bootloader-mem sudo dfu-programmer at32uc3a3256 start

 

Сначала качаеца файл zadig (Windows Driver Installer library for USB devices - это нужно для windows)

потом dfu-utils - для прошивки.

В linux все драйвера есть

 

В виндовс на одном из компов вылетает в синий экран - поэтому не могу показать что пишет на каждую команду.

в linux все OK

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет! Пытаюсь разобраться с загрузчиком на at32uc3a0512. Получилось его прошить, даже удается с его помощью обновлять прошивку. Задался вопросом попадания в него из приложения. Воспользовался одним из примеров Atmel, где они лихо загружают прошивки по установленным адресам FLASH с помощью функции jumpAddress(BOOT_SECTION). Сделал аналогичную запись у себя в приложении и запускаю функцию по нажатию клавиши:

#define BOOT_SECTION 0x80000000

void jumpAddress(unsigned int address);

{ asm("icall r12");}

Компилирую проект в Atmel Studuo 7 и зашиваю прошивку через загрузчик. По нажатию клавиши получаю reset приложения. А казалось бы должен по указанному адресу попасть в загрузчик. Как я понял из документации загрузчик начинается с адреса 0х80000000, а приложение с 0x80002000. Вход в загрузчик при условии высокого уровня на одном из пинов. При нажатии клавиши, он у меня висит на питании. Объясните невежде, где я заблуждаюсь ив корне не прав?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Neznaika сказал:

По нажатию клавиши получаю reset приложения...

Может, все-таки, железка обрабатывает событие входа в загрузчик немного хитрее, чем простым опросом ножки? Таким образом, в загрузчик Вы входите, но он, не видя условий обновления ПО, передает управление на приложение, заставляя Вас думать, что перезапускается основное ПО.

 

Цитата

{ asm("icall r12");}

Не совсем понимаю, зачем icall. Разве какой-нибудь прыжок (ijmp) не будет здесь более правильным?

 

На худой конец заведите, например, сторожевой таймер и переходите в загрузчик по его срабатыванию. Это будет работать, наверное, на всех МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, я сам думаю, что заход в загрузчик есть, но почему не реагирует на состояние ноги входа в него не понимаю. После включения питания и после внешнего ресета с кнопки я в него захожу, а после прыжка на 0х80000000 нет, странно. К сожалению нет проекта загрузчика, пробую его сейчас как то раздобыть в инете, но пока безуспешно. Я сам толком не понимаю, что это - { asm("icall r12");} , взял из примерочного проекта, стоял к нему комментарий о сохранении адреса в регистре R12. Визуально - преобразование команды ассемблера в С++, но это приводит к ресету приложения. В одной из веток видел, что перейти по адресу можно с помощью функции AppMain(), определенной как:

APP_FLASH_ADR=0x80000000;

void (*AppMain)(void)=((void(*)(void))APP_FLASH_ADR);

Но результат аналогичен выше упомянутому способу - ресет приложения, без задержки в загрузчике.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Neznaika сказал:

Но результат аналогичен выше упомянутому способу - ресет приложения, без задержки в загрузчике.

Инструкция icall - это косвенный вызов подпрограммы. Загружаете адрес функции в R12 и передаете управление по этому адресу.

По поводу загрузчика: скорее всего, в этом МК есть регистр, отражающий причину сброса (по питанию, программный/аппаратный сброс, сброс по WDT и т.д.), и загрузчик проверяет валидность режима сброса перед опросом ножки МК. Сбрасывайте по WDT и не забивайте голову ненужными догадками:wink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, попытался сбросить WDT... Результат тот же) Сброс приложения... Нет входа в загрузчик...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...