Avrdude — опции запуска и примеры использования, графическая оболочка для linux
Содержание
Список поддерживаемых программаторов
FT2232D based generic programmer FT2232H based generic programmer FT232H based module from FTDI and Glyn.com.au Amontec JTAGKey, JTAGKey-Tiny and JTAGKey2 Atmel AVR ISP Atmel AVR ISP V2 Atmel AVR ISP mkII The Bus Pirate Atmel STK500 Crossbow MIB510 programming board Atmel STK600 Avr910 USBasp USBtiny simple USB programmer Atmel Butterfly Development Board Atmel AppNote AVR109 Boot Loader Atmel AppNote AVR911 AVROSP Mikrokopter.de Butterfly Mikrokopter.de Butterfly Atmel JTAG ICE (mkI) Atmel JTAG ICE mkII in ISP mode Atmel AVR Dragon Jason Kyle`s pAVR Serial Programmer Brian Dean`s Programmer STK200 Pony Prog STK200 Dontronics DT006 Bascom SAMPLE programming cable Nightshade ALF-PgmAVR Steve Bolt`s Programmer Picoweb Programming Cable ABCmini Board, aka Dick Smith HOTCHIP Futurlec.com programming cable. Xilinx JTAG cable Direct AVR Parallel Access cable AT-ISP V1.1 programming cable for AVR-SDK1 ERE ISP-AVR Altera ByteBlaster Frank STK200 Atmel at89isp cable design ponyprog serial Lancos SI-Prog serial port banging
Как использовать AVRDUDE под Windows
Сразу оговорюсь, что не стоит набирать команды вручную каждый раз. Для этого человечество придумало пакетные файлы. Создаем файл с расширением .bat и в него пишем команду или несколько команд. Потом просто запускаем наш bat файл.
Пример 1 (Прошиваем Flash)
где:
-p m16 — указывает, что мы прошиваем микроконтроллер ATmega16 -c usbasp — указывает, что мы прошиваем, используя программатор USBasp -e — Выполняет команду ERASE (стирание чипа) перед прошивкой -U flash:w:upload.hex — указывает, что работаем с флеш памятью (flash), пишем (w), файл (upload.hex).
Сразу же возникает вопрос: «Где найти обозначения микроконтроллеров и программаторов?»
Ответ: в файле документации с подробным описанием параметров командой строки: C:/avrdude/avrdude-html/avrdude_4.html
Если такой отсутствует, можно заглянуть в файл конфигурации avrdude.conf
Пример 2 (программируем Фьюзы)
где:
-p m88p — микроконтроллер ATmega88P-c usbasp — указывает, что мы прошиваем, используя программатор USBasp-U lfuse:w:0xE2:m — зашиваем в младший разряд фюзов 0xE2-U hfuse:w:0xDF:m — зашиваем в старший разряд фюзов 0xDF
Для удобства можете воспользоваться калькуляторами Фьюзов:
http://fusecalc.mirmk.net/ (локальная версия калькулятора фьюзов с того же сайта FUSEcalc.zip) http://payalo.at.ua/c_fuse/calc.htmlПодробнее о фьюзах
Пример 3 (программируем EEPROM)
где:
-p m16 — указывает, что мы прошиваем микроконтроллер ATmega16 -c usbasp — указывает, что мы прошиваем, используя программатор USBasp -U eeprom:w:upload.hex — указывает, что работаем с eeprom памятью (eeprom), пишем (w), файл (eeprom.hex).
Пример 4 (читаем Flash и пишем в файл dump.hex)
Отличие от первого примера, отсутствует «-e» (стирать чип нам не надо), команда :w: (write, писать) заменена на :r: (read, читать), добавлено :i (формат файла Intel Hex)
При прошивке формат файла определяется автоматически, указывать его не обязательно. Когда пытаетесь слить прошивку, указывать формат файла нужно обязательно.
Поддерживаемые форматы файлов:
i — Intel Hexs — Motorola S-recordr — raw binary; little-endian byte order, in the case of the flash ROM datam — immediate mode; actual byte values specified on the command line, separated by commas or spaces in place of the filename field of the ‘-U’ option. This is useful for programming fuse bytes without having to create a single-byte file or enter terminal mode. If the number specified begins with 0x, it is treated as a hex value. If the number otherwise begins with a leading zero (0) it is treated as octal. Otherwise, the value is treated as decimal.a — auto detect; valid for input only, and only if the input is not provided at stdin.d — decimal; this and the following formats are only valid on output. They generate one line of output for the respective memory section, forming a comma-separated list of the values. This can be particularly useful for subsequent processing, like for fuse bit settings.h — hexadecimal; each value will get the string 0x prepended.o — octal; each value will get a 0 prepended unless it is less than 8 in which case it gets no prefix.b — binary; each value will get the string 0b prepended.
Пример 6 (выполняем сравнение (верификацию) Flash памяти с указанным hex файлом)
В последнем параметре :v: (verify, проверить).
Если нам надо одним движением прошивать флеш память и прошить фьюзы, разумно сделать пакетный файл с примерно следующими командами:
Практика использования AVRDUDE под Windows
На практике я поступаю так: в папке, где компилируется .hex файл прошивки создаю файл upload.bat со следующим содержимым:
В случае если потребуется изменить программатор, контроллер или путь к AVRDUDE, не потребуется исправлять во всех командах. Достаточно изменить переменные, объявленные в начале файла.
В статье Программаторы микроконтроллеров AVR я описал программатор AVR ISP Prorgammer (работащий через параллельный порт LPT), совместимый с AVR910 и USBasp программатор. Для этих программаторов в AVRDUDE используются следующие идентификаторы:
AVR ISP Prorgammer — stk200AVR910 — avr910USBasp — usbasp
Обращаю Ваше внимание на то, что AVR910 работает через виртуальный последовательный (COM) порт. Его следует указать в параметре -P
Пример:
Подробно о всех возможностях AVRDUDE читайте в документацииC:/avrdude/avrdude-html/avrdude.html
Удачи!
Смотри также:
- Программаторы микроконтроллеров AVR
- Прошивка AVR микроконтроллеров с помощью Raspberry Pi
Работа с памятью (опция -U :r|w|v:[:format])
В качестве <memtype> указываем тип памяти для работы:
- calibration — байты калибровки RC-генератора (один или несколько);
- eeprom — энергонезависимая память (EEPROM) микроконтроллера;
- efuse — дополнительный конфигурационный бит;
- flash — FLASH память микроконтроллера;
- fuse — фьюз-байт для МК только с одним fuse-байтом;
- hfuse — старший fuse-байт;
- lfuse — младший fuse-байт;
- lock — байт блокировки (ячейка защиты);
- signature — три байта что обозначают сигнатуру чипа (device ID);
- fuseN — байт с фьюзами для ATxmega чипов, N — целое число для каждого фьюза что поддерживается устройством;
- application — область приложений во Flash памяти для МК ATxmega;
- apptable — таблица приложений в области Flash памяти для устройств ATxmega;
- boot — загрузочная область Flash памяти для устройств ATxmega;
- prodsig — область с производственной сигнатурой (calibration) для устройств ATxmega;
- usersig — область с пользовательской сигнатурой для устройств ATxmega.
Дальше через двоеточие следует производимая операция с памятью МК:
- r — прочитать указанную область памяти и записать в указанный файл <filename>;
- w — прочитать данные из файла <filename> и записать в указанную память устройства;
- v — прочитать данные из указанного файла <filename> и из указанной области памяти (verify, проверка).
В поле <filename> указывается полный или относительный путь к файлу что используется для записи или чтения данных. Поле «:format» является не обязательным, с его помощью указывается формат используемого файла:
- i — Intel HEX;
- s — Motorola S-record;
- r — raw binary (RAW формат);
- e — ELF (Executable and Linkable Format);
- m — занчения байтов для записи указываются непосредственно в командной строке в поле <filename> и разделяются пробелами или запятыми. По умолчанию байты пишутся в десятичной системе, если указать 0x — будет записано шестнадцатеричные значения, а если перед байтом стоит 0 — будет записано восьмеричное число;
- a — авто-определение формата (auto detect);
- d — десятичный формат (decimal), числа разделяются запятыми;
- h — шестнадцатеричный формат (hexadecimal), числа начинаются с 0x;
- o — восьмеричный формат (octal), перед числами ставится 0;
- b — двоичный формат (binary), перед числами ставится 0b.
По умолчанию используется авто-определение формата (auto detect).
History
AVRDUDE has once been started by Brian S. Dean as a private project
of an in-system programmer for the Atmel AVR microcontroller series,
as part of the Opensource and free software tools collection available for
these controllers. Originally, the software was written for the FreeBSD operating system,
maintained in a private CVS repository, and distributed under the name
avrprog.
Due to the growing interest in porting the software to other
operating systems, Brian
decided to make the project publically accessible on
savannah.nongnu.org. The name change to AVRDUDE has been chosen to
resolve the ambiguity with the avrprog utility as distributed
by Atmel together with their AVRstudio software.
Программа AVRDude
Программа AVRDude (AVR Downloader-Uploader) — это очень мощный кросплатформенный инструмент, который позволяет программировать всю линейку микроконтроллеров AVR, поддерживая при этом из коробки почти все типы доступных сейчас программаторов. Программа работает из консоли, что позволяет хорошо автоматизировать процесс прошивки микроконтроллеров но требует при этом внимательности и навыков работы с терминалом.
Рис. 1. avrdude — кросплатформенная программа для прошивки микроконтроллеров фирмы ATMEL.
Первоначальный код программы AVRDude был написан английским программистом Брайеном Дином (Brian S. Dean) и имел название AVRprog. Позже программа получила большой интерес со стороны пользователей и Брайен решил открыть ее код для всеобщего использования и доработки, а для того чтобы она не путалась с одноименной программой из AVRStudio — AVRProg, программа получила новое имя — AVRDude.
Программа AVRDude запускается и работает на ОС: Linux, Windows, MacOS X, FreeBSD и других.
Адрес официального сайта программы AVRDude: http://www.nongnu.org/avrdude/
Для установки программы avrdude в Debian GNU Linux или Ubuntu следует установить одноименный пакет при помощи команды:
Послее установки пакета программа готова к работе из консоли.
Настройка AVRDUDE
Теперь нам осталось выполнить финальный шаг. Запускаем программу AVRDUDE. По умолчанию открывается вкладка Program. В нижней части окна в меню Настройки выбираем тип программатора usbasp. Далее в категории Микроконтроллер выбираем наш микроконтроллер ATmega8. Ниже, в категории Flash кликаем по значку троеточия и в открывшемся меню указываем путь к скомпилированному файлу с расширением hex. Путь к файлу и сам файл будут теми же, что мы ранее задавали в Proteus.
Чтобы убедится в том, что программатор определен операционной системой (драйвер программатора корректно установлен) и правильно подключен к микроконтроллеру, кликаем по кнопке Чтение. Если ошибок нет, то появится окно с записью “Калибровочные ячейки генератора считаны!” И в верхнем окошке отобразится шестнадцатеричное число. У каждого МК это число индивидуальное.
Прежде, чем записать новую программу рекомендуется очистить память микроконтроллера. Это можно сделать, кликнув по кнопке Стереть все. В результате появится окно с сообщением о том, что кристалл чист.
Теперь кликаем по кнопке Программировать в категории Flash. При успешной записи программы в МК появляется окно с записью, приведенной ниже.
Результат записанной, или, как еще говорят, прошитой программы – это засветившийся светодиод, подключенный к выводу PC0 нашего микроконтроллера.
Первая наша программа очень проста, а частота работы микроконтроллера оставлена по умолчанию и для ATmega8 равна 1 МГц. В случае изменения частоты или подключения внешнего кварцевого резонатора, необходимо внести некоторые изменения во вкладке Fuses, путем установки галочек в соответственные чекбоксы CKSEL0… CKSEL3.
Подробно настройки данной вкладки мы рассмотрим в статье Fuses (биты настройки или биты защиты) микроконтроллера.
Скачать USBasp драйвер
Скачать AVRDUDE
Параметры запуска avrdude
Запустив в консоли программу avrdude без аргументов мы сможем увидеть список доступных опций для использования. Приведенную ниже информацию можно позже использовать как краткую справку по параметрам программы avrdude.
Рис. 2. Список параметров программы avrdude.
Рассмотрим все опции программы по порядку:
- -p <partno> — является обязательной опцией, здесь мы в качестве <partno> указываем краткий ;
- -b <baudrate> — позволяет переопределить указанную для программатора в конфигурации программы скорость подключения по интерфейсу RS-232;
- -B <bitclock> — указываем Bit Clock Period для интерфейса отладки JTAG или ISP Clock (только для JTAG ICE). Значение <bitclock> указывается в микросекундах, для JTAG ICE по умолчанию оно установлено в 1 микросекунду и подходит для МК работающих на частотах 4МГц и выше;
- -C <config-file> — в качестве <config-file> указываем полный путь к файлу конфигурации с необходимыми нам настройками программы. По умолчанию используется файл /etc/avrdude.conf (Linux);
- -c <programmer> — в качестве <programmer> указываем , например «usbasp».
- -D — опция запрещает автоматическое стирание Flash-памяти. Автоматическое стирание не используется в микроконтроллерах семейства ATxmega;
- -i <delay> — установка паузы перед каждой отправкой каждого бита для bitbang-программаторов. В качестве <delay> указывается значение в микросекундах. Это бывает необходимо если для программирования используется компьютер с очень быстрым процессором или же микроконтроллер с низкой тактовой частотой (32КГц, 128КГц), позволяет соблюдать условие: частота ISP < 1/4 частоты процессора;
- -P <port> — в качестве значения <port> указываем используемый программатором порт. По умолчанию используются /dev/ppi0 (параллельный порт) и /dev/cuaa0 (последовательный порт) в зависимости от программатора;
- -F — опция для отключения проверки сигнатуры микроконтроллера. По умолчанию перед программированием avrdude проверяет сигнатуру микроконтроллера, которая в некоторых случаях может быть повреждена, при этом микроконтроллер может продолжать нормально функционировать;
- -e — стирает содержимое FLASH и EEPROM памяти (заполнение значениями 0xFF), очищаются fuse-bits (биты защиты). Исключением являются микроконтроллеры семейства ATxmega в которых используется постраничная запись;
- -O — опция для калибровки RC-генератора в соответствии с примечанием AVR053 от Atmel. Поддерживается только на программаторах STK500v2, AVRISP mkII, и JTAG ICE mkII. Результат будет сохранен в EEPROM памяти в ячейке с адресом 0;
- -U <memtype>:r|w|v:<filename> — комплексная опция для указания (чтение. запись, проверка);
- -n — запрет на запись в микроконтроллер, используется для отладки avrdude;
- -V — отключение автоматической проверки записанной информации;
- -u — отключить режим безопасной (safe mode) проверки и сопоставления ячеек конфигурации (fuse bits) до и по завершению программирования. Данная опция необходима если нужно изменить значения фьюзов (fuse bits), в противном случае avrdude в качестве меры безопасности изменит их значения на те которые были прочитаны перед программированием;
- -s — запрет вывода запросов в безопасном режиме при работе с фьюзами;
- -t — переводит avrdude в режим терминала (terminal mode);
- -E <exitspec> — изменение после программирования на указанные в аргументах опции. По умолчанию устанавливаются те состояния линий что были до начала работы;
- -x <extended_param> — позволяет указать дополнительный специальный параметр для используемого программатора;
- -y — опция что включает сохранение количества стираний МК в последних 4-х байтах памяти EEPROM;
- -Y <number> — указанное значение <number> будет сохранено в качестве числа циклов-стираний микроконтроллера в памяти EEPROM;
- -v — расширенный вывод информации о работе программы (verbose);
- -q — отключает отображение полоски прогресса при операциях с микроконтроллером. Для еще большого уменьшения отображаемой информации опцию следует указать дважды;
- -l <logfile> — перенаправление всего вывода для отладки в указанный файл, где <logfile> — полный путь к файлу для сохранения данных;
- ? — отображение справки.
Main features
The major features of AVRDUDE include:
|
Типы программаторов (опция -c )
Настройки всех программаторов содержатся в конфигурационном файле по умолчанию, полистать его содержимое в ОС Linux можно командой:
Ниже представлены значения опции и соответствующие данные программаторов:
Опция | Программатор |
---|---|
abcmini | ABCmini Board, aka Dick Smith HOTCHIP |
alf | Nightshade ALF-PgmAVR, http://nightshade.homeip.net/ |
arduino | Плата Arduino, протокол сходен с STK500 1.x |
atisp | AT-ISP V1.1 кабель программирования для AVR-SDK1, http://micro-research.co.th/ |
avr109 | Atmel AppNote AVR109 Boot Loader |
avr910 | Atmel Low Cost Serial Programmer |
avr911 | Atmel AppNote AVR911 AVROSP (an alias for avr109) |
avrftdi | FTDI MPSSE (FT2232 etc.) поддержка bitbang |
avrisp | Atmel AVR ISP (псевдоним для stk500) |
avrisp2 | Atmel AVR ISP mkII (псевдоним для stk500v2) |
avrispmkII | Atmel AVR ISP mkII (псевдоним для stk500v2) |
avrispv2 | Atmel AVR ISP, running a version 2.x firmware (an alias for stk500v2) |
bascom | Bascom SAMPLE programming cable |
blaster | Altera ByteBlaster |
bsd | Brian Dean’s Programmer, http://www.bsdhome.com/avrdude/ |
butterfly | Atmel Butterfly Development Board |
c2n232i | C2N232I, reset=dtr sck=!rts mosi=!txd miso=!cts, |
dapa | Direct AVR Parallel Access cable |
dasa | serial port banging, reset=rts sck=dtr mosi=txd miso=cts |
dasa3 | serial port banging, reset=!dtr sck=rts mosi=txd miso=cts |
dragon_dw | AVR Dragon in debugWire mode |
dragon_hvsp | AVR Dragon in high-voltage serial programming mode |
dragon_isp | AVR Dragon в режиме ISP |
dragon_jtag | AVR Dragon в режиме JTAG |
dragon_pp | AVR Dragon in (high-voltage) parallel programming mode |
dt006 | Dontronics DT006 |
ere-isp-avr | ERE ISP-AVR |
frank-stk200 | Клон STK200 от Frank’а, http://electropol.free.fr/spip/spip.php?article15 |
futurlec | Кабель программирования Futurlec.com |
jtag1 | Atmel JTAG ICE mkI, running at 115200 Bd |
jtag1slow | Atmel JTAG ICE mkI, running at 19200 Bd |
jtag2slow | Atmel JTAG ICE mkII (default speed 19200 Bd) |
jtag2,jtag2fast | Atmel JTAG ICE mkII, running at 115200 Bd |
jtag2isp | Atmel JTAG ICE mkII in ISP mode. |
jtag2dw | Atmel JTAG ICE mkII in debugWire mode. |
jtagmkI | Atmel JTAG ICE mkI, running at 115200 Bd |
jtagmkII | Atmel JTAG ICE mkII (default speed 19200 Bd) |
mib510 | Crossbow MIB510 programming board |
pavr | Jason Kyle’s pAVR Serial Programmer |
picoweb | Picoweb Programming Cable, http://www.picoweb.net/ |
pony-stk200 | Pony Prog STK200 |
ponyser | design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts |
siprog | Lancos SI-Prog, http://www.lancos.com/siprogsch.html |
sp12 | Steve Bolt’s Programmer |
stk200 | STK200 |
stk500 | Atmel STK500, probing for either version 1.x or 2.x firmware |
stk500hvsp | Atmel STK500 в режиме высоковольтного последовательного программирования (high-voltage serial programming mode), только для прошивок версии 2.x |
stk500pp | Atmel STK500 в режиме параллельного программирования (parallel programming) , только прошивка версии 2.x |
stk500v1 | Atmel STK500, с версией прошивки 1.x |
stk500v2 | Atmel STK500, с версией прошивки 2.x |
stk600 | Atmel STK600 в режиме ISP или в PDI режиме для устройств ATxmega |
stk600hvsp | Atmel STK600 в режиме высоковольтного последовательного программирования (high-voltage serial programming mode) |
stk600pp | Atmel STK600 в режиме параллельного программирования (parallel programming) |
usbasp | USBasp, http://www.fischl.de/usbasp/ |
usbtiny | USBtiny — простой USB программатор, http://www.ladyada.net/make/usbtinyisp/ |
xil | Xilinx JTAG кабель |
Заключение
Как видите у программы avrdude очень мощный арсенал возможностей по работе с AVR микроконтроллерами. Для консольной версии avrdude есть разнообразные графические надстройки и оболочки, но все же зная как использовать данную программу в консоли вы всегда будете держать процесс прошивки МК под полным контролем, а также легко производить автоматизацию всех необходимых действий.
Не стоит забывать что с течением времени появляются новые микроконтроллеры от Atmel, программаторы, а также программа avrdude в своем развитии не стоит на месте, желательно время-от-времени сверяться с официальной документацией по программе, следить за изменениями в мире AVR микроконтроллеров.
Для быстрого чтения документации по avrdude в Linux можно обратиться к родной MAN-системе (мануалы, manuals):
В следующей статье мы разберемся с настройкой avrdude для работы с микроконтроллерами на Linux, решим проблему ограничения прав запуска от обычного пользователя. Проведем первые испытания программатора в рабочей обстановке и на реальном микроконтроллере.
Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.