Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT90USB647 - вызов flash Bootloader из программы
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Mty
Привет!

Хочу по команде вызывать штатный бутлоадер в at90usb647 для перепрошивки через FLIP программатор новой firmware по USB.
Делаю так -

Код
typedef void (*pt2Function)(void);    // BootLoader call

pt2Function BootCall = (pt2Function)0x7800;  // bootloader address at90usb64 = 0x7800
BootCall(); // переход


В результате вроде проц сбрасывается, внешние порты переходят в Z состояние, но USB порт как был подключен как CDC устройство к компу, так и остается.
Видимо надо как то отключать USB контроллер перед переходом на bootloader, или как?

D.
controller_m30
Попробуйте так.
Чтоб для компьютера сымитировать переподключение USB устройства не вынимая его из гнезда USB - надо на несколько секунд выключить подтягивающий резистор на линии D+ или D-, а затем снова этот резистор включить. Комп воспримет это как отключение одного устройства и подключение другого, и начнёт энумерацию по новой.

В AT90USB647 за откл\вкл резистора отвечает бит DETACH, в регистре UDCON. 0-резистор выкл. 1-резистор вкл. По сбросу этот бит =1 (т.е. резистор подключен к шине USB), поэтому несмотря на сброс контроллера, комп не видит никаких изменений на шине, и продолжает показывать в диспетчере старые данные об устройстве.

Приведёт ли это к запуску бутлоадера не знаю (пробуйте), но комп точно начнёт определение свойств вновь подключенного устройства.
Сергей Борщ
Цитата(Mty @ Feb 10 2016, 13:27) *
Код
// bootloader address at90usb64 = 0x7800
Неа. Это адрес в словах, а компилятор хочет в байтах. Умножьте на два "и сразу польется вода".
Mty
Цитата(Сергей Борщ @ Feb 10 2016, 16:42) *
Неа. Это адрес в словах, а компилятор хочет в байтах. Умножьте на два "и сразу польется вода".


Опа! Спасибо - попробую!
Mty
Привет!

Попробовал - результат тот же.
Код
pt2Function BootCall = (pt2Function)0xF000;  // bootloader address at90usb64 = 0x7800 words
BootCall(); // переход


При переходе CDC девайс не отключается, если выдернуть провод и подключить - определяется как неизвестное устройство.
FLIP не видит девайс.
Ума не приложу в чем дело
В мане написано
http://www.atmel.com/images/doc7593.pdf
Цитата
29.5 Entering the Boot Loader program
The boot loader can be executed
with three different conditions:
29.5.1 Regular application conditions.
A jump or call from the application program. This may be initiated by a trigger such as a com-
mand received via USART, SPI or USB.


Что бутлоадер вызывать из проги можно, дефолтные bootsz указывают на адрес 0x7800 в words, вроде все правильно, а не работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.