Как залить прошивку, извлечь прошивку и каким способом прошивка заливается Arduino IDE в модуль.

tigransk
Offline
Зарегистрирован: 20.08.2014

Здравствуйте! Я тут новичек, поэтому прошу сильно не пинать за туповатые вопросы. У меня в наличии имеется Arduino Mega 2560 для опытов и китайский USBasp. С помощью Arduino IDE скетч из примеров (например basics>fade) замечательно компилируется а затем также замечательно прошивается в модуль через usb. И замечательно работает.

Первый кривой вопрос - каким протоколом общается IDE с модулем, каким программатором является модуль? Как модуль прошивать не из Arduino IDE, тоесть какие настройки программатора выбирать в стороннем софте? STK500? Я правильно понимаю что бутлоадер как раз и обеспечивает функции программирования? 

Так как у меня есть еще и китайский USBasp, я не мог не проверить его в работе. Как проверить? Написать чего-то своего я еще не умудрился, поэтому я решил считать с модуля прошитый с помощью Arduino IDE скетч (basics>fade), и обратно его прошить. С помощью AVRDUDEPROG. Все вроде как замечательно считывается, прошивается, но результат отличается от оригинала (тоесть прошитого с помощью Arduino IDE), никаким fade там и не пахнет, светодиод начинает просто моргать.

Отсюда второй тупой вопрос. Что произошло? Почему содраная и прошитая прошивка не работает?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

1. Примерно около того.
2. Только ктулху знает как и чего вы там считывали и заливали. А у нас еще кофе не допит и потому гадать на кофейной гуще не имеем технической возможности.

tigransk
Offline
Зарегистрирован: 20.08.2014

Ну как. Берем модуль, к ISP разьему цепляем китайский USBasp, втыкаем его в usb, запускаем AVRDUDEPROG 3.3. На вкладке Program выбираем свой чип 2560, настройки программатора usbasp, жамкнул кнопки считать калибровочные ячейки, считать flash, считать eeprom, на вкладке fuses считать fuses, а затем на вкладке Automatic programming поставил галки flash, eeprom и fuses и жмакнул программировать все.

Както так.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

И что происходит?

tigransk
Offline
Зарегистрирован: 20.08.2014

Все читается (flash довольно долго), потом все программится, еще дольше, выскакивает табличка что все ОК (верификация flash eeprom) и все, светодиодик на плате начинает мигать совсем по другому... 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

А если выключить и снова включить?

tigransk
Offline
Зарегистрирован: 20.08.2014

Ну дык разумеется пробовал... нифига. Arduino IDE никак код от сливания не защищает случаем?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Мне по хрустальному шару погадать какие у вас там фьюзы выставлены?

tigransk
Offline
Зарегистрирован: 20.08.2014

А вы кофе допили? Может по гуще? :-)

Сечас посмотреть какие фьюзы выставлены нет возможности, я на работе а ардуинка дома. Но может вы подскажете на какие надо посмотреть? LOCKBIT1 LOCKBIT2? Подскажите что они делают.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Я кофе не люблю. Особенно на ночь глядя.
Когда оба лока 1 и 1 то можно читать и писать. Когда первый 0 второй 1 то можно читать но писать незя ну и оба 0 то уже ни читать ни писать незя.
Я не пойму чем вас нормальный способ не устраивает? Или имея на столе програматор это +5 к ЧСВ?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

— Чаинки не умеют предсказывать будущее, — голос матушки звучал спокойно. — Это всем известно.
— Кроме самих чаинок.
— Ну да, надо быть совсем слабоумным, чтобы пытаться спорить с чайной заваркой.

tigransk
Offline
Зарегистрирован: 20.08.2014

Спасибо, дома проверю. Программатор нужен не только для +5 к ЧСВ, но и для вполне нормального применения. Например для прошивки меги8 вне IDE готовым hex. Раньше я это делал с помощью 5 проводков, но это както бе. А еще вдруг я загрузчик на ардуинке прибью? Будет чем восстановить.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Ну так и берите готовый нех который иде компилирует нафиг его сливать с дуньки. Или не ищем легких путей? Да и не на каждой дуньке можно прибить загрузчик, разве что молотком. И при помощи другой дуньки всегда можно прошить дуньку.

tigransk
Offline
Зарегистрирован: 20.08.2014

Дунька у меня только одна пока. Кнопка "Стереть все" в AVRDUDEPROG разве не уничтожит загрузчик? Hex сливал с ардуинки только ради эксперимента и проверки  USBasp программатора, и был обескуражен отрицательным результатом.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Есть дуньки у которых загрузчик вытравлен на уровне чипа. Его только молотком стереть можно.

Arduino
Offline
Зарегистрирован: 12.05.2015

Вот это ник попался... У меня очень похожая проблема. Arduino MEGA2560 lock bit все чистые. Заливаю через avrdude напрямую прошивку через стандартный загрузчик (тип программатора avrispmkII) и все прекрасно работает. Спокойно читает hex файл, и спокойно заливает hex файл. Дошли руки до ISP программатора - и ничего не получается. Avrdude записывает hex, выдает что верификация прошла успешно, но плата не оживает, прошивка явно заливается как-то криво. При чтении тоже самое - вычитывается какой-то мусор, но явно не сама прошивка. Повторюсь, что биты блокировки ничего не блокируют.

avrdude: Device signature = 0x1e9801
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as FD
 
Lock bits: 3F
Сначала грешил на Arduino as ISP ( сделал из свободной платы UNO). Думаю, ну ладно... Купил USBasp - результат идентичен. Что интересно, оба ISP программатора bootloader записывают корректно, что из среды Arduino, что через командную строку avrdude. Но залить какой либо скетч, используя ISP программатор, при этом, уже не получается, даже через среду Arduino IDE. Помогите... Где мой косяк?!
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Глюки часто сыпятся при завышенной скорости программирования. Стандартная загрузка через бутлоадер насколько я помню идёт на скорости 19200. Попробуйте зажать на 19200 или ещё меньше..

Arduino
Offline
Зарегистрирован: 12.05.2015

Arduino ISP пробовал - не помогло. USB asp - насколько понимаю, тут нельзя управлять скорость. В системе просто устройство USBasp без всяких COM портов

Arduino
Offline
Зарегистрирован: 12.05.2015

И да, у меня стандартная загрузка через бутлоадер проходит на скорости 115200 и без всяких проблем!

Arduino
Offline
Зарегистрирован: 12.05.2015

В общем проблема так и не решена. На текущий момент, я без проблем через ISP программатор (USBasp или ArduinoISP) могу делать chip erase, устанавливать lock bits, загружать bootloader. Считавание и запись прошивки не возможна. Запись и чтение проходят без всяких ошибок, но устройство после такой прошивки не реботает, прочитанная прошивка содержит мусор + много 0xFF. Lock биты при этом не установлены :( Перепробовал кучу программ: Arduino IDE, avrdude_prog, eXtreme Burner - AVR, SinaProg, да и сам avrdude...

Через стандартный загрузчик могу как записывать так и считывать прошивки, на скорости 115200

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Помнится кто-то из здешних форумчан писал, что нарвался на супер левую мегу. Плата и весь обвес были как на меге2560, а сам чип был припаян мега 1280. Не ваш случай, чип какой стоит? :)

Arduino
Offline
Зарегистрирован: 12.05.2015

Чип 2560 :)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

У меня похожая тема была с китайской наной, программа не заливалась через USBasp если при загрузке не нажать и не держать ресет. Так получалось через раз...

Technolog
Offline
Зарегистрирован: 19.11.2014

Arduino пишет:

... У меня очень похожая проблема. Arduino MEGA2560 lock bit все чистые. Заливаю через avrdude напрямую прошивку через стандартный загрузчик (тип программатора avrispmkII) и все прекрасно работает. Спокойно читает hex файл, и спокойно заливает hex файл. Дошли руки до ISP программатора - и ничего не получается. Avrdude записывает hex, выдает что верификация прошла успешно, но плата не оживает, прошивка явно заливается как-то криво. При чтении тоже самое - вычитывается какой-то мусор, но явно не сама прошивка. Повторюсь, что биты блокировки ничего не блокируют.

avrdude: Device signature = 0x1e9801
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as FD
 
Lock bits: 3F
Сначала грешил на Arduino as ISP ( сделал из свободной платы UNO). Думаю, ну ладно... Купил USBasp - результат идентичен. Что интересно, оба ISP программатора bootloader записывают корректно, что из среды Arduino, что через командную строку avrdude. Но залить какой либо скетч, используя ISP программатор, при этом, уже не получается, даже через среду Arduino IDE. Помогите... Где мой косяк?!

Arduino пишет:

В общем проблема так и не решена. На текущий момент, я без проблем через ISP программатор (USBasp или ArduinoISP) могу делать chip erase, устанавливать lock bits, загружать bootloader. Считавание и запись прошивки не возможна. Запись и чтение проходят без всяких ошибок, но устройство после такой прошивки не реботает, прочитанная прошивка содержит мусор + много 0xFF. Lock биты при этом не установлены :( Перепробовал кучу программ: Arduino IDE, avrdude_prog, eXtreme Burner - AVR, SinaProg, да и сам avrdude...

Через стандартный загрузчик могу как записывать так и считывать прошивки, на скорости 115200

Столкнулся с точно такой же проблемой. Но определил грань когда "это" наступает, тоесть .hex файл грузится программатором Arduino as ISP в Мегу2560 но устройство не работает.

avrdude -q -C avrdude.conf -p m2560 -c avrisp -P COM7 -b 19200 -e -U flash:w:test128.hex

А случается это когда обьём компилируемого кода (Размер скетча в двоичном коде: как пише arduino IDE при компиляции скетча) превышает 131072 байта, это 128 килобайт или 2 в 17-й степени. При упрощении скетча до обьема при компиляции меньше 128 кБ  hex прошивается и устройство работает. Проверено многократно. Кстати при прошивке через ISP фюзы выставлялись для старта с нолевого адреса  так как ардуиновский загружчик стирался.

При зтом при записи в Мегу2560 загрузчика программатором Arduino as ISP и загрузке скетча напрямую через стандартный загрузчик (тип программатора avrispmkII) работают все скетчи обьемом и меньше 128 кБ и больше 128 кБ которые использовались при "испытании".

Думаю здесь причина в неправильной адресации в самой avrdude при записи в контроллер Atmega2560 через Arduino as ISP после адресов выше 128 кБ. Может кто сталкивался и решил проблему или знает как решить, отзовитесь.

 

msg31
Offline
Зарегистрирован: 01.12.2013

Technolog]</p> <p>[quote=Arduino пишет:

При зтом при записи в Мегу2560 загрузчика программатором Arduino as ISP и загрузке скетча напрямую через стандартный загрузчик (тип программатора avrispmkII) работают все скетчи обьемом и меньше 128 кБ и больше 128 кБ которые использовались при "испытании".

Думаю здесь причина в неправильной адресации в самой avrdude при записи в контроллер Atmega2560 через Arduino as ISP после адресов выше 128 кБ. Может кто сталкивался и решил проблему или знает как решить, отзовитесь.

Тоже столкнулся с подобной проблемой, но немного с неожиданной строны. Писал собственный загрузчик. И обнаружил, что программа записывается не только в указанную тобой память, но и делает дубль в память, отстоящую от заданной области памяти на 128 килобайт, то есть записываешь в 0..FFFF ячейки памяти, та же самая информация записывается и в 20000...200FF область флеш памяти программы. Соответсвенно, когда размер программы превышает 124 килобайта, то затирается загрузчик. 

Сначала думал, что я ошибся. Но потом скачал прошивку, которую делает загрузчик Ардуино. Перед этим, правда, надо сбросить фьюз старта с области загрузчика. В этой прошивке информация тоже дублируется.

Возможно это либо глюк atmega, либо это ограничение режима само-программирования, либо и я и разработчки загрузчика Ардуино 2560 не умеют пользоваться средствами само-программироания atmega2560.

Вот такая вот загогулина.

 

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

msg31 пишет:

 средствами само-программироания atmega2560.

Это что за такая фича !? :)

msg31
Offline
Зарегистрирован: 01.12.2013

Это та фича, которыми пользуется загрузчик (в том числе загрузчик Ардуино), когда загружает программу. 

Вот в даташите на atmega 2560 раздел 29.

29. Boot Loader Support – Read-While-Write Self-Programming