21.07.2010

AVR-Doper

До недавнего времени я пользовался для программирования своих МК 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 можно, например, здесь.

3 комментария:

  1. Ардуина и сама себя неплохо программирует - зачем ей вообще внешний программатор нужен?)

    Я когда свою собирал - запаял разъем Х3 и теперь им регулярно пользуюсь, как программатором)

    ОтветитьУдалить
  2. а чем плох вот этот вариант?
    http://arduino.cc/en/Tutorial/ArduinoISP

    avrdude знает такой "программатор" (вот так я конектился к mega32
    "avrdude -pm32 -P/dev/ttyUSB0 -carduino -b19200 -F -v")

    ОтветитьУдалить
  3. Согласен, варианты - рабочие, но на мое капризное imho - программатор должен быть отдельным девайсом. Так удобнее ;)

    Про BitBang я уже писал, на тот момент оно требовало пропатченный avrdude. ArduinoISP я пробовал собирать в виде шилда, но что-то у меня получилось не так - работало через раз.

    Ну и оба этих варианта не совместимы с AVRStudio.

    ОтветитьУдалить