Неудачная попытка восстановить bootloader с помощью Arduino ISP
- Войдите на сайт для отправки комментариев
Здравствуйте. История такая.
Есть две китайских ардуинки nano, одна рабочая, а другая частично на половинку (скетчи в неё не льются, но залитые скетчи работают).
Программатора у меня нету, по этому решил пойти по пути Arduino as ISP
Делал по этой схеме и с кондёром на RST и без него
Шаги делаю следующие.
1) Подключаю рабочую ардуинку которая должна стать программатором
2) Заливаю скетч ArduinoISP
3) Выбираю в меню Инструменты - Программатор "Arduino as ISP"
4) Записать загрузчик.
И получаю на этом шаге ошибку. На самом деле не суть важно какую, но если решите что это может иметь значение то текст ошибки тут, залил на гугл диск
4) Меняю тип программатора на AVR ISP. Тоже ошибка но это ожидаемо.
5) Меняю снова на Программатор "Arduino as ISP" и после этого жму записать загрузчик и ошибок нет. Загрузчик установился. Вот тут результат
И вроде как хепи енд, но нет.
На целевую ардуинку как не заливались скетчи, так и продолжают успешно не заливаться.
Вот тут примерный текст ошибки, но там мало инфы о том, в чём может быть причина.
В общем то полурабочая ардуинка продолжает подавать признаки жизни, и на неё успешно заливаются (и работают) скетчи с помощью того же вышеупомянутого Arduino ISP прошивальщика если выбрать в меню "Скетч" - "Загрузить через программатор".
В крайнем случае на безрыбье и так сойдёт, но если есть у кого какие мысли как можно совсем полностью реанимировать ардуинку, то был бы очень благодарен
если вы хотите, чтобы кто-то вам помог - выложите все сообщения ошибок и выдачу программатора текстом на форум. убрав большие файлы под спойлер. Ходить по вашим ссылкам на гугл-диск никто не будет, тут это не принято.
После того как загрузчик успешно записан - скорость порта надо выставить на ту скорость, которая указана в загрузчике ! (обычно это 57600 или 115200, но никак не 19200 (как в логе ошибочной заливки) точно не верная цифра !)
nano - 115200
nano (old bootloader) - 57600
uno - 115200
minicore - 115200
Порывшись по интернетам пришёл к выводу, что стандартная скорость загрузки загрузчика 19200.
Впрочем, поскольку больше ничего не помогает, решил поднять скорость загрузки загрузчика до 57600 и даже до 115200.
Делал вот по этому мануалу.
Загрузчик загружается вроде бы успешно на таких скоростях, ошибок нет. Но при заливки скетча на скорости 57600 в восстанавливаемую ардуинку получаю всё ту же ошибку.
Осталось узнать что будет на 115200. И еще скриншот настроек платы в Arduino IDE не помешал бы. Я думаю вы догадались что после загрузки загрузчика - плату надо уже подключать напрямую, без второй ...
Плату отключал от программатора, выставлял скорость на 115200 ошибка всё та же.
Вот настройки. Впрочем сомневаюсь что в нём проблема, скетч ArduinoISP на рабочую плату то нормально заливается
Надо попробовать вариант без Old bootloader ! Old bootloader заливают китайцы в готовые платы. Вы же залили свежий загрузчик !
Конечно я пробовал и этот вариант...
Я даже больше скажу, я пробовал в файлике boards.txt заменить строчку
nano.menu.cpu.atmega328old.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex
на
nano.menu.cpu.atmega328old.bootloader.file=optiboot/optiboot_atmega328.hex
чтобы подгрузить другой бутлоадер. Делал я по инструкции из этого видео https://youtu.be/1TM-ADHb5D
В логах загрузки вижу что optiboot_atmega328 загружается, но ни с ATmega328P ни с ATmega328P (old bootloader) скетчи так и не льются на целевую ардуину. Скорости тоже пробовал разные.
У меня даже закралась мысль - что если загрузчик слетает во время включения/выключения питания на ардуине.
Я взял подлючил по usb обе две платы, чтобы после перезаливки бутлоадера я сразу смог по другому порту залить скетч на целевую ардуину. И снова неудача...
Ладно, у меня есть ещё одна другая не особо рабочая ардуина, попробую с ней поэксперементировать, напишу о результатах позже. А что с этой делать пока не понятно
А что с этой делать пока не понятно
для проверки попробуйте залить через ИСП не бутлоадер, а скетч, например блинк. Этим вы проверите, заливается ли вообще что-то на плату.
Если нет - имхо, МК сдох, проще выкинуть. Если заливается - то так и заливайте через программатор.
optiboot меньше по размерам и фьюзы надо другие выставлять ! Оптимально установить пакет MiniCore и залить загрузчик на основе этого пакета.
optiboot меньше по размерам и фьюзы надо другие выставлять !
нелогично, зачем? Для того, чтобы залить _МЕНЬШИЙ_ бут после большего, фьюзы менять необязательно, он и так влезет. Это для того чтоб залить БОЛЬШИЙ бут вместо меньшего - надо фьюзы менять...
Так точка старта меняется, а с ключом -D флеш не затирается полностью - будет с "мусора" стартовать.
Так точка старта меняется, а с ключом -D флеш не затирается полностью
не имеет значения, область. на которую указывает новый старт - затирается, остальное не важно.
проверено лично.
Что на нано с новым загрузчиком, что на про мини используется оптибут, при этом фьюзы выставлены на загрузчик 2кБ - и ничего, работает ))
Если нужны эти полтора килобайта, тогда проще выбрать в настройках уно и прошить загрузчик от нее - фьюзы сами выставятся как надо
Да я уже писал в первом посте что скетчи через ISP загружаются. Но хотелось бы добить бутлоадер и для удобства и ради спортивного интереса )
Из Уно бутлоадер успешно зашился, но скетчи не заливаются. Ошибки те же
Для этого в неиспользуемой области должны быть 0x00. Если там окажется код от старого загрузчика, то могут быть различные чудеса !
Если там окажется код от старого загрузчика, то могут быть различные чудеса !
непонятно, каким образом туда попадет указатель исполнения, если в конце нового загрузчика стоит джамп на начало скетча
Прошиваем большой загрузчик. Точка старта на его начало. Прошиваем маленький без стирания флеш и изменения фьюзов. В итоге маленький лежит в конце большого, а старт по прежнему на старт большого. Что тут не ясно ?
Прошиваем большой загрузчик. Точка старта на его начало. Прошиваем маленький без стирания флеш и изменения фьюзов. В итоге маленький лежит в конце большого, а старт по прежнему на старт большого. Что тут не ясно ?
не ясно, почему в таком в случае по нулевому адресу не лежит джамп на старт текущего загрузчика.
И еще, мне казалось, что загрузчик выравнивается по началу области, а не по концу. Ошибался?
Прошиваем большой загрузчик. Точка старта на его начало. Прошиваем маленький без стирания флеш и изменения фьюзов. В итоге маленький лежит в конце большого, а старт по прежнему на старт большого. Что тут не ясно ?
При прошивке загрузчика чип очищается, если уж на то пошло. Да и практика показывает, что проблем не возникает
проверь работоспособность уарта
Никакого джампа на загрузчик нет !!! Если выставлен фьюз использования загрузчика, то камень стартует с области выделенной под загрузчик без джампа ! В HEX файлах указаны конкретные адреса, куда писать байты и соответственно маленький загрузчик пишется в самый конец флеш.
При ключе -D ничего не стирается !!!
Никакого джампа на загрузчик нет !!!
ок, молчу
Прошиваем большой загрузчик. Точка старта на его начало. Прошиваем маленький без стирания флеш и изменения фьюзов. В итоге маленький лежит в конце большого, а старт по прежнему на старт большого. Что тут не ясно ?
При ключе -D ничего не стирается !!!
А он используется? При записи загрузчика через IDE?
[quote=berkutsoft]
Плату отключал от программатора, выставлял скорость на 115200 ошибка всё та же.
Вот настройки. Впрочем сомневаюсь что в нём проблема, скетч ArduinoISP на рабочую плату то нормально заливается
oldbootloader надо 57600
проверь работоспособность уарта
Я бы тоже рекомендовал проверить уарт
проверь работоспособность уарта
Я бы тоже рекомендовал проверить уарт
А надо ли?
После заливки бутлоадера идёт его верификация, то есть он и записывается и читается программаторм.
К тому же, как я уже дважды писал выше - скетчи через программатор заливаются на целевую ардуино.
Может я чего то не понимаю и скетчи могут загружаться и с неработающим уартом?
Может я чего то не понимаю и скетчи могут загружаться и с неработающим уартом?
не понимаете.
Скетчи через программатор загружаются мимо УАРТа, для этого процесса работающий УАРТ не нужен. А вот скетчи через загрузчик USB загружаются как раз через УАРТ, и если уарт не работает - то и скетчи загружаться не будут...
В вашем случае, как вы уже выяснили - бутлоадер через программатор вроде загружается. Но загрузка через USB не работает. Значит логично прверить, не дохлый ли УАРТ
Были случаи с нераспаянными/отвалившимися резисторами в 1 кОм на линиях TX RX между чипами.
Можно залить скетч, который что то выводит в UART ... типа Start и потом всё что получает через UART - выводит обратно (типа эхо)
Замкни выводы tx с rx и напиши в монитор порта. Должен быть эхо-ответ.
Оффтоп: Что за ОС используешь? Линух? Какой именно?
Замкни выводы tx с rx и напиши в монитор порта. Должен быть эхо-ответ.
Оффтоп: Что за ОС используешь? Линух? Какой именно?
Ubuntu 20.04, но и под Win 10 сейчас попробовал.
А вот скетчи через загрузчик USB загружаются как раз через УАРТ, и если уарт не работает - то и скетчи загружаться не будут...
А ведь точно, как я мог забыть, там же стоит конвертер usb to uart, дурья моя башка. Ну всё верно, тогда проблема точно в нём даже проверять смысла нет!
Тем более что я вторую подопытную нерабочую ардуинку только что прошил без проблем и скетчи она принимает нормально.
В общем спасибо всем неравнодушным, проблему можно считать решенной.
Тоже есть нана с неработающим уартом. Через программатор шьется. Забил ))