реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> bootloader, и программный Reset
tourist
сообщение Oct 22 2009, 08:31
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 6-04-09
Из: Донецк
Пользователь №: 47 247



Имеется 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

Сообщение отредактировал tourist - Oct 22 2009, 08:39


--------------------
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 22 2009, 08:47
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Вы, собственно, не сказали чем Вас не устраивает приведённый вполне адекватный, за исключением на мой взгляд лишнего __delay_cycles, способ.
На форуме уже обсуждался этот вопрос. И из чисто программных этот способ наиболее полно соответствует понятию полного сброса.
Go to the top of the page
 
+Quote Post
tourist
сообщение Oct 22 2009, 08:56
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 6-04-09
Из: Донецк
Пользователь №: 47 247



Цитата(IgorKossak @ Oct 22 2009, 11:47) *
чем Вас не устраивает...


Собственно устраивает.
Только я не был уверен, что не существует других более простых способов.
Спасибо за консультацию.


--------------------
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 22 2009, 09:22
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



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


P.S. При таком переходе на бутлоадер есть "подводные камни" в виде несброшенных и продолжающих работать устройств (таймеры, UART, SPI и т.д.).
Go to the top of the page
 
+Quote Post
tourist
сообщение Oct 22 2009, 09:35
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 6-04-09
Из: Донецк
Пользователь №: 47 247



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


Прочитав ветку Как программно сгенерить ресет? решил остановиться на WDT...
Хотя вариант с переходом по адресу, в моем случае, наверное был бы не хуже.
Только вот не знаю я с какого адреса стартует бутлоадер...


--------------------
Go to the top of the page
 
+Quote Post
KRS
сообщение Oct 22 2009, 09:50
Сообщение #6


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

Wdt - надежнее, потому что, вся переферия тоже сбрасывается!
Если вы не используете бутлоадер, (fuse есть куда ресет вектор будет указывать) будет стартовать с 0.
если fuse стерт (0) то на начало бутлоадера, почитайте описание fuse.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016