Как залить прошивку, извлечь прошивку и каким способом прошивка заливается Arduino IDE в модуль.
- Войдите на сайт для отправки комментариев
Здравствуйте! Я тут новичек, поэтому прошу сильно не пинать за туповатые вопросы. У меня в наличии имеется Arduino Mega 2560 для опытов и китайский USBasp. С помощью Arduino IDE скетч из примеров (например basics>fade) замечательно компилируется а затем также замечательно прошивается в модуль через usb. И замечательно работает.
Первый кривой вопрос - каким протоколом общается IDE с модулем, каким программатором является модуль? Как модуль прошивать не из Arduino IDE, тоесть какие настройки программатора выбирать в стороннем софте? STK500? Я правильно понимаю что бутлоадер как раз и обеспечивает функции программирования?
Так как у меня есть еще и китайский USBasp, я не мог не проверить его в работе. Как проверить? Написать чего-то своего я еще не умудрился, поэтому я решил считать с модуля прошитый с помощью Arduino IDE скетч (basics>fade), и обратно его прошить. С помощью AVRDUDEPROG. Все вроде как замечательно считывается, прошивается, но результат отличается от оригинала (тоесть прошитого с помощью Arduino IDE), никаким fade там и не пахнет, светодиод начинает просто моргать.
Отсюда второй тупой вопрос. Что произошло? Почему содраная и прошитая прошивка не работает?
1. Примерно около того.
2. Только ктулху знает как и чего вы там считывали и заливали. А у нас еще кофе не допит и потому гадать на кофейной гуще не имеем технической возможности.
Ну как. Берем модуль, к ISP разьему цепляем китайский USBasp, втыкаем его в usb, запускаем AVRDUDEPROG 3.3. На вкладке Program выбираем свой чип 2560, настройки программатора usbasp, жамкнул кнопки считать калибровочные ячейки, считать flash, считать eeprom, на вкладке fuses считать fuses, а затем на вкладке Automatic programming поставил галки flash, eeprom и fuses и жмакнул программировать все.
Както так.
И что происходит?
Все читается (flash довольно долго), потом все программится, еще дольше, выскакивает табличка что все ОК (верификация flash eeprom) и все, светодиодик на плате начинает мигать совсем по другому...
А если выключить и снова включить?
Ну дык разумеется пробовал... нифига. Arduino IDE никак код от сливания не защищает случаем?
Мне по хрустальному шару погадать какие у вас там фьюзы выставлены?
А вы кофе допили? Может по гуще? :-)
Сечас посмотреть какие фьюзы выставлены нет возможности, я на работе а ардуинка дома. Но может вы подскажете на какие надо посмотреть? LOCKBIT1 LOCKBIT2? Подскажите что они делают.
Я кофе не люблю. Особенно на ночь глядя.
Когда оба лока 1 и 1 то можно читать и писать. Когда первый 0 второй 1 то можно читать но писать незя ну и оба 0 то уже ни читать ни писать незя.
Я не пойму чем вас нормальный способ не устраивает? Или имея на столе програматор это +5 к ЧСВ?
— Чаинки не умеют предсказывать будущее, — голос матушки звучал спокойно. — Это всем известно.
— Кроме самих чаинок.
— Ну да, надо быть совсем слабоумным, чтобы пытаться спорить с чайной заваркой.
Спасибо, дома проверю. Программатор нужен не только для +5 к ЧСВ, но и для вполне нормального применения. Например для прошивки меги8 вне IDE готовым hex. Раньше я это делал с помощью 5 проводков, но это както бе. А еще вдруг я загрузчик на ардуинке прибью? Будет чем восстановить.
Ну так и берите готовый нех который иде компилирует нафиг его сливать с дуньки. Или не ищем легких путей? Да и не на каждой дуньке можно прибить загрузчик, разве что молотком. И при помощи другой дуньки всегда можно прошить дуньку.
Дунька у меня только одна пока. Кнопка "Стереть все" в AVRDUDEPROG разве не уничтожит загрузчик? Hex сливал с ардуинки только ради эксперимента и проверки USBasp программатора, и был обескуражен отрицательным результатом.
Есть дуньки у которых загрузчик вытравлен на уровне чипа. Его только молотком стереть можно.
Вот это ник попался... У меня очень похожая проблема. Arduino MEGA2560 lock bit все чистые. Заливаю через avrdude напрямую прошивку через стандартный загрузчик (тип программатора avrispmkII) и все прекрасно работает. Спокойно читает hex файл, и спокойно заливает hex файл. Дошли руки до ISP программатора - и ничего не получается. Avrdude записывает hex, выдает что верификация прошла успешно, но плата не оживает, прошивка явно заливается как-то криво. При чтении тоже самое - вычитывается какой-то мусор, но явно не сама прошивка. Повторюсь, что биты блокировки ничего не блокируют.
Глюки часто сыпятся при завышенной скорости программирования. Стандартная загрузка через бутлоадер насколько я помню идёт на скорости 19200. Попробуйте зажать на 19200 или ещё меньше..
Arduino ISP пробовал - не помогло. USB asp - насколько понимаю, тут нельзя управлять скорость. В системе просто устройство USBasp без всяких COM портов
И да, у меня стандартная загрузка через бутлоадер проходит на скорости 115200 и без всяких проблем!
В общем проблема так и не решена. На текущий момент, я без проблем через ISP программатор (USBasp или ArduinoISP) могу делать chip erase, устанавливать lock bits, загружать bootloader. Считавание и запись прошивки не возможна. Запись и чтение проходят без всяких ошибок, но устройство после такой прошивки не реботает, прочитанная прошивка содержит мусор + много 0xFF. Lock биты при этом не установлены :( Перепробовал кучу программ: Arduino IDE, avrdude_prog, eXtreme Burner - AVR, SinaProg, да и сам avrdude...
Через стандартный загрузчик могу как записывать так и считывать прошивки, на скорости 115200
Помнится кто-то из здешних форумчан писал, что нарвался на супер левую мегу. Плата и весь обвес были как на меге2560, а сам чип был припаян мега 1280. Не ваш случай, чип какой стоит? :)
Чип 2560 :)
У меня похожая тема была с китайской наной, программа не заливалась через USBasp если при загрузке не нажать и не держать ресет. Так получалось через раз...
... У меня очень похожая проблема. Arduino MEGA2560 lock bit все чистые. Заливаю через avrdude напрямую прошивку через стандартный загрузчик (тип программатора avrispmkII) и все прекрасно работает. Спокойно читает hex файл, и спокойно заливает hex файл. Дошли руки до ISP программатора - и ничего не получается. Avrdude записывает hex, выдает что верификация прошла успешно, но плата не оживает, прошивка явно заливается как-то криво. При чтении тоже самое - вычитывается какой-то мусор, но явно не сама прошивка. Повторюсь, что биты блокировки ничего не блокируют.
В общем проблема так и не решена. На текущий момент, я без проблем через 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 кБ. Может кто сталкивался и решил проблему или знает как решить, отзовитесь.
При зтом при записи в Мегу2560 загрузчика программатором Arduino as ISP и загрузке скетча напрямую через стандартный загрузчик (тип программатора avrispmkII) работают все скетчи обьемом и меньше 128 кБ и больше 128 кБ которые использовались при "испытании".
Думаю здесь причина в неправильной адресации в самой avrdude при записи в контроллер Atmega2560 через Arduino as ISP после адресов выше 128 кБ. Может кто сталкивался и решил проблему или знает как решить, отзовитесь.
Тоже столкнулся с подобной проблемой, но немного с неожиданной строны. Писал собственный загрузчик. И обнаружил, что программа записывается не только в указанную тобой память, но и делает дубль в память, отстоящую от заданной области памяти на 128 килобайт, то есть записываешь в 0..FFFF ячейки памяти, та же самая информация записывается и в 20000...200FF область флеш памяти программы. Соответсвенно, когда размер программы превышает 124 килобайта, то затирается загрузчик.
Сначала думал, что я ошибся. Но потом скачал прошивку, которую делает загрузчик Ардуино. Перед этим, правда, надо сбросить фьюз старта с области загрузчика. В этой прошивке информация тоже дублируется.
Возможно это либо глюк atmega, либо это ограничение режима само-программирования, либо и я и разработчки загрузчика Ардуино 2560 не умеют пользоваться средствами само-программироания atmega2560.
Вот такая вот загогулина.
средствами само-программироания atmega2560.
Это что за такая фича !? :)
Это та фича, которыми пользуется загрузчик (в том числе загрузчик Ардуино), когда загружает программу.
Вот в даташите на atmega 2560 раздел 29.
29. Boot Loader Support – Read-While-Write Self-Programming