До недавнего времени я пользовался для программирования своих МК
USBasp и не знал никаких проблем. Но однажды приключилась необходимость запрограммировать
ATmega1280 на плате
Arduino Mega, и каково же было мое удивление, когда
avrdude... выругался на несовпадение записанных и считанных данных в процессе верификации.
При этом зашитый в Mega бутлоадер функционировал корректно, скетчи заливались и исправно работали - скорее всего ошибку можно было игнорировать, но - с другой стороны - а что, если при программировании случится настоящая ошибка? Как я об этом узнаю?
Пришлось лезть в интернет и искать что-то для самостоятельного изготовления. Честно говоря, мне хотелось двух вещей - программное управление скоростью прошивки и совместимости с AVRStudio. Первый пункт - весьма важная деталь, когда надо программировать партию МК: чтобы это произошло быстро, на USBasp надо сначала поставить перемычку "SLOW SCK", зашить фьюзы - чтобы МК перешел с внутренней RC-цепочки 1МГц на внешний кварц, потом снять эту перемычку и шить на нормальной скорости. Вот именно это "снять-поставить" слегка раздражало. Ну а про AVRStudio - тут все ясно, чтобы не страдало удобство работы в родной для МК ATMEL среде. Бывает нужно крайне редко, но все-таки полезная вещь.
В такой ситуации многие посоветовали бы мне схему
Андрея Рыжкова, использующую
libusb и релизующую функционал AVR910. Спору нет, отличная конструкция (даже в наборах МастерКит видел), но лично меня она в свое время
опечалила скоростью работы. Однако стоит учесть тот момент времени, когда Андрей опубликовал свою разработку - это было очень сильно востребовано. Поэтому я еще раз мысленно поблагодарил его за труд, но поиски - продолжил.
К моему сильному удивлению, необходимое мне устройство нашлось на просторах все того же проекта V-USB, и называется это чудо техники
AVRDoper:
Первое и самое главное - он совместим с протоколом
STK500 v2, а значит
будет работать с AVRStudio. Далее, кроме внутрисхемного последовательного программирования, он умеет последовательное высоковольтное - было бы актуально, если бы я собирал схемы на ATtiny. Программное управление скоростью программирования - есть. Есть даже возможность считывания через USB отладочной информации с подключенного МК - именно это хотел сделать автор
USBasp Thomas Fischl, но так у него, видать, руки и не дошли.
Вот схема с выброшенным из нее узлом высоковольтного программирования:
Программное обеспечение у него построено в любимом стиле
Objective Development - блоками. То бишь, фичи можно включать и отключать выборочно, "втискивая" в доступный объем памяти МК необходимый набор. В классическом варианте есть режимы STK500 и USB-HID, но нет возможности обновить прошивку самого программатора без извлечения из схемы его МК. Однако, можно чем-то пожертвовать (например, функцией прозрачной передачи последовательных данных для отладки МК) и включить возможность обновления прошивки по USB через bootloader (требует навыков обращения с компилятором avr-gcc ;)
Кстати, это еще не всё ;) Предусмотрены программные конфигурации для работы AVRDoper-а внутри родственных ему проектов
USBasp и
metaboard. Правда, для этого надо, чтобы USBasp был собран на
ATmega8. Готовые прошивки лежат в тарболле с исходниками - остается только залить и протестить ;)
Построить прототип на макетке, к сожалению, не представлялось возможным - авторы использовали микруху 74AC126, которую мне не удалось достать в DIP-корпусе. Так что сразу пришлось травить плату, которая, по счастью, оказалась полностью работоспособной.
Краткий итог: по скорости AVRDoper не уступает USBasp, шьет ATmega1280 "на ура", схема без высоковольтной части влезла на одностороннюю плату под корпус GAINTA 403:
Единственное, не смог заставить работать в режиме STK500 под Linux - есть какие-то заморочки с /dev/ttyACM0. Разбираться лень, тем более, что под Windows оно работает во всех режимах, а под Linux я пользую avrdude и меня вполне устраивает USB HID.
Основную часть скриптов уже переделал - наслаждаюсь отсутствием надобности передергивать SLOW SCK ;)
Купить AVRDoper можно, например,
здесь.