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

bootloader

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

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


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

Вы, собственно, не сказали чем Вас не устраивает приведённый вполне адекватный, за исключением на мой взгляд лишнего __delay_cycles, способ.

На форуме уже обсуждался этот вопрос. И из чисто программных этот способ наиболее полно соответствует понятию полного сброса.

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


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

чем Вас не устраивает...

 

Собственно устраивает.

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

Спасибо за консультацию.

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


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

Только я не был уверен, что не существует других более простых способов.
Если речь о программном ресете - то, по другому в AVR и не сделать. Если Ваш бутлоадер стартует с известного Вам адреса (наверное, это так и есть), то можно банально перейти по этому адресу, примерно, так:

void (*bootloader)(void) = 0x12345;
......
case UPDATE_FIRMWARE:  bootloader();

 

P.S. При таком переходе на бутлоадер есть "подводные камни" в виде несброшенных и продолжающих работать устройств (таймеры, UART, SPI и т.д.).

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


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

Если Ваш бутлоадер стартует с известного Вам адреса (наверное, это так и есть), то можно банально перейти по этому адресу...

 

Прочитав ветку Как программно сгенерить ресет? решил остановиться на WDT...

Хотя вариант с переходом по адресу, в моем случае, наверное был бы не хуже.

Только вот не знаю я с какого адреса стартует бутлоадер...

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


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

решил остановиться на WDT...

Хотя вариант с переходом по адресу, в моем случае, наверное был бы не хуже.

Только вот не знаю я с какого адреса стартует бутлоадер...

Wdt - надежнее, потому что, вся переферия тоже сбрасывается!

Если вы не используете бутлоадер, (fuse есть куда ресет вектор будет указывать) будет стартовать с 0.

если fuse стерт (0) то на начало бутлоадера, почитайте описание fuse.

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


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

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

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

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

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

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

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

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

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

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