Восстанавливаем ардуино «нано»

Наверное этот пост никогда бы не увидел свет, если бы спустя более чем 10 лет мне не пришлось повторять нижеописанную процедуру еще раз, когда я собирал систему управления теплицей и солнечными батареями.

Тогда все началось с домашней пивоварни. Сначала это была канадская пластиковая бочка а ля «просто добавь воды», затем, по своей сути такое же отечественное ведерко - «бирзаводик», потом термобокс с кастрюлей-варочником и наконец клон известного домашним пивоварам «брау». С него то и началось мое знакомство с ардуино, а если быть совсем точным, с ее клонами.

Настраивая электронную начинку своей нанопивоварни, я удалил загрузчик на микроконтроллере и спалил usb вход платы. Ардуинка оставалась пригодной для работы, но для заливки скетчей понадобился программатор.  Я приобрел дешёвый китайский. Тут и начались танцы с бубном.

Блок управления пивоварней на базе Ардуино "нано"

Но, обо всем по порядку.

Клон "Ардуино"

Итак, для перепрошивки загрузчика был приобретен китайский программатор c камнем "ATMEL MEGA8L 8MU1020 CHINA-B 0F2204".

Те, кто знаком с миром робототехники знают, что для ардуино нужны программаторы USBASP. В тот раз под личиной приобретенного «прошивальщика», на самом деле скрывался USBISP.

Выставляя в настройках Ардуино "USBASP" и пытаясь через него прошить загрузчик микроконтроллера, я наблюдал нефатальную ошибку avrdude: warning: cannot set sck period. please check for usbasp firmware update. При попытке залить через него в Ардуино прошивку я видел ошибку avrdude: stk500_getsync(): not in sync: resp=0x30.

Далее идет длинное повествование о том:

- как восстановить загрузчик китайских микроконтроллеров на базе процессора «atmel mega328P»  с помощью простейшего самодельного программатора или китайских прошивалок на «ATMEL MEGA8L» и «ATMEL ATMEGA8A».

- как переделать китайские программаторы USBISP на ардуиносовместимые USBASP.

Перешиваем программаторы USBISP в USBASP

Нижеописанные действия спустя 10 лет я проделал на другом более современном программаторе USBISP на базе «ATMEL ATMEGA8A»

Старый программатор USBISP v.3.02 на «ATMEL MEGA8L»

Новый программатор USBISP , без маркировки

Новый USBISP на базе «ATMEL ATMEGA8A»

Купленный мною для решения проблемы старый программатор имел маркировку USBISP 3.02. По уже озвученным причинам его нужно было перешить в USBASP. Перевод в режим перепрошивки осуществлялся замыканием/напайкой перемычки "-up-".

Перемычка на старом программаторе

В новых моделях за этот режим отвечает перемычка JP3. Пришлось самому напаять штыри и замкнуть их джампером.

Перемычка на современном программаторе

В большинстве найденных мною источников рассматривался вариант перепрошивки программатора USBISP в нормальный USBASP …внимание… с помощью другого программатора! Замкнутый круг… в моем распоряжении был только один.

Выход подсказал один из бывалых радиолюбителей на getchip.net, который  показал как спаять простейший программатор «lpt пять проводков», он же – «stk200/300». Чтобы его собрать мне понадобился старый LPT разъем и способный его воспринимать комп с «Windows XP» на борту. Для тех, кто не в курсе, LPT, он же параллельный порт, это такой интерфейс, который в древности использовали для подключения принтеров или выхода в инет через dial-up.

Что делаем. Паяем провода к разъему по приведенной схеме (сопротивления я не использовал) и подключаем к китайскому программатору. Понадобиться питание 5,1В. Подать его на прошиваемый программатор можно либо с помощью батареек/блока питания, либо запитать от USB разъема. +5В подаем на контакт «VCC» программатора, минус – на «GND». Какой провод к какому штырю программатора подключать, всегда можно узнать по его «даташиту». Но на мой взгляд все ясно и без него. Штыри на программаторах почти всегда подписаны. Нас интересуют "GND", "Reset", "MOSI",  "MISO" и "SCK".

STK200/300

Для заливки новой usbasp-прошивки необходимо какое-нибудь ПО - это avrdude. Напомню, что в качестве ОС мы используем Win XP. Avrdude работает из командной строки, но это не проблема, для нее существует оболочка avrdude_prog3.3, написанная, если правильно помню, еще на Delphi. Грех ею не воспользоваться. Работает она с "чистой" avrdude 5. Присутствует русский язык.

В оболочке avrdudeprog33 по умолчанию не прописан параллельный порт для stk200. Добавим его. Правим конфиг - файл programm.ini Вставляем после строк:

[STK200]

progisp=stk200

portprog=COM1

portenabled=1

вот такую группу:

[STK200LPT]

progisp=stk200

portprog=lpt1

portenabled=1

lpt1 обязательно маленькими буквами

Порт появится в раскрывающемся списке оболочки avrdude33.

Запускаем avrdudeprog33 и выставляем чип прошиваемого программатора, в моем случае это был ATMEGA8, выставляем прошивающий программатор – это наши «5 проводков», они же STK200LPT. Не забываем выбрать lpt1 порт.

Стираем содержимое камня usbisp или во всяком случае пытаемся это сделать... не выходит? Скорее всего не получится, есть нюанс. Avrdude будет ругаться на нехватку библиотеки libusb0.dll. Скачиваем из инета. Копируем ее в папку с avrdudeprog33. Теперь при попытке стереть содержимое камня прога будет ссылаться на какой-то там giveio, где его взять? Скачиваем ПО WinAVR, я нашел WinAVR-20100110-install.exe, устанавливаем, лезем в его папку bin и запускаем там install_giveio.bat... тут избавьте меня от подробностей типа "почему?" Теперь все должно заработать. Наконец стираем содержимое камня программатора.

В строке flash выбираем прошивку usbasp.2011-05-28.hex (предварительно ее нужно скачать с инета). Прошиваем в стертый камень. Отпаиваем/отключаем перемычку, на старых программаторах зажжется не горевший ранее (после замыкания перемычки "up") синий диод.

Пайка ноги серым проводом, на остальные провода не обращаем внимание, таким образом была подпаяна перемычка "-up-" с другой стороны программатора

На старых usbisb 3.00, 3.01 и 3.02 нужно еще припаять 25 ногу камня atmega8 к одной из ног разъема USB самого программатора. Если смотреть на программатор со стороны камня и его разъем USB расположить справа, то 25 нога камня будет в его правом верхнем углу, а ножка USB, будет самой нижней (см.фото). Если у вас какая-либо другая версия камня, лучше уточнить расположение ноги по его «даташиту». На новой плате я ногу не паял, все заработало и так.

Теперь пробуем через перешитый программатор залить в плату загрузчик стандартными средствами  ардуино. Ошибок быть не должно быть. Загрузчик платы восстановлен. И у нас появился нормальный программатор.

Но при попытке залить прошивку через программатор вы скорее всего все еще будете видеть ошибку avrdude: stk500_getsync(): not in sync: resp=0x30. Установим драйвера китайского клона "нано" (на самом деле с этого надо было начинать :)))) Моим обоим платам на win7 подошел ch341ser.zip.

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

Так я получил полноценный USBASP прошивальщик.

Загрузка скетча в ардуино с помощью AVRDUDE

Этой темы коснусь только поверхностно. С помощью AVRDUDE33 и поддерживаемых ей программаторов, в том числе STK200, можно записывать скетчи в ардуино. Более того, можно удалить загрузчик он же бутлоадер, и за счет освободившегося места записать скетч бОльшего размера. В стандартном “ядре” Arduino вариант “без загрузчика” не предусмотрен. Чтобы вручную убрать поддержку загрузчика нужно уметь работать с boards.txt и фьюзами: необходимо изменить фьюз BOOTRST и подправить ограничение на максимальный размер скетча. Сам он должен быть скомпилирован в hex файл. Мне эта возможность понадобилась при сборке пивоварни. Тогда то я и проделал эту процедуру. Скетч, предназначенный  для Аруино "уно" успешно поместился в китайскую "нано".

Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии