Неудачная попытка восстановить bootloader с помощью Arduino ISP

berkutsoft
Offline
Зарегистрирован: 28.03.2022

Здравствуйте. История такая.
Есть две китайских ардуинки nano, одна рабочая, а другая частично на половинку (скетчи в неё не льются, но залитые скетчи работают). 
Программатора у меня нету, по этому решил пойти по пути Arduino as ISP

Делал по этой схеме и с кондёром на RST и без него

Шаги делаю следующие.
1) Подключаю рабочую ардуинку которая должна стать программатором
2) Заливаю скетч ArduinoISP
3) Выбираю в меню Инструменты - Программатор "Arduino as ISP"
4) Записать загрузчик. 
И получаю на этом шаге ошибку. На самом деле не суть важно какую, но если решите что это может иметь значение то текст ошибки тут, залил на гугл диск
4) Меняю тип программатора на AVR ISP. Тоже ошибка но это ожидаемо.
5) Меняю снова на Программатор "Arduino as ISP" и после этого жму записать загрузчик и ошибок нет. Загрузчик установился. Вот тут результат

И вроде как хепи енд, но нет. 
На целевую ардуинку как не заливались скетчи, так и продолжают успешно не заливаться. 
Вот тут примерный текст ошибки, но там мало инфы о том, в чём может быть причина.

В общем то полурабочая ардуинка продолжает подавать признаки жизни, и на неё успешно заливаются (и работают) скетчи с помощью того же вышеупомянутого Arduino ISP прошивальщика если выбрать в меню "Скетч" - "Загрузить через программатор".
В крайнем случае на безрыбье и так сойдёт, но если есть у кого какие мысли как можно совсем полностью реанимировать ардуинку, то был бы очень благодарен 

b707
Offline
Зарегистрирован: 26.05.2017

если вы хотите, чтобы кто-то вам помог - выложите все сообщения ошибок и выдачу программатора текстом на форум. убрав большие файлы под спойлер. Ходить по вашим ссылкам на гугл-диск никто не будет, тут это не принято.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

После того как загрузчик успешно записан - скорость порта надо выставить на ту скорость, которая указана в загрузчике ! (обычно это 57600 или 115200, но никак не 19200 (как в логе ошибочной заливки) точно не верная цифра !)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

nano - 115200
nano (old bootloader) - 57600
uno - 115200

minicore - 115200

berkutsoft
Offline
Зарегистрирован: 28.03.2022

Порывшись по интернетам пришёл к выводу, что стандартная скорость загрузки загрузчика 19200. 
Впрочем, поскольку больше ничего не помогает, решил поднять скорость загрузки загрузчика до 57600 и даже до 115200. 
Делал вот по этому мануалу

Загрузчик загружается вроде бы успешно на таких скоростях, ошибок нет. Но при заливки скетча на скорости 57600 в восстанавливаемую ардуинку получаю всё ту же ошибку. 

/home/berkutsoft/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude -C/home/berkutsoft/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf -v -patmega328p -carduino -P/dev/ttyUSB0 -b57600 -D -Uflash:w:/tmp/arduino_build_41591/Blink.ino.hex:i 

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/home/berkutsoft/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf"
         User configuration file is "/home/berkutsoft/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/ttyUSB0
         Using Programmer              : arduino
         Overriding Baud Rate          : 57600
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00

avrdude done.  Thank you.

Problem uploading to board.  See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Осталось узнать что будет на 115200. И еще скриншот настроек платы в Arduino IDE не помешал бы. Я думаю вы догадались что после загрузки загрузчика - плату надо уже подключать напрямую, без второй ...

berkutsoft
Offline
Зарегистрирован: 28.03.2022

Плату отключал от программатора, выставлял скорость на 115200 ошибка всё та же.
Вот настройки. Впрочем сомневаюсь что в нём проблема, скетч ArduinoISP на рабочую плату то нормально заливается 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Надо попробовать вариант без Old bootloader ! Old bootloader заливают китайцы в готовые платы. Вы же залили свежий загрузчик !

berkutsoft
Offline
Зарегистрирован: 28.03.2022

Конечно я пробовал и этот вариант...
Я даже больше скажу, я пробовал в файлике 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 обе две платы, чтобы после перезаливки бутлоадера я сразу смог по другому порту залить скетч на целевую ардуину. И снова неудача... 

Ладно, у меня есть ещё одна другая не особо рабочая ардуина, попробую с ней поэксперементировать, напишу о результатах позже. А что с этой делать пока не понятно

b707
Offline
Зарегистрирован: 26.05.2017

berkutsoft пишет:

А что с этой делать пока не понятно

для проверки попробуйте залить через ИСП не бутлоадер, а скетч, например блинк. Этим вы проверите, заливается ли вообще что-то на плату.

Если нет - имхо, МК сдох, проще выкинуть. Если заливается - то так и заливайте через программатор.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

optiboot меньше по размерам и фьюзы надо другие выставлять ! Оптимально установить пакет MiniCore и залить загрузчик на основе этого пакета. 

b707
Offline
Зарегистрирован: 26.05.2017

Komandir пишет:

optiboot меньше по размерам и фьюзы надо другие выставлять !

нелогично, зачем? Для того, чтобы залить _МЕНЬШИЙ_ бут после большего, фьюзы менять необязательно, он и так влезет. Это для того чтоб залить БОЛЬШИЙ бут вместо меньшего - надо фьюзы менять...

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Так точка старта меняется, а с ключом -D флеш не затирается полностью - будет с "мусора" стартовать.

b707
Offline
Зарегистрирован: 26.05.2017

Komandir пишет:

Так точка старта меняется, а с ключом -D флеш не затирается полностью

не имеет значения, область. на которую указывает новый старт - затирается, остальное не важно.

проверено лично.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Что на нано с новым загрузчиком, что на про мини используется оптибут, при этом фьюзы выставлены на загрузчик 2кБ - и ничего, работает ))

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Если нужны эти полтора килобайта, тогда проще выбрать в настройках уно и прошить загрузчик от нее - фьюзы сами выставятся как надо

berkutsoft
Offline
Зарегистрирован: 28.03.2022

Да я уже писал в первом посте что скетчи через ISP загружаются. Но хотелось бы добить бутлоадер и для удобства и ради спортивного интереса ) 

berkutsoft
Offline
Зарегистрирован: 28.03.2022

Из Уно бутлоадер успешно зашился, но скетчи не заливаются. Ошибки те же

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

v258 пишет:
Что на нано с новым загрузчиком, что на про мини используется оптибут, при этом фьюзы выставлены на загрузчик 2кБ - и ничего, работает ))

Для этого в неиспользуемой области должны быть 0x00. Если там окажется код от старого загрузчика, то могут быть различные чудеса !

b707
Offline
Зарегистрирован: 26.05.2017

Komandir пишет:

Если там окажется код от старого загрузчика, то могут быть различные чудеса !

непонятно, каким образом туда попадет указатель исполнения, если в конце нового загрузчика стоит джамп на начало скетча

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Прошиваем большой загрузчик. Точка старта на его начало. Прошиваем маленький без стирания флеш и изменения фьюзов. В итоге маленький лежит в конце большого, а старт по прежнему на старт большого. Что тут не ясно ?

b707
Offline
Зарегистрирован: 26.05.2017

Komandir пишет:

Прошиваем большой загрузчик. Точка старта на его начало. Прошиваем маленький без стирания флеш и изменения фьюзов. В итоге маленький лежит в конце большого, а старт по прежнему на старт большого. Что тут не ясно ?

не ясно, почему в таком в случае по нулевому адресу не лежит джамп на старт текущего загрузчика.

И еще, мне казалось, что загрузчик выравнивается по началу области, а не по концу. Ошибался?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Komandir пишет:

Прошиваем большой загрузчик. Точка старта на его начало. Прошиваем маленький без стирания флеш и изменения фьюзов. В итоге маленький лежит в конце большого, а старт по прежнему на старт большого. Что тут не ясно ?


При прошивке загрузчика чип очищается, если уж на то пошло. Да и практика показывает, что проблем не возникает

rkit
Offline
Зарегистрирован: 23.11.2016

проверь работоспособность уарта

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Никакого джампа на загрузчик нет !!! Если выставлен фьюз использования загрузчика, то камень стартует с области выделенной под загрузчик без джампа ! В HEX файлах указаны конкретные адреса, куда писать байты и соответственно маленький загрузчик пишется в самый конец флеш.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

v258 пишет:
При прошивке загрузчика чип очищается, если уж на то пошло. Да и практика показывает, что проблем не возникает

При ключе -D ничего не стирается !!!

b707
Offline
Зарегистрирован: 26.05.2017

Komandir пишет:

Никакого джампа на загрузчик нет !!!

ок, молчу

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Komandir пишет:

v258 пишет:
Komandir пишет:

Прошиваем большой загрузчик. Точка старта на его начало. Прошиваем маленький без стирания флеш и изменения фьюзов. В итоге маленький лежит в конце большого, а старт по прежнему на старт большого. Что тут не ясно ?

При прошивке загрузчика чип очищается, если уж на то пошло. Да и практика показывает, что проблем не возникает

При ключе -D ничего не стирается !!!


А он используется? При записи загрузчика через IDE?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

[quote=berkutsoft]

Плату отключал от программатора, выставлял скорость на 115200 ошибка всё та же.
Вот настройки. Впрочем сомневаюсь что в нём проблема, скетч ArduinoISP на рабочую плату то нормально заливается 

 

oldbootloader надо 57600

 

SergeiL
SergeiL аватар
Offline
Зарегистрирован: 05.11.2018

rkit пишет:

проверь работоспособность уарта

Я бы тоже рекомендовал проверить уарт

berkutsoft
Offline
Зарегистрирован: 28.03.2022

SergeiL пишет:

rkit пишет:

проверь работоспособность уарта

Я бы тоже рекомендовал проверить уарт

А надо ли?
После заливки бутлоадера идёт его верификация, то есть он и записывается и читается программаторм.
К тому же, как я уже дважды писал выше - скетчи через программатор заливаются на целевую ардуино.
Может я чего то не понимаю и скетчи могут загружаться и с неработающим уартом?

b707
Offline
Зарегистрирован: 26.05.2017

berkutsoft пишет:

Может я чего то не понимаю и скетчи могут загружаться и с неработающим уартом?

не понимаете.

Скетчи через программатор загружаются мимо УАРТа, для этого процесса работающий УАРТ не нужен. А вот скетчи через загрузчик USB загружаются как раз через УАРТ, и если уарт не работает - то и скетчи загружаться не будут...

В вашем случае, как вы уже выяснили - бутлоадер через программатор вроде загружается.  Но загрузка через USB не работает. Значит логично прверить, не дохлый ли УАРТ

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Были случаи с нераспаянными/отвалившимися резисторами в 1 кОм на линиях TX RX между чипами.

Можно залить скетч, который что то выводит в UART ... типа Start и потом всё что получает через UART - выводит обратно (типа эхо)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Замкни выводы tx с rx и напиши в монитор порта. Должен быть эхо-ответ.

Оффтоп: Что за ОС используешь? Линух? Какой именно?

berkutsoft
Offline
Зарегистрирован: 28.03.2022

BOOM пишет:

Замкни выводы tx с rx и напиши в монитор порта. Должен быть эхо-ответ.

Оффтоп: Что за ОС используешь? Линух? Какой именно?

Ubuntu 20.04, но и под Win 10 сейчас попробовал.

b707 пишет:

А вот скетчи через загрузчик USB загружаются как раз через УАРТ, и если уарт не работает - то и скетчи загружаться не будут...

А ведь точно, как я мог забыть, там же стоит конвертер  usb to uart, дурья моя башка. Ну всё верно, тогда проблема точно в нём даже проверять смысла нет! 

Тем более что я вторую подопытную нерабочую ардуинку только что прошил без проблем и скетчи она принимает нормально.

В общем спасибо всем неравнодушным, проблему можно считать решенной. 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Тоже есть нана с неработающим уартом. Через программатор шьется. Забил ))