Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: bootloader
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
tourist
Имеется bootloader стартующий после сброса. Доступ к устройству затруднен, поэтому, для обновления прошивки, приходится делать программный сброс.
Сейчас я для этого использую WDT:
Код
case UPDATE_FIRMWARE:
            __delay_cycles(10000000); //ждем FBOOT
            __watchdog_reset();
            WDTCR |= (1<<WDCE) | (1<<WDE);
            WDTCR  = (1<<WDE) | (0<<WDP2) | (0<<WDP1)| (1<<WDP0);
            while(1){__no_operation();} // ждем сброса по WDT
...


Собственно вопрос: есть ли другие способы сделать программный reset (передать управление bootloader)?
Кто как вообще это делает?

P.S.: использую AVR Bootloader FastBoot von Peter Dannegger
P.P.S.: MK - tiny2313
IgorKossak
Вы, собственно, не сказали чем Вас не устраивает приведённый вполне адекватный, за исключением на мой взгляд лишнего __delay_cycles, способ.
На форуме уже обсуждался этот вопрос. И из чисто программных этот способ наиболее полно соответствует понятию полного сброса.
tourist
Цитата(IgorKossak @ Oct 22 2009, 11:47) *
чем Вас не устраивает...


Собственно устраивает.
Только я не был уверен, что не существует других более простых способов.
Спасибо за консультацию.
Палыч
Цитата(tourist @ Oct 22 2009, 11:56) *
Только я не был уверен, что не существует других более простых способов.
Если речь о программном ресете - то, по другому в AVR и не сделать. Если Ваш бутлоадер стартует с известного Вам адреса (наверное, это так и есть), то можно банально перейти по этому адресу, примерно, так:
Код
void (*bootloader)(void) = 0x12345;
......
case UPDATE_FIRMWARE:  bootloader();


P.S. При таком переходе на бутлоадер есть "подводные камни" в виде несброшенных и продолжающих работать устройств (таймеры, UART, SPI и т.д.).
tourist
Цитата(Палыч @ Oct 22 2009, 12:22) *
Если Ваш бутлоадер стартует с известного Вам адреса (наверное, это так и есть), то можно банально перейти по этому адресу...


Прочитав ветку Как программно сгенерить ресет? решил остановиться на WDT...
Хотя вариант с переходом по адресу, в моем случае, наверное был бы не хуже.
Только вот не знаю я с какого адреса стартует бутлоадер...
KRS
Цитата(tourist @ Oct 22 2009, 13:35) *
решил остановиться на WDT...
Хотя вариант с переходом по адресу, в моем случае, наверное был бы не хуже.
Только вот не знаю я с какого адреса стартует бутлоадер...

Wdt - надежнее, потому что, вся переферия тоже сбрасывается!
Если вы не используете бутлоадер, (fuse есть куда ресет вектор будет указывать) будет стартовать с 0.
если fuse стерт (0) то на начало бутлоадера, почитайте описание fuse.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.