Как восстановить Arduino Nano после bootloop? (РЕШЕНО!)

Тема в разделе "Arduino & Shields", создана пользователем solegs, 31 авг 2018.

Метки:
  1. solegs

    solegs Нерд

    Всем доброго!

    После того, как я попытался отключить ватчдог вот этими командами,

    Код (C++):
    WDTCSR |= (1<<WDE) | (1<< WDCE);
    WDTCSR &= ~(1<<WDE);
    Ардуинка ушла в постоянный ребут (bootloop). Для восстановления вроде рекомендуется отключить питание, затем включить и успеть загрузить любой скетч или бутлоадер до того, как она уйдёт в бутлуп. Но через юсб не получалось загрузить ничего - ни блинк, ни бутлоадер.

    А ещё рекомендуют загрузить другой бутлоадер - от Optiboot.

    Ладно, сделал я из другой наны программатор Arduino ISP, подключил его к ICSP пострадавшей и дудкой и попробовал загрузить блинк. И он загрузился! Ну, если верить сообщениям дудки - записала, прочитала, проверила - ок. И - да, диодик на плате перестал мигать "как бешеный" - ардуинка вышла из бутлупа! ))
    Загрузился, но не заработал. Не замигал светодиод.
    Ладно, загрузил тогда я бутлоадер от оптибут - он, по идее, решает проблему с ватчдогом и ещё всякие улучшения даёт. Загрузился. Но по юсб всё равно не хочет скетчи загружать, ни при скорости 115200 (это оптибут поставил), ни при 57600, ни при 19200. А через ICSP и программатор всё грузится без ошибок, на 19200, но ничего не выполняется.

    Похоже, нужно сделать что-то ещё, ещё один шаг, чтобы вернуть нану в рабочее состояние. Что именно, не подскажете? Если сталкивались с таким, конечно же...
     
  2. parovoZZ

    parovoZZ Гуру

    Стереть её полностью (вместо с быдлозагрузчиком), а потом загрузить желаемое.
     
    Airbus нравится это.
  3. solegs

    solegs Нерд

    В Avedudess есть такое - стереть флэш и еепром. Стирал. Не помогло. В смысле - так же пишется только через icsp, по юсб не пишется, не выполняется загруженное. Что-то, видимо, есть внутри ещё, не стёртое либо наоборот, затёртое...
    Фьюзы, кстати, успешно читаются и пишутся через icsp - пробовал разные их варианты, без результата.
     
  4. parovoZZ

    parovoZZ Гуру

    Вместе с областью загрузчика? С дудкой давно не работал - не помню как оно там.
     
  5. Airbus

    Airbus Радиохулиган Модератор

    Да.Трет все.На корню.
     
  6. solegs

    solegs Нерд

    Загрузчик же занимает часть флэша, потому и сотрётся вместе со всем флэшем. Да и в Avrdudess нет такого, чтобы отдельно стирало или сохраняло бут-сектор. Ей, дудке, это вообще пофиг, по-моему, есть там загрузчик или нет. И если я хочу чтобы загрузчик там был, то должен сам позаботиться об этом.
     
    Airbus нравится это.
  7. b707

    b707 Гуру

    да там по идее уже все стерто при загрузке по ICSP
     
    Airbus нравится это.
  8. Airbus

    Airbus Радиохулиган Модератор

    Тереть надо.Ибо может криво прошиться.Попадал так уже.Тупо забыл стереть.Загружал меньший НЕХ на больший.Видимо хвост остался.Если наоборот то может и затрет полностью.
     
  9. parovoZZ

    parovoZZ Гуру

    вообще программа не должна уходить из своего адресного пространства.
     
  10. solegs

    solegs Нерд

    Всё, починил! =))

    Помогло то, что последние Arduino IDE (у меня 1.8.3) при компилировании скетча создают два hex-файла - один из них обычный, второй - с загрузчиком. Вот такая последовательность действий вернула в работу мою нану:

    1) в Arduino IDE компилируем скетч, любой, действие которого сразу можно увидеть, хоть тот же Блинк.
    2) смотрим путь до временного каталога, в котором всё скомпилировалось. Если пути не показаны при компиляции, в настройках разрешаем вывод сообщений во время компиляции. Идём в этот каталог.
    3) В этом каталоге два hex-файлы, для блинка это будут "Blink.ino.hex" и "Sweep.ino.with_bootloader.hex" - берём файл c бутлоадером и записываем его дудкой через программатор, подключённый к разъёму ICSP на плате "больной" ардуинки. При этом лучше на всякий случай указать дудке, что нужно так же стереть флэш и еепром. Фьюзы я не трогал, но лучше сперва их их проверить, те ли выставлены.
    4) отключаем программатор от ICSP платы, подключаем её к юсб - и вуа-ля! всё работает, всё заливается теперь через юсб! =))

    Кстати, так как у меня в настройках Ардуины ИДЕ на момент компиляции оставался мой последний выбор - "Board: 'OptiBoot on 32-pin cpus', Processor: 'Atmega328p', CPU Speed: '16 MHz' - то в итоге я получил ардуину нано с загрузчиком от Оптибут и скоростью загрузки через юсб в 115200 кбит/с =)

    Напомню - просто прошить загрузчик из Arduino IDE (Tools -> Burn Bootloader) не получалось.

    Надеюсь, этот опыт пригодится кому-то ещё =)
     
    Un_ka, DetSimen, Airbus и ещё 1-му нравится это.
  11. Airbus

    Airbus Радиохулиган Модератор

    Все гениальное просто.Надо внести в FAQ.Только Вот этот файл с бутом я что то не найду.Он точно там?
     
    Последнее редактирование: 3 сен 2018
    DetSimen нравится это.
  12. Airbus

    Airbus Радиохулиган Модератор

    Всё нашёл.Только по другому называется у меня 1.8.5 "Blink.ino.with_bootloader" А в 1.6.5. такое не прокатывает там такого файла нет.
     
  13. ZAZ-965

    ZAZ-965 Гуру

    Можно немного упростить - Скетч - Экспорт бинарного файла (получаем два варианта прошивки в папке со скетчем). Затем Скетч - Показать папку скетча.
    В Arduino IDE 1.8.6 у Nano теперь по умолчанию Optiboot. Осталось дождаться такого же для ProMini.
     

    Вложения:

  14. parovoZZ

    parovoZZ Гуру

    Есть. В папке TEMP лежит. Полная ссылка в выводах линковщика.
     
  15. b707

    b707 Гуру

    шаманство какое-то....
     
  16. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Просто прошить бутлоадер по УСБ (софт-способом) можно только при "живом" же бутлоадере. Например чтоб обновить его версию. Что-то же должно "слушать" и понимать входящий поток. Это как раз бутлоадер и делает. Классическая ситуация курицы и яйца. А если загрузчик не работает - тогда только аппаратным способом через программатор.
     
  17. parovoZZ

    parovoZZ Гуру

    бутлодырь может сам себя затереть?
     
  18. parovoZZ

    parovoZZ Гуру

    скорее всего с фьюзами для бутлодыря косяк. А фьюзы перешиваются только в момент прошивки бутлодыря, ибо исполняемая программа не может писать в регистры фьюзов. ТС что-то не договаривает. Впрочем, это его право))
     
  19. Airbus

    Airbus Радиохулиган Модератор

    Эт Ежу понятно.Там другой вопрос ТС запорол Лодыря и через USB уже никак.Только через ISP.Хотя можно прям из папки IDE с Лодырями прошить.Главное волшебные фьюзы!
     
  20. Airbus

    Airbus Радиохулиган Модератор

    Сам себя вряд ли но иногда слетает нах.Пару раз было.Тут пару лет назал кто то писал что если скомпилить пустой скетч и прошить его по ISP то это и будет Бутлоадер.Я не проверял но идея интересная