Site Loader

Содержание

Как пользоваться avrdude, быстрый старт | avr

Наверняка у Вас уже есть макетная плата на микроконтроллере AVR (скорее всего Arduino Uno на микроконтроллере ATmega328P или какая-нибудь аналогичная), и Вы хотите научиться её программировать, т. е. прошивать программу в память кристалла микроконтроллера. Есть множество различных способов, здесь будет рассмотрен вариант использования такого универсального инструмента как avrdude.

Почему следует использовать avrdude? По многим причинам — он бесплатен, работает на любых операционных системах (Linux, Windows, MacOS), поддерживает все популярные протоколы программирования. Т. е. может работать с любым программатором (USBasp, AVR-mkII и т. д. [3]), в том числе и с загрузчиками Arduino и USBasp [4,5].

Avrdude это утилита командной строки, так что для её использования придется изучить её опции, которыми настраивается тип программатора, задается программируемый чип, файл прошивки и фьюзы. Поначалу это может показаться сложным, но если разобраться, то окажется, что командная строка это очень удобно, потому что предоставляет универсальный способ работы со многими средами программирования. Например, можно писать программы для AVR даже в среде Microsoft Visual Studio, запуская процесс компиляции с помощью команд makefile, и прошивать память микроконтроллера настройкой запуска внешней команды прямо из Visial Studio (подробнее см. [6]). Утилиту avrdude использует также среда программирования Arduino для прошивки памяти микроконтроллера платы через загрузчик UART.

[Где взять avrdude]

Ссылки для загрузки AVRDUDE лучше всего найти с помощью Google. Обычно avrdude.exe находится в пакете утилит разработчика WinAVR, также она входит в пакет среды разработки Arduino IDE. Поэтому скачайте и установите либо WinAVR, либо среду разработки Arduino. Как вариант, можете скачать архив [12], там найдете все необходимое для этой статьи, в том числе и утилиту avrdude.

Различные версии avrdude и PDF-документацию можно найти по ссылке http://download.savannah.gnu.org/releases/avrdude/.

Онлайн-документация: http://www.nongnu.org/avrdude/user-manual/avrdude.html.

[Запуск avrdude]

В операционной системе Windows требуется открыть окно интерпретатора команд cmd.exe. Для этого в Start Menu (кнопка ПУСК) выберите команду Run… (Выполнить…), в окне приглашения введите cmd и кликните по кнопке OK.

В операционной системе MacOS X можете использовать программу Terminal для получения доступа к интерфейсу ввода команд. Программа Terminal находится в папке Utilites.

Теперь в окне терминала введите команду avrdude и нажмите Ender, в результате утилита avrdude выдаст подсказку в виде списка основных опций.

[Описание опций AVRDUDE]

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

-p partno: эта опция просто говорит утилите, какой микроконтроллер AVR будет программироваться. Например, если Вы собрались программировать ATtiny2313, то в качестве partno введите attiny2313.

-b baudrate: эта опция используется для настройки скорости последовательной передачи данных (через RS-232, UART) для программаторов, работающих по протоколам наподобие STK200 или STK500 STK500. Часто эту опцию использовать необязательно, потому что подходит скорость, настроенная по умолчанию.

-B bitrate: эта опция меняет скорость следования бит, на которой программатор общается с программируемым чипом. Если Ваш микроконтроллер тактируется очень низкой частотой, то потребуется снизить скорость данных программирования. Обычно микроконтроллер работает на высокой частоте (8 МГц и выше, особенно если используется кварцевый резонатор), так что эта опция применяется редко.

-C config-file: это файл конфигурации, который говорит avrdude о различных способах, как ему общаться с программатором. Имеется файл конфигурации по умолчанию, который используется без указания -C опции, так что эта опция обычно не нужна.

Если путь до файла имеет пробелы, то его следует брать в двойные кавычки. Например: -C»C:\Program Files\Arduino1.0.6\hardware\tools\avr\etc\avrdude.conf».

-c programmer: эта опция задает тип программатора (его протокол). Например, если используете STK500, то укажите stk500, если используете программатор DT006, то укажите dt006, и т. д.

-D: опция запрещает очистку памяти чипа перед программированием. Скорее всего, эта опция Вам никогда не потребуется.

-P port: опция задает порт обмена данными между компьютером и программатором. Это может быть COM1, LPT1 или USB.

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

-e: опция очистки памяти чипа. Обычно её использовать не нужно, потому что очистка FLASH выполняется автоматически перед программированием.

-U memtype:r|w|v:filename[:format]: а вот эта команда уже по-настоящему важна. Именно одна задает, какое именно программирование будет произведено. Здесь memtype может быть flash или eeprom для памяти, либо hfuse, lfuse или efuse для конфигурационных фьюзов чипа. Буквы r|w|v обозначают операцию над памятью, т. е. r (read, чтение), w (write, запись) или v (verify, проверка памяти). Часть команды filename задает имя файла, который будет прочитан или записан во время выполнения команды. [:format] задает опцию формата файла. Чаще всего используется формат Intel Hex [7], и файл данных обычно получает расширение *.hex». Если Вы хотите записать, например, файл test.hex в память flash, то должны использовать -U flash:w:test.hex:i. Если хотите прочитать память eeprom в файл «eedump.hex», то должны использовать команду -U eeprom:r:eedump.hex:i.

Если путь до файла имеет пробелы, то его следует брать в двойные кавычки.

-n: это означает, что никаких действий записи производиться не будет. Команда полезна, когда Вы хотите гарантировать, что ни одна из отправляемых команд не повредит содержимое памяти чипа. Это разновидность ‘блокировки безопасности’.

-V: выключает автоматическую проверку содержимого памяти при записи. Не советую использовать эту опцию, потому что проверка дает дополнительную уверенность, что память записана правильно.

-u: запрет режима безопасности. Это установка по умолчанию, когда avrdude запускается из скрипта. Если хотите модифицировать биты фьюзов, то используйте эту опцию, чтобы явно подтвердить свои намерения (подавляет дополнительный запрос подтверждения).

-t: запускает режим терминала, когда Вы вводите команды строка за строкой. Не используйте этот режим, поскольку это добавляет сложности.

-E: выводит некоторые спецификации программатора, не используйте эту опцию.

-v: опция включает подробный вывод сообщений. Это может потребоваться для диагностики, чтобы получить дополнительную информацию. Обычно эта опция не нужна.

-q: действие этой опции дает противоположный эффект по сравнению с опцией -v, т. е. количество выводимой информации уменьшается. Обычно эта опция также не используется.

В этом списке красным цветом выделены те опции, которые скорее всего Вам понадобятся. Давайте рассмотрим подробнее использование этих опций.

[-c programmer]

Чтобы получить список поддерживаемых программаторов (и найти тот, который у Вас), введите команду avrdude -c qwerty (здесь qwerty это произвольный набор символов, который не соответствует ни одному из поддерживаемых программаторов). Как результат выполнения команды будет выведен список поддерживаемых программаторов.

Найдите в этом списке имя, соответствующее Вашему используемому программатору. Это имя следует подставлять в опцию -c programmer.

[-p partno]

Чтобы получить список программируемых микроконтроллеров AVR, введите команду avrdude -c avrisp (при этом не имеет значения, используете ли Вы реально программатор avrisp) без указания имени микроконтроллера. Не следует запоминать этот длинный список, он используется только для того, чтобы узнать нужное имя для программируемого микроконтроллера, которое следует подставлять в командную строку вместе с опцией -p partno.

В этом списке указаны псевдонимы всех чипов микроконтроллеров, о которых знает avrdude. Большинство из них программируются через интерфейс ISP.

Обратите внимание, что названия моделей чипов t2313 и 2313, m8 и m88, c128 и m128 выглядят очень похоже, но на самом деле это абсолютно разные модели микроконтроллеров! Поэтому во избежание ошибки советую Вам вместо псевдонима чипа ввести его полное имя. Т. е. вместо t2313 используйте attiny2313, или вместо m8 используйте atmega8. Avrdude достаточно умен, чтобы распознать правильно тип чипа по его полному имени.

Внимательно проверьте модель программируемого чипа по маркировке на его верхней стороне корпуса. К примеру, там может быть написано ATTINY2313 и ATMEGA8, Суффиксы -20PI и -16PC в маркировке просто указывают скоростные параметры микроконтроллера, и при программировании на эти суффиксы не стоит обращать внимания.

[-P port]

Эта опция говорит avrdude, где искать Ваш подключенный программатор. Если Вы используете устройство, подключенное через USB, то просто примените опцию -P usb или вообще не указывайте её. Утилита avrdude автоматически распознает подключение для программатора, который является устройством USB.

Если Вы используете параллельный (LPTx) или последовательный (COMx) порт для подключения программатора (что сейчас уже почти не актуально, потому что компьютеры с такими портами уже практически не выпускаются), то должны использовать эту опцию, чтобы показать порт, к которому подключен программатор. На операционной системе Windows в 99% случаев это будет lpt1 (для параллельного порта) или com1 (для последовательного порта), но Вы можете всегда проверить это через просмотр раздела «Ports (COM & LPT)», по-русски это раздел «Порты (COM и LPT)» дерева Device Manager (Менеджер Устройств). Откройте управляющую панель System Properties (Свойства Системы), и выберите закладку Hardware (Оборудование):

Кликните на кнопке Device Manager (Менеджер Устройств), и разверните пункт Ports (Порты).

Здесь будут перечислены все имеющиеся на компьютере параллельные и последовательные порты. Может быть несколько последовательных портов, но обычно параллельный порт (так называемый порт принтера) только один.

На компьютерах Mac не бывает традиционных параллельных и последовательных портов. Однако если Вы используете адаптер USB-serial (что делает возможным использовать программаторы STK500 или AVRISP v1 вместе с компьютером Mac), то для avrdude нужно указать последовательный порт. Не пока знаю надежного способа определять порт подключения, однако использую для этого окно терминала, где нужно ввести команду ls -l /dev/cu.* (скорее всего, на Linux подойдет примерно такой же способ, или можно использовать команду dmesg). Ниже приведен скриншот примера вывода этой команды.

/dev/cu.Bluetooth это встроенный порт bluetooth, он не нужен. /dev/cu.modem это модем (если он имеется на Вашем компьютере), его также не нужно использовать. Обратите внимание на порты наподобие /dev/cu.usbserial или /dev/cu.KeySerial1. В моем случае это порт /dev/cu.usbserial-FTCTYG5U.

[-U memtype:r|w|v:filename:format]

Это опция, которая описывает, как реально будут записываться данные в программируемый микроконтроллер. Команда выглядит довольно сложной, но мы рассмотрим её по частям.

memtype может быть либо flash, либо eeprom, либо hfuse (старший байт фьюзов), либо lfuse (младший байт фьюзов) или efuse (расширенный байт фьюзов).

r|w|v может быть либо r (read, чтение), w (write, запись), v (verify, проверка).

filename имя входного (для записи или проверки) или выходного (для чтения) файла.

[:format] не обязательная опция, указывающая формат файла. Можно опустить эту опцию при записи, но для чтения указывайте i, чтобы выходной файл получил формат Intel Hex [7] (это наиболее распространенный формат файла).

Для примера, чтобы записать файл firmware.hex в память программ (flash), используйте команду -U flash:w:firmware.hex, чтобы проверить содержимое памяти eeprom на соответствие файлу mydata.eep, используйте команду -U eeprom:v:mydata.eep, и для чтения младшего байта фьюзов используйте команду -U lfuse:r:lfusefile.hex:i.

[Как программировать]

В примерах ниже я буду использовать программатор mkII-slim [8] (это клон фирменного AVRISP-mkII компании Atmel) и загрузчик USBasp на примере программирования чипов ATmega328P и ATmega32A через интерфейс ISP и через интерфейс USB. Само собой, Вы должны будете ориентироваться на Ваш конкретный программатор, программируемый чип и его фьюзы.

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

Прошивать я буду тестовый пример, мигающий светодиодом на плате (так называемый Hello World для мира микроконтроллеров). Если кому-то интересно, то код этого примера приведен во врезке, или можете скачать его проект AVR Studio по ссылке [12] (см. папку HelloWorld архива).

Запишите файл прошивки (Hello-World-Arduino-ATmega328.hex, Hello-World-metaboard-ATmega328.hex или Hello-World-ATmega32A.hex, или другой, в зависимости от микроконтроллера, который будете программировать) в заранее известный каталог на диске, например C:\temp. Этот путь до файла будем использовать для команды -U. Готовые прошивки можно взять из папке HEX архива [12].

Все платы Arduino обычно программируются одинаково, через интерфейс USB. При этом используется загрузчик UART (интерфейс USB организован аппаратно, с помощью специального отдельного чипа). В этом примере в плату Arduino Nano будет записана прошивка HEX\Hello-World-Arduino-ATmega328.hex. Загрузчик использует функцию самопрограммирования памяти программ AVR [9]. Обратите внимание, что фьюзы таким способом записать нельзя (самопрограммирование памяти программ микроконтроллера AVR не распространяется на фьюзы).

При компилировании прошивки Hello-World-Arduino-ATmega328.hex было учтено, что светодиод подключен к порту PB5 (цифровой порт D13 Arduino).

#define LED    PB5      //Для плат Arduino Uno и metaboard.

Подключите плату Arduino Nano через USB (при этом на микроконтроллер ATmega328 будет подано питание), и выполните команду:

avrdude -C"C:\Program Files\Arduino1.0.6\hardware\tools\avr\etc\avrdude.conf" -pm328p -carduino
 -PCOM20 -b57600 -Uflash:w:c:\temp\HEX\Hello-World-Arduino-ATmega328.hex:i

Примечание: здесь подразумевается, что виртуальный COM-порт, через который подключена плата Arduino, имеет имя COM20.

При компилировании прошивки Hello-World-ATmega2560.hex было учтено, что светодиод подключен к порту PB7 (цифровой порт D13 Arduino).

#define LED    PB7      //Для платы Arduino MEGA 2560

Подключите плату Arduino MEGA 2560 через USB (при этом на микроконтроллер платы будет подано питание), и выполните команду:

avrdude -C"C:\Program Files\Arduino1.0.6\hardware\tools\avr\etc\avrdude.conf"
 -patmega2560 -cwiring -P\\.\COM155 -b115200 -D -Uflash:w:c:\temp\Hello-World-ATmega2560.hex.hex

Примечание: здесь подразумевается, что виртуальный COM-порт, через который подключена плата Arduino, имеет имя COM155.

В плату metaboard [11] записан загрузчик USBasp, эмулирующий поведение программатора USBasp. Интерфейс USB реализован программно, с помощью библиотеки V-USB. Как и в предыдущем примере с Arduino, фьюзы записать нельзя, мы будем записывать только память программ.

При компилировании прошивки Hello-World-metaboard-ATmega328.hex было учтено, что светодиод подключен к порту PB5.

#define LED    PB5      //Для плат Arduino Uno и metaboard.

Для записи прошивки подключите плату metaboard через USB, удерживая при подключении кнопку S1 Reset, после подключения к USB кнопку отпустите (это активирует работу загрузчика), и выполните команду:

avrdude -patmega328 -cusbasp -Uflash:w:c:\temp\Hello-World-metaboard-ATmega328.hex

Чтобы убедиться, что записанная программа работает и светодиод мигает, подключите его через резистор 330..470 ом к порту PB5 (ножка 6 коннектора IP2 платы metaboard), что соответствует цифровому порту D13 Arduino.

На плату AVR-USB-MEGA16 установлен микроконтроллер ATmega32A, и также используется загрузчик USBasp на основе все той же библиотеки V-USB. Поэтому программирование будет осуществляться аналогично. Перед подключением платы AVR-USB-MEGA16 к USB установите перемычку между контактами 4 и 6 коннектора U1 ISP, это активирует работу загрузчика:

И запустите следующую команду:

avrdude -patmega32 -cusbasp -Uflash:w:c:\temp\Hello-World-ATmega32A.hex

После программирования будет мигать светодиод D1, подключенный к ножке PB1 микроконтроллера, см. схему платы в статье [10]. При компилировании прошивки Hello-World-ATmega32A.hex было учтено, что светодиод подключен к порту PB0.

#define LED    PB0      //Для платы AVR-USB-MEGA16.

Здесь рассматривается другой способ программирования — через интерфейс ISP, с помощью программатора mkII-slim [8]. Этот способ позволяет программировать также и фьюзы, однако требует наличия программатора.

Подключите сначала программируемую плату к программатору через интерфейс ISP. Перемычка питания на программаторе mkII-slim должна быть установлена в положение «5V». Обратите внимание, что в данном примере питание на программируемую плату подается через программатор, поэтому подключать плату AVR-USB-MEGA16 к USB не обязательно.

Для подключения через ISP понадобится плоский кабель из 6 проводов мама-мама:

1 ————-MISO———— 1
2 ————-VCC————- 2
3 ————-SCK————- 3
4 ————-MOSI———— 4
5 ————-~RST———— 5
6 ————-GND————- 6

После того, как соединили кабелем ISP программируемую плату и программатор, подключите программатор через USB и для программирования памяти программ выполните команду:

avrdude -p atmega32 -P usb -c avrispmkii -e -U flash:w:c:\temp\Hello-World-ATmega32A.hex

Как программировать фьюзы:

avrdude -p atmega32 -P usb -c avrispmkii -U lfuse:w:0xCF:m -U hfuse:w:0x98:m

Программирование платы Arduino Uno, на которой установлен микроконтроллер ATmega168, плата подключена к компьютеру через виртуальный порт COM4:

avrdude -F -v -pm168 -cstk500v1 -P\\.\COM4 -b19200 -D -Uflash:w:"firmware.hex":i

Программирование ATtiny2313 с помощью программатора USBtiny [2]:

type in avrdude -c usbtiny -p attiny2313 -U flash:w:firmware.hex

Программирование через параллельный bitbang-программатор DT006 (такой как MiniPOV2):

avrdude -c dt006 -P lpt1 -p attiny2313 -U flash:w:firmware.hex

Программирование через последовательный bitbang-программатор DASA (такой как MiniPOV3):

avrdude -c dasa -P com1 -p attiny2313 -U flash:w:firmware.hex

Программирование платы разработчика STK500 (она работает как одноименный программатор):

avrdude -c stk500 -P com1 -p attiny2313 -U flash:w:firmware.hex

Программирование через программатор AVRISP v2 USB:

avrdude -c avrispv2 -p attiny2313 -U flash:w:firmware.hex

[Ссылки]

1. Starting out with avrdude site:ladyada.net.
2. USBtiny site:dicks.home.xs4all.nl.
3. Программаторы для AVR.
4. Arduino bootloader.
5. AVR-USB-MEGA16: USB bootloader USBasp для микроконтроллера ATmega32.
6. Использование MS Visual Studio IDE для программирования AVR/Arduino.
7. Intel HEX: описание формата файла.
8. AVR-USB162MU: макетирование и изготовление программатора AVRISP-MKII в домашних условиях.
9. AVR109: самопрограммирование AVR.
10. Макетная плата AVR-USB-MEGA16.
11. Макетная плата metaboard.
12. 170305avrdude.zip.

AVRDudeR — встраиваем avrdude в IDE / Habr


Arduino — хорошая платформа для самоделкиных вроде меня.
Удобная, все в ней уже есть.
В чем проблема?

Программная часть мне далеко не всем нравится. Особенно ужасна Arduino IDE. Каждый файл открывается в новом окне, оставляя пустое запущенное окно IDE. И прочие мелкие глупости, которые привыкших к удобству Visual Studio, Borland/Embarcadero RAD IDE расстраивают и вызывают неудовольствие.
К счастью, мы можем использовать любую IDE какая понравится. Для готовых проектов, которые только скомпилировать и прошить или собственных пробных поделок вполне годится тот огрызок Wiring, который компилируется Arduino IDE.
Для удобства работы я использую Visual Micro Arduino — удобство Visual Studio, быстрая компиляция, прошивка стандартными средствами.
Arduino без Arduino IDE

Ступенькой выше стоит прямая работа с микроконтроллером, тут уж в вольны делать что захотите. Часто это удобнее чем разбираться в начинке библиотек Arduino. Но приходится использовать либо AVR Studio либо стороннюю IDE и компилятор от Atmel (благо, он совершенно бесплатный и входит в AVR Tools).
Все бы хорошо, но про Arduino они ничего не знают и прошить ее не могут. И вот тут начинаются неудобства.

Кому неинтересны детали, переходите сразу к делу, скачиваем и настраиваем.

AVR Studio неплохая среда, правда версия 4 довольно примитивная, а 5я тяжеловесна. Ни та ни другая кроме как через фирменный программатор прошивать не умеют. Засада.
Я взял проект бутлоадера, который совместим с AVR Studio, притворяясь AVRISP программатором. Интерфейс же с ним в AVR Studio оказался далеко не самым удачным.

Что делать?

Есть AVRDUDE — бесплатный прошивальщик, который работает почти со всеми программаторами для ATMEL микроконтроллеров. Но он консольный. Вроде бы не проблема, написал cmd или bat файл и все дела, запускай его после компиляции и всего делов. Но у меня, как, наверное, у многих, не одна плата. А каждая плата Arduino видится в системе как отдельный COM-порт. Каждый программатор тоже. В платах установлены разные микроконтроллеры (Atmega168P, Atmega328P). Не считая самодельных Arduino-совместимых плат или вообще с голым микроконтроллером и обвязкой.
Каждый раз лазать в bat файл и править настройки под разные платы или переключаться в другое приложение чтобы его запустить для прошивки, чтобы проверить работу когда я поменял пару байт в коде, лично мне надоедает, да и ошибок возникает немало, так и контроллер убить недолго. Хуже того, с FTBB программатором работает только отдельная версия avrdude, пропатченная под него и ничего не знающая про arduino. А значит, если мы прошиваем через него, то нужно держать еще один bat файл.
В Code::Blocks IDE, которая мне больше понравилась по возможностям форматирования и удобству работы с кодом, ситуация немногим лучше, разве что можно передавать внешней утилите параметры.
Автоматизация запуска avrdude с нужными параметрами


Мне эта ситуация надоела и я написал небольшую программку, которая получает в командной строке 2 параметра:
— имя конфигурационного файла
— имя файла прошивки

Утилита сама запускает avrdude с параметрами, указанными в конфигурационном файле (просто файл с готовыми настройками для прошивания), дожидается прошивки и закрывается. Это позволяет прошивать проект в любой имеющийся микроконтроллер в процессе отладки в 2 клика прямо из Code::Blocks.
Если запустить с одним параметром, прочитает соответствующий файл конфигурации, если с двумя, попытается автоматически залить прошивку из второго параметра.

Если заинтересовало, качаем AVRDudeR

Встраивается в IDE очень просто (дольше рассказывать, чем сделать):
Добавляем в меню Tools два пункта меню — для изменения настрек и для прошивки

Для изменения настроек прописываем:

Для прошивки:

По сути в настройках прописаны: первый параметр — файл avrdude.ini, который мы сохраняем при настройке в папку проекта, второй параметр — имя файла прошивки.

Процесс настройки выглядит так:

  • Подключаем программатор или плату Arduino с которой будем работать, чтобы в системе появился нужный COM порт.
  • Запускаем Tools->R AVRduder: Setup, выбираем настройки и сохраняем файл с настройками в каталоге своего проекта под именем avrduder.ini (или то, которое указали в настройках). Закрываем утилитку

Теперь скомпилировав проект, выбираем в меню Tools->R AVRDudeR: Flash и готово.

Обе версии avrdude уже лежат в архиве, ничего настраивать и прописывать в AVRDudeR не нужно.

Немного о настройках:


MCU — микроконтроллер (понятное имя и код для командной строки avrdude программа берет из mcu.lst)
Programmer — программатор. FTBB, Arduino с соответствующей прошивкой в качестве ISP программатора (ArduinoISP), или подключенная напрямую Arduino. (Текст пунктов меню и коды для строки программатора в файле programmers.lst)
Port: ну собственно COM порт программатора или Arduino (поэтому нужно чтобы плата была подключена во время настройки).
Baud rate: скорость порта. Для Arduino до UNO — 57600, UNO — 115200. В вашем загрузчике сами знаете какую настроили, а для FTBB режима этот параметр игнорируется.
Dude type: как раз тут и выбираем какой avrdude — обычный или для FTBB программатора использовать.
Галка Show Result — открыть при прошивке окно, в котором виден процесс прошивки, если вам неинтересно и вы уверены что все работает верно, не ставьте ее, программа просто выведет сообщение, когда avrdude закончит работу и сама закроется.

Саму программу можно использовать для заливки прошивки напрямую, не встраивая.
просто дважды щелкаем в поле Firmware, выбираем файл прошивки (или просто вставляем путь к файлу руками) и жмем Flash Firmware. Файл конфигурации работает и в этом случае.

Если сменился контроллер или подключили в другой порт, через другой программатор, просто выбираем Tools->R AVRDuder: Setup и открывается файл с настройками этого проекта (или настройками по умолчанию, если в папке с проектом avrduder.ini отсутствует). Меняем порт или программатор, контроллер или что там у нас поменялось и сохраняем обратно avrduder.ini в папку проекта. Все.

Да, avrdude.ini можно просто таскать из проекта в проект, если работате с одинаковыми платами/программаторами. Просто скопируйте его в папку нового проекта и можно ничего не настраивать вообще.
Ах да, чуть на забыл, в Code:Blocks я выбрал GNU AVR GCC Compiler и указал только папку к AVR Tools. А проект настроил вот так:

Тогда компилятор создает файл .elf.hex, который мы и прошиваем. Если у вас по-другому, измените второй параметр, передаваемый в AVRDudeR, чтобы он передавал имя файла прошивки.

Надеюсь, кому-то это сбережет нервы, повысит производительность и позволит сосредоточиться на собственно работе над идеей, а не возиться с кучей приблуд при каждой компиляции и заливке проекта.
Если утилита окажется полезной, пользуйтесь на здоровье.
UPD Утилита все-таки пригодилась.
Новая версия доступна на google code

Avrdude — Википедия

Материал из Википедии — свободной энциклопедии

Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 22 августа 2019; проверки требует 1 правка. Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 22 августа 2019; проверки требует 1 правка.

AVRDude (AVR Downloader-Uploader) — кросплатформенная свободная консольная программа, предназначенная для прошивки микроконтроллеров фирмы Atmel серии AVR, пользующаяся значительной популярностью.

Отличается широким спектром поддерживаемых программаторов и микроконтроллеров. Кроме «родных» устройств от Atmel сюда входят самодельные любительские устройства, не поддерживаемые AVR Studio, к примеру популярный программатор USBAsp. Ранее был известен под именем AVRprog[3].

С помощью опции -c возможен выбор одного из следующих программаторов[источник не указан 1347 дней]:

ОпцияОписание
abcminiABCmini Board, aka Dick Smith HOTCHIP
alfNightshade ALF-PgmAVR, https://web.archive.org/web/20100820024744/http://nightshade.homeip.net/
arduinoArduino board, protocol similar to STK500 1.x
atispAT-ISP V1.1 programming cable for AVR-SDK1 from, http://micro-research.co.th/
avr109Atmel AppNote AVR109 Boot Loader
avr910Atmel Low Cost Serial Programmer
avr911Atmel AppNote AVR911 AVROSP (an alias for avr109)
avrftdiFTDI MPSSE (FT2232 etc.) bitbang support
avrispAtmel AVR ISP (an alias for stk500)
avrisp2Atmel AVR ISP mkII (alias for stk500v2)
avrispmkIIAtmel AVR ISP mkII (alias for stk500v2)
avrispv2Atmel AVR ISP, running a version 2.x firmware (an alias for stk500v2)
bascomBascom SAMPLE programming cable
blasterAltera ByteBlaster
bsdBrian Dean’s Programmer, https://web.archive.org/web/20100209215720/http://www.bsdhome.com/avrdude/
butterflyAtmel Butterfly Development Board
c2n232iC2N232I, reset=dtr sck=!rts mosi=!txd miso=!cts, описание
dapaDirect AVR Parallel Access cable
dasaserial port banging, reset=rts sck=dtr mosi=txd miso=cts, описание
dasa3serial port banging, reset=!dtr sck=rts mosi=txd miso=cts, описание
dragon_dwAVR Dragon in debugWire mode
dragon_hvspAVR Dragon in high-voltage serial programming mode
dragon_ispAVR Dragon in ISP mode
dragon_jtagAVR Dragon in JTAG mode
dragon_ppAVR Dragon in (high-voltage) parallel programming mode
dt006Dontronics DT006
ere-isp-avrERE ISP-AVR, https://web.archive.org/web/20060603224029/http://www.ere.co.th/download/sch050713.pdf
frank-stk200Frank’s STK200 clone, http://electropol.free.fr/spip/spip.php?article15
futurlecFuturlec.com programming cable
jtag1Atmel JTAG ICE mkI, running at 115200 Bd
jtag1slowAtmel JTAG ICE mkI, running at 19200 Bd
jtag2slowAtmel JTAG ICE mkII (default speed 19200 Bd)
jtag2,jtag2fastAtmel JTAG ICE mkII, running at 115200 Bd
jtag2ispAtmel JTAG ICE mkII in ISP mode.
jtag2dwAtmel JTAG ICE mkII in debugWire mode.
jtagmkIAtmel JTAG ICE mkI, running at 115200 Bd
jtagmkIIAtmel JTAG ICE mkII (default speed 19200 Bd)
mib510Crossbow MIB510 programming board
pavrJason Kyle’s pAVR Serial Programmer
picowebPicoweb Programming Cable, http://www.picoweb.net/
pony-stk200Pony Prog STK200
ponyserdesign ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts
siprogLancos SI-Prog, http://www.lancos.com/siprogsch.html
sp12Steve Bolt’s Programmer
stk200STK200
stk500Atmel STK500, probing for either version 1.x or 2.x firmware
stk500hvspAtmel STK500 in high-voltage serial programming mode(version 2.x firmware only)
stk500ppAtmel STK500 in parallel programming mode (version 2.xfirmware only)
stk500v1Atmel STK500, running a version 1.x firmware
stk500v2Atmel STK500, running a version 2.x firmware
stk600Atmel STK600 in ISP mode, or in PDI mode for ATxmega devices
stk600hvspAtmel STK600 in high-voltage serial programming mode
stk600ppAtmel STK600 in parallel programming mode
usbaspUSBasp, http://www.fischl.de/usbasp/ , http://easyelectronics.ru/usb-programmator-avr-usbasp.html
usbtinyUSBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
xilXilinx JTAG cable

Считываем данные из Flash-памяти микроконтроллера ATmega8 и сохраняем их в файл /home/nixuser/m8_flash_dump.hex, формат данных для сохранения — Intel HEX. Для работы используем USB-программатор USBAsp, также просим программу выводить больше отладочной информации:

avrdude -p m8 -c usbasp -P usb -v -U flash:r:/home/nixuser/m8_flash_dump.hex:i

Выполним чтение данных из памяти EEPROM микроконтроллера ATmega32, сохраним эти данные в файл c:\temp\m32_eeprom.raw используя формат данных — RAW. Для работы используем программатор USBTiny:

avrdude -p m32 -c usbtiny -U eeprom:r:"c:\temp\m32_eeprom.raw":r

Выполним запись данных из файла /home/nixuser/dump_m8.hex во Flash-память микроконтроллера ATtiny13, используем программатор STK500:

avrdude -p t13 -c stk500 -U flash:w:/home/nixuser/dump_m8.hex

Выполним при помощи одной команды запись данных во Flash и EEPROM память микроконтроллера ATtiny13 используя как источники данных файлы flash_dada.hex и eeprom_data.hex, для работы используется программатор USBasp:

avrdude -p t13 -c usbasp -U flash:w:"c:\temp\flash_dada.hex" -U eeprom:w:"c:\temp\eeprom_data.hex"

Выполним чтение значений Fuse-битов микроконтроллера ATtiny13 с последующи сохранением данных в файлы hfuse.txt и lfuse.txt, формат файла для сохранения — Intel HEX. Для операции используем программатор USBasp:

avrdude -p t13 -c usbasp -U hfuse:r:hfuse.txt:h -U lfuse:r:lfuse.txt:h

Выполним установку Fuse-битов в микроконтроллере ATmega16 при помощи программатора USBasp. Значение младшего fuse-байта = 0xe1, а значение старшего fuse-байта = 0x99:

avrdude -p m16 -c usbasp  -U lfuse:w:0xe1:m -U hfuse:w:0x99:m
  • Trevennor, Alan. Practical AVR Microcontrollers: Games, Gadgets, and Home Automation with the Microcontroller Used in the Arduino. — Apress, 2012. — 416 с. — (Technology in Action). — ISBN 978-1430244462.
  • Williams, Elliot. Make: AVR Programming. — Maker Media, Inc, 2014. — 472 с. — ISBN 978-1449355784.

SinaProg — графическая оболочка для AVRDude

Вот уже много лет я пользуюсь мощнейшей программой для прошивки — avrdude. Программа эта поддерживает почти все виды программаторов, а те что не поддерживает изначально легко в нее добавляются.
Но есть у ней особенность которая сильно отпугивает многих — она консольная. И все шаманства с ней заключаются в формировании командной строки.

С одной стороны это хорошо — консольная утилита позволяет очень сильно ускорить и автоматизировать процесс прошивки. Один раз написал батничек и для перешивки только вызывать его и все.

Остается проблема прошивки разных устройств, ведь под каждую придется делать свой батник. И ладно бы ключи прописать, да файл с прошивкой указать. Самая засада начинается с fuse битами (впрочем, как и везде в мире AVR 😉 ) Тут их надо вначале внимательно проштудировать в даташите, выписать в виде байтов, вписать правильно в командную строку и молиться на то, чтобы нигде не ошибиться.
Да, для avrdude написано много оболочек, но все что мне встречались раньше решали лишь малозначительную проблему выбора нужного ключа файла и/или программатора, а фузы также было надо указывать числом.

Проблема решилась с появлением новой версии оболочки SinaProg от команды программистов-террористов из Аль-каиды иранских AVR программеров.

Запускаем… Если не запустилась, то возможно потребуется установить фреймворк от NI — LabView RunTime Library


Морда выглядит простенько и со вкусом. Ничего лишнего. Выбираем в первой строке хекс файла и зашиваем его в нужную память — flash или eeprom.

Следом идет прогресс бар и кнопка открытия консольного лога — ошибки смотреть.

Ниже выбираем тип микроконтроллера, также есть кнопочка поиска — полезно для проверки работы программатора.

Отдельно стоит сказать про секцию Fuses.
Осторожней с выпадающим списком. С виду там все просто, но это на самом деле предустановки, описываются они файле Fuse.txt вот его дефолтное содержание:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Default.
[]
 
ATmega8.ATmega16.
[Int. 1 MHz	d9e1
Int. 2 MHz	d9e2
Int. 4 MHz	d9e3
Int. 8 MHz	d9e4
Ext. Crys.	d9ff]
 
ATmega32.
[Int. 1 MHz	d9e1
Int. 2 MHz	d9e2
Int. 4 MHz	d9e3
Int. 8 MHz	d9e4
Ext. Crys.	d9ff]

Default. [] ATmega8.ATmega16. [Int. 1 MHz d9e1 Int. 2 MHz d9e2 Int. 4 MHz d9e3 Int. 8 MHz d9e4 Ext. Crys. d9ff] ATmega32. [Int. 1 MHz d9e1 Int. 2 MHz d9e2 Int. 4 MHz d9e3 Int. 8 MHz d9e4 Ext. Crys. d9ff]

Видишь, формат очень прост. Строка контроллера (обязательно с точкой!) и в квадратных скобаках возможные варианты (отделенные табуляцией) с байтами тех самых фузов. Обратите внимание, что тут меняется СРАЗУ ОБА БАЙТА Fuse битов. Т.е. касаются далеко не только тактовой частоты. А еще всего остального что конфигурируется в FUSE. Так что я бы сразу переназвал их иначе. Скажем как
All Default,but 1MHZ
All Default,but 2MHZ
All Default,but 4MHZ

Чтобы было понятней. Но это как бы быстрые шаблоны и не претендуют на глобальность.

Лучше сразу нажать Advanced и узреть … тот самый цифровой ввод.

Но не стоит напрягаться, достаточно нажать кнопочку «С» (видимо авторы имели ввиду Calculator) и увидеть удобнейшие выпадающие списки с человеческим описанием. Прям как в STK500.

Но ни в коем случае не забывайте нажать кнопочку READ перед тем как что либо менять. Помните, неустановленные fuse это тоже какое то значение, которое будет записано при нажатии кнопки WRITE

Конфигурирование программы
Впрочем, все же главным достоинством этой оболочки является ее легкая заточка под любой программатор поддерживаемый через AVRDUDE.

Покажу на примере программатора встроенного в Pinboard (На базе FTDI, но распиновка выводов немного отличная от FTBB описанного ранее).

Закрываем программу, чтобы не мешалась и не держала файлы.

Прописывание конфигурации FTBB в файле avrdude.conf я описывать не буду, подробней я об этом уже писал ранее.

Считаем, что это уже сделано и в файле конфигов avrdude у нас есть нужная секция. Я назвал ее pinb, впрочем, название может быть и произвольным.

Первым делом открываем файл Programmer.txt и видим там список:

1
2
3
4
5
6
7
8
9
10
11
ABCmini
ALF
Arduino
AT ISP
AVR109
AVR910
AVR911
AVRISP
AVRISP 2
AVRISP mkII
AVRISP v2

ABCmini ALF Arduino AT ISP AVR109 AVR910 AVR911 AVRISP AVRISP 2 AVRISP mkII AVRISP v2

и еще полторы страницы все известных и не очень типов программаторов. Вписываем там первой строкой наш pinb

1
2
3
4
5
6
7
8
9
10
11
12
ABCmini
pinb
ALF
Arduino
AT ISP
AVR109
AVR910
AVR911
AVRISP
AVRISP 2
AVRISP mkII
AVRISP v2

ABCmini pinb ALF Arduino AT ISP AVR109 AVR910 AVR911 AVRISP AVRISP 2 AVRISP mkII AVRISP v2

Все, теперь он в списке, но ему еще надо сопоставить порт. Поэтому открывай файл Port.txt
Вот его дефолтное содержимое:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Default.
[COM1	com1
COM2	com2
COM3	com3
COM4	com4
COM5	com5
COM6	com6
COM7	com7
COM8	com8
COM9	com9
LPT1	lpt1
LPT2	lpt2
LPT3	lpt3]
 
STK500 v2.
[USB	avrdoper]
 
AVRISP mkII.
[USB	usb]
 
USBasp.
[USB	x]

Default. [COM1 com1 COM2 com2 COM3 com3 COM4 com4 COM5 com5 COM6 com6 COM7 com7 COM8 com8 COM9 com9 LPT1 lpt1 LPT2 lpt2 LPT3 lpt3] STK500 v2. [USB avrdoper] AVRISP mkII. [USB usb] USBasp. [USB x]

Как видишь, формат тут сходный. Название программатора (с точкой в конце!), а в скобках варианты. Причем первым делом пишем произвольное название порта, а потом то в каком виде он должен подставиться в командную строку avrdude. Между ними табуляция.

Порт FTDI bitbang в консоли называется ft# и номер от нуля до бесконечности. В зависимости от того сколько чипов FTDI навешано на твой компьютер в данный момент. Причем учитываются именно подключенные, активные, чипы. И не стоит путать этот номер с номером виртуального COM порта который этот чип организует. Так что если у тебя в системе всего один адаптер USB-COM на базе FTDI, то какой бы там COM порт ни был, для bitbang программатора он зовется ft0 и никак иначе. На всякий случай добавляем несколько вариантов.

Добавляем туда нашу секцию

1
2
3
4
5
pinb.
[FTDI	ft0
FTDI1	ft1
FTDI2	ft2
FTDI3	ft3]

pinb. [FTDI ft0 FTDI1 ft1 FTDI2 ft2 FTDI3 ft3]

Осталась еще одна маленькая деталь. Опция скорости. Для обычных программаторов вполне подойдет и дефолтная настройка, но вот незадача — там используется ключ -b, а он меняет только битрейт СОМ порта. А если нам надо менять битклок FTDI битбанг эмуляции порта? Тут в avrdude за это отвечает ключ -B, но Sina его не знает. Придется добавлять. За скорость отвечает файл speed.txt

Вписываем туда нашу скорость в нагрузку к уже имеющейся в таком виде:

1
2
3
4
5
6
7
8
9
10
11
12
13
1200	x -B 1200
2400	x -B 2400
4800	x -B 4800
9600	x -B 9600
14400	x -B 14400
19200	x -B 19200
38400	x -B 38400
57600	x -B 57600
115200	x -B 115200
230400	x -B 230400 
460800	x -B 460800
921600	x -B 921600
3000000	x -B 3000000

1200 x -B 1200 2400 x -B 2400 4800 x -B 4800 9600 x -B 9600 14400 x -B 14400 19200 x -B 19200 38400 x -B 38400 57600 x -B 57600 115200 x -B 115200 230400 x -B 230400 460800 x -B 460800 921600 x -B 921600 3000000 x -B 3000000

Я же, поскольку последнее время пользуюсь только FTDI BB Программатором, удалил вообще из этого файла все и оставил только то, что привел выше.

Отлично, программатор мы прописали и порт мы сопоставили. Даже скорости выправили. Теперь надо сину заставить это дело все прожевать. Для этого берем и удаляем файл SinaProg.sav Не знаю как построена логика программы, но почему то именно это действие заставляет ее перечитать собственные конфиги и добавить наши строки в списки.

Все! Готово — можно шить! Удачной прошивки!

Сайт разработчиков SinaProg (увы сдох 🙁 )
Моя сборка SinaProg с уже настроенными конфигами под Pinboard и FTBB

AVRDUDE_PROG


По умолчанию поддерживаемые МК (список МК постоянно расширяется, см. форум):

AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega1280, ATmega1281, ATmega1284p, ATmega128RFA1, ATmega16, ATmega162, ATmega164p, ATmega168, ATmega169, ATmega2560, ATmega2561, ATmega32, ATmega324p, ATmega325, ATmega3250, ATmega328p, ATmega329, ATmega3290, ATmega329p, ATmega3290p, ATmega32U4, ATmega48, ATmega8, ATmega8515, ATmega8535, ATmega88, ATtiny13, ATtiny2313, ATtiny261.

 


По умолчанию поддерживаемые программаторы (список программаторов можно самостоятельно расширить, либо скачать с форума):

USBasp, USBtiny, AVR ISP mkII,SI-Prog, AVR910, AVR910, STK200, STK500, STK500 2.X, JTAG ICE mkII, JTAG ICE mkII ISP, JTAG ICE mkII PDI.

 

Основные отличия от аналогичных программ :

1. Возможность самостоятельного добавления программаторов, настройки скорости программирования и т.п;
2. Возможность самостоятельного добавления МК;
3. Редактирования и настройка отображения Fuses битов;
4. Выбор инверсных или прямых Fuses битов;
5. Окна вывода значений Fuses битов в HEX формате;
6. Сохранение настроек программирования при закрытии программы, т.е. при последующем открытии все настройки восстановятся;
7. «дублирование кнопки» — данная функция выводит на экран кнопку «Программировать», которая является полным функциональным аналогом кнопки «Программировать всё» и всегда будет находиться по верх всех окон. Кнопку можно переместить в удобную для вас зону монитора, свернув AVRDUDE_PROG. Удобна при многочисленном перепрограммировании МК.

 

 

Установка.

Разархивируйте файл usbprog.rar в любую удобную папку. Поместите ярлык программы «AVRDUDE_PROG» на рабочий стол. Установка завершена. Можно работать.

 

Возможности программы.

Настройки оболочки «AVRDUDE_PROG» реализованы в «ini» файлах. Что такое «ini» файлы можно посмотреть тут.
Теперь возможно самостоятельно добавлять и редактировать список микроконтроллеров, программаторов, портов, Fuses бит, добавить различные языки и пр.
Список контроллеров и состояний Fuses бит, редактируется в файле «atmel.ini», список программаторов и портов в файле «programm.ini», список поддерживаемых языков в файле «language.ini».

В файле «atmel.ini», все значения введены по умолчанию в соответствии с datasheet на МК, можете изменить по Вашему усмотрению. Никаких инверсий не требуется, значение по умолчанию вводиться в соответствии с datasheet на МК. В том случае, если МК нет в списке, или при выборе МК во вкладке Fuses везде «error», то Вам необходимо самостоятельно ввести значения в файл «atmel.ini» в соответствии с datasheet и приведённым ниже примером. Либо посмотреть на форуме. Файл «atmel.ini» находится в корневой папке программы.

В файле «programm.ini», введены значения программаторов для командной строки avrdude. В том случае, если используемый Вами программатор отсутствует в списке, либо необходимо изменить какие-либо параметры установленные по умолчанию, то необходимо ввести/редактировать его значения самостоятельно в соответствии с приведённым ниже примером. Либо посмотреть на форуме. Файл «programm.ini» находится в корневой папке программы.

В файле «language.ini», возможно отредактировать на «свой вкус» текстовую информацию оболочки, либо добавить язык программы AVRDUDE_PROG. Тут расписывать ничего не буду, думаю в файле «language.ini» всё понятно.

 

Добавление/редактирование списка МК. Работа с файлом «atmel.ini».

Окройте в любом текстовом редакторе (рекомендую Notepad++) файл «atmel.ini». Посмотрите как реализован ввод параметров МК, фузе битов и пр. Ниже привожу пример и описание парметров.

Пример на мк AT90CAN128

Заголовок раздела
[AT90CAN128] — имя МК которое появиться в выпадающем списке, «[» и «]» обязательны. В данном случае «AT90CAN128».

Параметр для типа МК
mcuavrdude=c128 // тип мк в avrdude


Значение и описание параметров раздела для Fuse битов

Lock байт
lockbytebit*enabled=0 // «*» — номер бита в Lock байте, «**enabled=0» — невозможно изменение состояния бита, «**enabled=1» — возможно изменение состояния бита. В данном случае изменение бита невозможно. Изменение бита будет недоступно.
lockbytebit*name=NOT USED // «*» — номер бита в Lock байте, «**name = NOT USED» — бит не используется. Если бит используется, вводиться его имя в соответствии с datasheet.
lockbytebit*def=1 // «*» — номер бита в Lock байте, «**def=» — если имя бит бита = «NOT USED», то значение вводится в соответствии с datasheet. В данном случае «1».

High байт
highbytebit*enabled=1 // «*» — номер бита в High байте, «**enabled=0» — невозможно изменение состояния бита, «**enabled=1» — возможно изменение состояния бита. В данном случае изменение бита возможно. Изменение бита будет доступно.
highbytebit*name=OCDEN // «*» — номер бита в High байте, «**name = OCDEN» — имя бита в соответствии с datasheet.
highbytebit*def=1 // «*» — номер бита в High байте, «**def=1» — значение бита по умолчанию, вводиться в соответствии с datasheet. В данном случае значение по умолчанию «1».

Low байт
lowbytebit*enabled=1 // «*» — номер бита в Low байте, «**enabled=0» — невозможно изменение состояния бита, «**enabled=1» — возможно изменение состояния бита. В данном случае изменение бита возможно. Изменение бита будет доступно.
lowbytebit*name=CKDIV8 // «*» — номер бита в Low байте, «**name = CKDIV8» — имя бита в соответствии с datasheet.
lowbytebit*def=0 //»*» — номер бита в Low байте, «**def=0» — значение бита по умолчанию, вводиться в соответствии с datasheet. В данном случае значение по умолчанию «0».

Extended/Fuse/Fuse байт
extendedbytebit*enabled=0 // «*» — номер бита в Extended/Fuse/Fuse байте, «enabled=0» — невозможно изменение состояния бита, «enabled=1» — возможно изменение состояния бита. В данном случае изменение бита невозможно. Изменение бита будет недоступно.
extendedbytebit*name=NOT USED //»*» — номер бита в Extended/Fuse/Fuse байте, «name = NOT USED» — бит не используется. Если бит используется, вводиться его имя в соответствии с datasheet.
extendedbytebit*def=1 // «*» — номер бита в Lock байте, «**def=» — если имя бит бита = «NOT USED», то значение вводится в соответствии с datasheet. В данном случае «1».

 

Добавление/редактирование списка программаторов. Работа с файлом «programm.ini».

Окройте в любом текстовом редакторе (рекомендую Notepad++) файл «programm.ini». Посмотрите как реализован ввод параметров программаторов. Ниже привожу пример и описание парметров.

Описание переменных файла.

[Name programmator] – имя программатора а выпадающем списке
progisp – программатор для командной строки avrdude
portprog – порт программатора для командной строки avrdude (Usb, com, lpt и пр.)
portenabled – окно изменение порта «1»-доступно, «0» — недоступно

 

Программатор AVR STK200 с поддержкой LPT.

Для добавления программатора AVR STK200 с поддержкой LPT в файл «programm.ini» можно добавить следующее:

[STK200LPT]
progisp=stk200
portprog=lpt1
portenabled=0

Сохраните файл «programm.ini»

В выпадающем списке «Настройки» -> «Программатор» появиться программатор « STK200LPT » с работой от lpt1 порта.
Всё работает аналогично для других параметров и программаторов, поддерживаемых avrdude.

 

AVRDUDE_PROG 3.3 (24.02.2014)

Основные отличия от предыдущей версии:
— добавлено куча контроллеров, исправлены ошибки файлов «atmel.ini»,»avrdude.conf» — огромное спасибо модератору форума dmibr за проделанную работу!
— исправлены мелкие ошибки.
Если у Вас установлена программа версии 3.1 и выше, то достаточно заменить файл — «AVRDUDEPROG.exe»,»avrdude.exe»,»avrdude.conf»,»atmel.ini» . В этом случае все ранее сохранённые настройки в файлах «ini» не изменяться.

Размер файла: 690КБ
Статус программы: бесплатная
ОС: Windows NT/2000/XP/VISTA/WINDOWS 7
Интерфейс: русский, english
Разработчик: yourdevice
Версия: 3.3 (24.02.2014)

 

AVRDUDE_PROG 3.2

ВНИМАНИЕ!!! Актуально для версии 3.2 — ссылка на форум

Основные отличия от предыдущей версии:
— исправлено зависание программы в некоторых случая;
— исправлена ширина выпадающего списка программаторов;
— в диалоговом окне программы состояние avrdude выводиться в режиме онлайн, а не в конце программирования;
— исправлены мелкие ошибки.
Если у Вас установлена программа версии 3.1, то достаточно заменить только «exe» файл. В этом случае все ранее сохранённые настройки в файлах «ini» не изменяться.

Размер файла: 558КБ
Статус программы: бесплатная
ОС: Windows NT/2000/XP/VISTA/WINDOWS 7
Интерфейс: русский, english
Разработчик: yourdevice
Версия: 3.2 (03.08.2013)

download_manager Скачать.

 

AVRDUDE_PROG 3.1

Размер файла: 558КБ
Статус программы: бесплатная
ОС: Windows NT/2000/XP/VISTA/WINDOWS 7
Интерфейс: русский, english
Разработчик: yourdevice
Версия: 3.1 (18.10.2012)

download_manager Скачать.

 

AVRDUDE_PROG 3.0

Размер файла: 558КБ
Статус программы: бесплатная
ОС: Windows NT/2000/XP/VISTA/WINDOWS 7
Интерфейс: русский
Разработчик: yourdevice
Версия: 3.0

download_manager Скачать.

AVRDUDE

Консольная программа для считывания, изменения и записи содержимого памяти микроконтроллеров архитектуры AVR, применяющая технологию внутрисхемного программирования.

AVRDUDE (сокращение от AVR Downloader-Uploader) представляет собой мощную утилиту, позволяющую посредством консольного интерфейса работать с памятью и прошивать микроконтроллеры от компании Atmel. AVRDUDE основана на распространенном интерфейсе обмена данными с микросхемами – SPI. Программа позволяет прошивать FLASH- и EEPROM-память, программировать фьюзы, выполнять верификацию FLASH-памяти с выбранным HEX-файлом, работать в терминальном режиме и многое другое.
Данный софт получил огромную популярность вследствие поддержки широчайшего спектра микроконтроллеров и программаторов (FT2232, Atmel AVR ISP, Altera ByteBlaster, Atmel STK500 и STK600, USBasp, Brian Dean’s Programmer, Dontronics DT006, Pony Prog STK200, Bascom SAMPLE programming cable и многих-многих других), работающих через интерфейсы параллельного и последовательного портов. Кроме официальных программных аппаратных средств от Atmel возможна работа с любительскими изделиями, не поддерживаемыми AVR Studio.

Главной особенностью программы является консольный интерфейс, требующий определенных навыков работы. Однако сторонними разработчиками для AVRDUDE был создан ряд удобных графических оболочек полезных при изучении содержимого памяти микроконтроллеров, изменения отдельных байтов EEPROM, Lock- и Fuse-битов. Программировать же всю память кристалла удобно из командной строки AVRDUDE.

В отличие от AVR Studio, полезной лишь в процессе создания и отладки программного кода, AVRDUDE больше подходит для серийного прошивания готовых продуктов. Для работы с повседневными однотипными задачами пользователю не требуется каждый раз набирать команды вручную, поскольку программа может работать с пакетными файлами. Для этого необходимо создать bat-файл и прописать в нем ключи, указать файл с прошивкой и, самое главное, верно внести в командную строку Fuse-биты. В дальнейшем будет достаточно лишь запускать bat-файл на выполнение. Для разных устройств необходимо создавать свой батник.

Программное обеспечение AVRDUDE имеет статус GNU GPL, что дает возможность каждому пользователю свободно скачивать ее, изменять по собственному желанию и распространять дальше. Благодаря этому AVRDUDE вошла в состав различных сред для разработки программ микроконтроллеров AVR, например WinAVR.

Установить данный софт можно вместе с пакетом WinAVR (для запуска необходимо написать в командной строке: avrdude) или скачать все нужные файлы, включая исходный код, с официального сайта программы: http://download.savannah.gnu.org/releases/avrdude/.

Первоначальный код AVRDUDE был создан английским программистом Брайеном Дином (http://www.bsdhome.com/). Программа была написана для операционной системы FreeBSD и распространялась под названием AVRprog. В связи с растущим интересом к данному продукту Брайан решил портировать его на другие операционные системы и выложить в свободном доступе. Изменение названия на AVRDUDE произошло, чтобы не было путаницы с утилитой AVRprog, распространяемой компанией Atmel в составе AVR Studio.

Консольный интерфейс AVRDUDE представлен на английском языке, однако в Сети можно найти русифицированные графические оболочки рассматриваемой утилиты, например AVRDUDE_PROG.

Программа AVRDUDE представлена в вариантах для Windows и Linux. Windows-версия поддерживает все известные операционные системы Microsoft, включая Vista и 7. Поскольку в Windows 2000 и Windows XP возможность работать напрямую с параллельным портом компьютера заблокирована, для нормального функционирования AVRDUDE потребуется самостоятельно установить драйвер giveio.sys, поставляемый с программой. В Windows 98 дополнительные настройки не требуются.

Распространение программы: Freeware (бесплатная)

Официальный сайт программы «AVRDUDE»: http://download.savannah.gnu.org/releases/avrdude/

Скачать AVRDUDE

Обсуждение программы на форуме

Avrdude — консольная программа прошивки микроконтроллеров — IST Knowledge

Avrdude (AVR Downloader-Uploader) — бесплатная кросплатформенная программа, предназначенная для прошивания микроконтроллеров компании ATMEL. Поддерживает практически все имеющиеся официальные типы программаторов, а также некоторые сторонние программаторы.

Сайт программы: http://www.nongnu.org/avrdude/ Лицензия: GPL Операционная система: Кросплатформенный Особенностью программы Avrdude является то, что она имеет консольный интерфейс пользователя, что потребует от пользователя определенных навыков. Тем не менее для любителей графического интерфейса имеется ряд сторонних графических оболочек для этой программы. Хотя графический интерфейс является во многом удобным и предпочтительным, для выполнения повседневных однотипных задач все же лучше использовать программу из скриптов cmd, что будет рассмотрено в данном документе. Альтернативным способом прошивания микроконтроллеров являются встроенные средства, входящие в состав средств разработки, такие как AVR Studio. Но они удобны только в процессе разработки и отладки программ. Avrdude больше полезен в процессе серийного прошивания готовых изделий, т.к. не потребует для работы установки среды разработки, а для прошивки микроконтроллера достаточно только дважды щелкнуть мышью по заранее подготовленному ярлыку (естественно с указанными параметрами запуска программы).

Итак, для работы с программой потребуется:

  1. Установить программу;
  2. Разобраться с параметрами командной строки и сформировать команду запуска программы.

После чего программа готова к использованию.

Установка Avrdude

Avrdude входит в состав пакета WinAVR, поэтому установка сводится к установке данного пакета. Скачать WinAVR можно здесь: http://sourceforge.net/projects/winavr/. После установки пакета WinAVR можно запускать Avrdude, для чего откройте командную строку и выполните команду: avrdude После чего на экране вы должны увидеть краткую инструкцию команды:

Параметры программы

Синтаксис команды Avrdude: Avrdude [опции] Где [опции] задают параметры команды в формате -ключ_значение. Рассмотрим наиболее значимые опции команды.

Задаем тип микроконтроллера (-p)

Avrdude -p <partno>

где <partno> — тип микроконтроллера. Данная команда указывает какой тип микроконтроллера используется. Например, для микроконтроллера Atmega32 <partno> будет равен m32.

Задаем скорость порта для программатора (-b)

Avrdude -b <baudrate> 

где <baudrate> переопределяет скорость обмена данными с программатором по последовательному интерфейсу (относится не ко всем типам программаторов). Не рекомендуется изменять данный параметр без особых причин, т.к. программаторы обычно оптимизированы на скорость по умолчанию.

Задаем скорость обмера данными программатора с микроконтроллером (-B)

Avrdude -B <bitclock> 

где < bitclock> переопределяет скорость обмена данными программатора с микроконтроллером. Данный параметр может потребоваться если частота микроконтроллера слишком низкая и не позволяет производить программирование на скорости по умолчанию. В таком случае с помощью данного параметра скорость программирования может быть снижена.

Запрещаем автоматическую очистку памяти микроконтроллера перед прошиванием (-D)

Avrdude -D Если нам не нужно выполнять автоматическую очистку flash-памяти микроконтроллера, выполняемую перед ее прошиваением, то используем данную опцию.

Указываем порт, к которому подключен программатор (-P)

Avrdude -P <port> Указывается коммуникационный порт по которому к компьютеру подключен программатор. Среди возможных значений могут быть COM1 для последовательного интерфейса или LPT1 для параллельного или USB.

Отключение проверки сигнатуры микроконтроллера (-F)

Avrdude -F Опция отключает проверку сигнатуры микроконтроллера при прошивке. Не рекомендуется использовать данную опцию, т.к. проверка сигнатуры позволяет проверять тот ли тип микроконтроллера подключен, что мы предполагаем или нет.

Очистка микроконтроллера (-e)

Avrdude -e Производит очистку flash-памяти микроконтроллера. Данная операция производится автоматически при прошивании.

Манипуляции с памятью микроконтроллера (-U)

Avrdude -U <memtype>:r|w|v:<filename>[:format] Наиболее значимая опция команды, которая непосредственно отвечает за программирование микроконтроллера. Параметр memtype задает какой тип памяти будет затронут командой:

  • flash — флеш память микроконтроллера;
  • eeprom — энергонезависимая память микроконтроллера;
  • hfuse — старший байт фьюзов микроконтроллера;
  • lfuse —  младший байт фьюзов микроконтроллера;
  • efuse —  еще один байт фьюзов микроконтроллера (если поддерживается микроконтроллером).

Что сделать с памятью определяет следующий за memtype параметр через двоеточие, который обозначает запись в память (r), чтение содержимого памяти микроконтроллера (w) и проверка памяти (v). Далее после двоеточего следует имя файла <filename> (можно полный путь с указанием диска в кавычках) куда следует сохранить или откуда надо загрузить содержимое памяти. Необязательный параметр format определяет формат файла, в котором хранится участок памяти. Наиболее типичным для flash памяти будет формат «Intel Hex», обозначаемый символом i. Таким образом, команда на запись в микроконтроллера прошивки, содержащейся в файле test.hex будет следующей: Avrdude -U flash:w:test.hex:i 

Команда на чтение содержимого энергонезависимой памяти микроконтроллера в файл  eedump.hex будет следующей:Avrdude -U eeprom:r:eedump.hex:i

Блокировать любую запись в микроконтроллер (-n)

Avrdude -n Опция заблокирует любые попытки записать что-либо в микроконтроллер. Может потребоваться если вы собираетесь попробовать выполнить команду, но пока в чем-то не уверены и хотите сначала ее проверить, т.к. боитесь, что испортите микроконтроллер.

Разрешение на изменение фьюзов (-u)

Avrdude -u Если вы собираетесь изменить фьюзы микроконтроллера, то необходимо подтвердить это намерение с помощью данной опции.

Открытие терминала программатора (-t)

Avrdude -t Данная опция позволяет работать с программатором в режиме терминала. Эта опция полезна для продвинутых пользователей.

Выключить автоматическую проверку записи (-V)

Avrdude -V Опция запрещает производить проверку данных при записи.

Задаем тип программатора (-c)

С помощью опции -c <programmer> возможен выбор одного из следующих программаторов:

2232HIOFT2232H based generic programmer
4232hFT4232H based generic programmer
89ispAtmel at89isp cable
abcminiABCmini Board, aka Dick Smith HOTCHIP
alfNightshade ALF-PgmAVR, http://nightshade.homeip.net/
arduinoArduino
arduino-ft232rArduino: FT232R connected to ISP
atispAT-ISP V1.1 programming cable for AVR-SDK1 from <http://micro-research.co.th/&gt;
avr109Atmel AppNote AVR109 Boot Loader
avr910Atmel Low Cost Serial Programmer
avr911Atmel AppNote AVR911 AVROSP
avrftdiFT2232D based generic programmer
avrispAtmel AVR ISP
avrisp2Atmel AVR ISP mkII
avrispmkIIAtmel AVR ISP mkII
avrispv2Atmel AVR ISP V2
bascomBascom SAMPLE programming cable
blasterAltera ByteBlaster
bsdBrian Dean’s Programmer, http://www.bsdhome.com/avrdude/
buspirateThe Bus Pirate
buspirate_bbThe Bus Pirate (bitbang interface, supports TPI)
butterflyAtmel Butterfly Development Board
butterfly_mkMikrokopter.de Butterfly
bwmegaBitWizard ftdi_atmega builtin programmer
c2n232iserial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts
dapaDirect AVR Parallel Access cable
dasaserial port banging, reset=rts sck=dtr mosi=txd miso=cts
dasa3serial port banging, reset=!dtr sck=rts mosi=txd miso=cts
diecimilaalias for arduino-ft232r
dragon_dwAtmel AVR Dragon in debugWire mode
dragon_hvspAtmel AVR Dragon in HVSP mode
dragon_ispAtmel AVR Dragon in ISP mode
dragon_jtagAtmel AVR Dragon in JTAG mode
dragon_pdiAtmel AVR Dragon in PDI mode
dragon_ppAtmel AVR Dragon in PP mode
dt006Dontronics DT006
ere-isp-avrERE ISP-AVR <http://www.ere.co.th/download/sch050713.pdf&gt;
frank-stk200Frank STK200
ft232rFT232R Synchronous BitBang
ft245rFT245R Synchronous BitBang
futurlecFuturlec.com programming cable.
jtag1Atmel JTAG ICE (mkI)
jtag1slowAtmel JTAG ICE (mkI)
jtag2Atmel JTAG ICE mkII
jtag2avr32Atmel JTAG ICE mkII im AVR32 mode
jtag2dwAtmel JTAG ICE mkII in debugWire mode
jtag2fastAtmel JTAG ICE mkII
jtag2ispAtmel JTAG ICE mkII in ISP mode
jtag2pdiAtmel JTAG ICE mkII PDI mode
jtag2slowAtmel JTAG ICE mkII
jtag3Atmel AVR JTAGICE3 in JTAG mode
jtag3dwAtmel AVR JTAGICE3 in debugWIRE mode
jtag3ispAtmel AVR JTAGICE3 in ISP mode
jtag3pdiAtmel AVR JTAGICE3 in PDI mode
jtagkeyAmontec JTAGKey, JTAGKey-Tiny and JTAGKey2
jtagmkIAtmel JTAG ICE (mkI)
jtagmkIIAtmel JTAG ICE mkII
jtagmkII_avr32Atmel JTAG ICE mkII im AVR32 mode
lm3s811Luminary Micro LM3S811 Eval Board (Rev. A)
mib510Crossbow MIB510 programming board
mkbutterflyMikrokopter.de Butterfly
nibobeeNIBObee
o-linkO-Link, OpenJTAG from http://www.100ask.net
openmokoOpenmoko debug board (v3)
pavrJason Kyle’s pAVR Serial Programmer
pickit2MicroChip’s PICkit2 Programmer
picowebPicoweb Programming Cable, http://www.picoweb.net/
pony-stk200Pony Prog STK200
ponyserdesign ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts
siprogLancos SI-Prog <http://www.lancos.com/siprogsch.html&gt;
sp12Steve Bolt’s Programmer
stk200STK200
stk500Atmel STK500
stk500hvspAtmel STK500 V2 in high-voltage serial programming mode
stk500ppAtmel STK500 V2 in parallel programming mode
stk500v1Atmel STK500 Version 1.x firmware
stk500v2Atmel STK500 Version 2.x firmware
stk600Atmel STK600
stk600hvspAtmel STK600 in high-voltage serial programming mode
stk600ppAtmel STK600 in parallel programming mode
usbaspUSBasp, http://www.fischl.de/usbasp/
usbasp-cloneAny usbasp clone with correct VID/PID
usbtinyUSBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
wiringWiring
xilXilinx JTAG cable

Пример команды: C:>avrdude -c avrisp ...

Скрипт для автоматической прошивки микроконтроллера

Для того, чтобы прошивка микроконтроллера производилась с помощью программы avrdude автоматически можно написать небольшой скрипт. Далее приведу небольшой пример, написанный для программатора AVR-JTAG-USB. К данному программатору можно обращаться через COM-порт, который создается при установке его драйвера, поэтому скрипт первым делом спрашивает номер порта, к которому подключен программатор, далее пытается с ним соединиться. Если не удается, то программа возвращается к выбору последовательного порта. Иначе производит прошивку платы.

set AVRDUDECMD="<путь к папке с avrdude>avrdude.exe"
set FIRMWARESOURCEDIR=<путь к папке с текущей прошивкой>
set FIRMWAREDIR=%TMP%firmware

:SELECTPORT
set /P port="Выберите номер порта COM"
echo %AVRDUDECMD%

echo Проверка подключения...
%AVRDUDECMD% -c jtagmkI -p m32 -P COM%port%
IF %ERRORLEVEL% EQU 9009 GOTO SELECTPORT

echo Удаляем временные файлы
rmdir /S /Q %FIRMWAREDIR%
echo Копируем прошивку во временную папку
mkdir %FIRMWAREDIR%
xcopy "%FIRMWARESOURCEDIR%*.*"  "%FIRMWAREDIR%"

echo Прошиваем микроконтроллер
@echo on
%AVRDUDECMD% -c jtagmkI -p m32 -P COM%port% -U flash:w:"%FIRMWAREDIR%firmware.hex":i -U hfuse:w:^<0x91^>:m -U lfuse:w:^<0xFF^>:m
@echo off

pause

Как работает скрипт?

В самом начале скрипта определяются значения трем переменным:

  • AVRDUDECMD — полный путь к программе avrdude.exe
  • FIRMWARESOURCEDIR — Полный путь к папке с прошивкой
  • FIRMWAREDIR — путь к временной папке, в которую будут скопированы файлы прошивки. Данная папка необходима для успешного выполнения программы avrdude на случай, если FIRMWARESOURCEDIR окажется сетевой папкой. В случае, если папка с прошивкой окажется сетевой, то программа avrdude выдаст ошибку.

Имя файла с прошивкой должно быть firmware.hex и располагаться в папке FIRMWARESOURCEDIR. Строка с командой на прошивку микроконтроллера выглядит следующим образом: %AVRDUDECMD% -c jtagmkI -p m32 -P COM%port% -U flash:w:»%FIRMWAREDIR%firmware.hex»:i -U hfuse:w:^<0x91^>:m -U lfuse:w:^<0xFF^>:m Здесь указывается, что будет использован программатор AVR-JTAG-USB, микроконтроллер Atmega32, порт COM[номер порта вводится пользователем с клавиатуры]. В строке команды указываются значения фьюзов — hfuse=0x91 иlfuse=0xFF в шестнадцатиричном формате. Значения фьюзов в шестнадцатиричном формате можно подобрать с помощью встроенных инструментов AVR-Studio, предназначенных для прошивания миктроконтроллеров. Данный скрипт можно разместить в сетевой папке вашей локальной сети и запускать с любого компьютера прямо из сетевой папки. Результат работы скрипта будет примерно таким:

Выберите номер порта COM2
"\centerПрошивки для платavrdudeavrdude.exe"
Проверка подключения...
avrdude.exe: jtagmkI_open(): failed to synchronize to ICE
avrdude.exe: jtagmkI_close(): unsupported baudrate -1

avrdude.exe done.  Thank you.

Удаляем временные файлы
Копируем прошивку во временную папку
\centerПрошивки для платМОС-Универсальныйrevision01.00version01.00MOS.hex
Скопировано файлов: 1.
Прошиваем микроконтроллер

C:WINDOWS>"\centerПрошивки для платavrdudeavrdude.exe" -c jtagmkI -p m32 -P COM2 -U flash:w:"C:DOCUME~1valeyevLOCALS~
1TempfirmwareMOS.hex":i -U hfuse:w:<0x91>:m -U lfuse:w:<0xFF>:m

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.05s

avrdude.exe: Device signature = 0x1e9502
avrdude.exe: NOTE: FLASH memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "C:DOCUME~1valeyevLOCALS~1TempfirmwareMOS.hex"
avrdude.exe: writing flash (19104 bytes):

Writing | ################################################## | 100% 7.19s

avrdude.exe: 19104 bytes of flash written
avrdude.exe: verifying flash memory against C:DOCUME~1valeyevLOCALS~1TempfirmwareMOS.hex:
avrdude.exe: load data flash data from input file C:DOCUME~1valeyevLOCALS~1TempfirmwareMOS.hex:
avrdude.exe: input file C:DOCUME~1valeyevLOCALS~1TempfirmwareMOS.hex contains 19104 bytes
avrdude.exe: reading on-chip flash data:

Reading | ################################################## | 100% 4.11s

avrdude.exe: verifying ...
avrdude.exe: 19104 bytes of flash verified
avrdude.exe: reading input file "<0x91>"
avrdude.exe: invalid byte value (<0x91>) specified for immediate mode
avrdude.exe: write to file '<0x91>' failed

avrdude.exe: safemode: Fuses OK

avrdude.exe done.  Thank you.

Для продолжения нажмите любую клавишу . . .

Понравилось это:

Нравится Загрузка…

Похожее

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *