Программирование, радиоэлектроника,
саморазвитие и частичка из моей жизни здесь...

Avrdude - опции запуска и примеры использования, графическая оболочка для linux

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

Содержание:

  1. Программа AVRDude
  2. Параметры запуска avrdude
  3. Модели микроконтроллеров (опция -p <partno>)
  4. Типы программаторов (опция -c <programmer>)
  5. Работа с памятью (опция -U <memtype>:r|w|v:<filename>[:format])
  6. Состояние линий параллельного порта (-E <exitspec>[,<exitspec>])
  7. Примеры использования avrdude
  8. Графическая оболочка для avrdude
  9. Заключение

Программа AVRDude

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

avrdude

Рис. 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 следует установить одноименный пакет при помощи команды:

sudo apt-get install avrdude

Послее установки пакета программа готова к работе из консоли.

Параметры запуска avrdude

Запустив в консоли программу avrdude без аргументов мы сможем увидеть список доступных опций для использования. Приведенную ниже информацию можно позже использовать как краткую справку по параметрам программы avrdude.

avrdude список параметров команды

Рис. 2. Список параметров программы avrdude.

Рассмотрим все опции программы по порядку:

  • -p <partno> - является обязательной опцией, здесь мы в качестве <partno> указываем краткий псевдоним AVR микроконтроллера;
  • -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>[:format] - комплексная опция для указания производимой с памятью операции (чтение. запись, проверка);
  • -n - запрет на запись в микроконтроллер, используется для отладки avrdude;
  • -V - отключение автоматической проверки записанной информации;
  • -u - отключить режим безопасной (safe mode) проверки и сопоставления ячеек конфигурации (fuse bits) до и по завершению программирования. Данная опция необходима если нужно изменить значения фьюзов (fuse bits), в противном случае avrdude в качестве меры безопасности изменит их значения на те которые были прочитаны перед программированием;
  • -s - запрет вывода запросов в безопасном режиме при работе с фьюзами;
  • -t - переводит avrdude в режим терминала (terminal mode);
  • -E <exitspec>[,<exitspec>] - изменение состояния линий параллельного порта после программирования на указанные в аргументах опции. По умолчанию устанавливаются те состояния линий что были до начала работы;
  • -x <extended_param> - позволяет указать дополнительный специальный параметр для используемого программатора;
  • -y - опция что включает сохранение количества стираний МК в последних 4-х байтах памяти EEPROM;
  • -Y <number> - указанное значение <number> будет сохранено в качестве числа циклов-стираний микроконтроллера в памяти EEPROM;
  • -v - расширенный вывод информации о работе программы (verbose);
  • -q - отключает отображение полоски прогресса при операциях с микроконтроллером. Для еще большого уменьшения отображаемой информации опцию следует указать дважды;
  • -l <logfile> - перенаправление всего вывода для отладки в указанный файл, где <logfile> - полный путь к файлу для сохранения данных;
  • ? - отображение справки.

Модели микроконтроллеров (опция -p <partno>)

Значение параметра Модель МК
uc3a0512 AT32UC3A0512
c128 AT90CAN128
c32 AT90CAN32
c64 AT90CAN64
pwm2 AT90PWM2
pwm2b AT90PWM2B
pwm3 AT90PWM3
pwm316 AT90PWM316
pwm3b AT90PWM3B
1200 AT90S1200
2313 AT90S2313
2333 AT90S2333
2343 AT90S2343
4414 AT90S4414
4433 AT90S4433
4434 AT90S4434
8515 AT90S8515
8535 AT90S8535
usb1286 AT90USB1286
usb1287 AT90USB1287
usb162 AT90USB162
usb646 AT90USB646
usb647 AT90USB647
usb82 AT90USB82
m103 ATmega103
m128 ATmega128
m1280 ATmega1280
m1281 ATmega1281
m1284p ATmega1284P
m1284rfr2 ATmega1284RFR2
m128rfa1 ATmega128RFA1
m128rfr2 ATmega128RFR2
m16 ATmega16
m161 ATmega161
m162 ATmega162
m163 ATmega163
m164p ATmega164P
m168 ATmega168
m168p ATmega168P
m169 ATmega169
m16u2 ATmega16U2
m2560 ATmega2560
m2561 ATmega2561
m2564rfr2 ATmega2564RFR2
m256rfr2 ATmega256RFR2
m32 ATmega32
m324p ATmega324P
m324pa ATmega324PA
m325 ATmega325
m3250 ATmega3250
m328 ATmega328
m328p ATmega328P
m329 ATmega329
m3290 ATmega3290
m3290p ATmega3290P
m329p ATmega329P
m32u2 ATmega32U2
m32u4 ATmega32U4
m406 ATMEGA406
m48 ATmega48
m48p ATmega48P
m64 ATmega64
m640 ATmega640
m644 ATmega644
m644p ATmega644P
m644rfr2 ATmega644RFR2
m645 ATmega645
m6450 ATmega6450
m649 ATmega649
m6490 ATmega6490
m64rfr2 ATmega64RFR2
m8 ATmega8
m8515 ATmega8515
m8535 ATmega8535
m88 ATmega88
m88p ATmega88P
m8u2 ATmega8U2
t10 ATtiny10
t11 ATtiny11
t12 ATtiny12
t13 ATtiny13
t15 ATtiny15
t1634 ATtiny1634
t20 ATtiny20
t2313 ATtiny2313
t24 ATtiny24
t25 ATtiny25
t26 ATtiny26
t261 ATtiny261
t4 ATtiny4
t40 ATtiny40
t4313 ATtiny4313
t43u ATtiny43u
t44 ATtiny44
t45 ATtiny45
t461 ATtiny461
t5 ATtiny5
t84 ATtiny84
t85 ATtiny85
t861 ATtiny861
t88 ATtiny88
t9 ATtiny9
x128a1 ATxmega128A1
x128a1d ATxmega128A1revD
x128a1u ATxmega128A1U
x128a3 ATxmega128A3
x128a3u ATxmega128A3U
x128a4 ATxmega128A4
x128a4u ATxmega128A4U
x128b1 ATxmega128B1
x128b3 ATxmega128B3
x128c3 ATxmega128C3
x128d3 ATxmega128D3
x128d4 ATxmega128D4
x16a4 ATxmega16A4
x16a4u ATxmega16A4U
x16c4 ATxmega16C4
x16d4 ATxmega16D4
x16e5 ATxmega16E5
x192a1 ATxmega192A1
x192a3 ATxmega192A3
x192a3u ATxmega192A3U
x192c3 ATxmega192C3
x192d3 ATxmega192D3
x256a1 ATxmega256A1
x256a3 ATxmega256A3
x256a3b ATxmega256A3B
x256a3bu ATxmega256A3BU
x256a3u ATxmega256A3U
x256c3 ATxmega256C3
x256d3 ATxmega256D3
x32a4 ATxmega32A4
x32a4u ATxmega32A4U
x32c4 ATxmega32C4
x32d4 ATxmega32D4
x32e5 ATxmega32E5
x384c3 ATxmega384C3
x384d3 ATxmega384D3
x64a1 ATxmega64A1
x64a1u ATxmega64A1U
x64a3 ATxmega64A3
x64a3u ATxmega64A3U
x64a4 ATxmega64A4
x64a4u ATxmega64A4U
x64b1 ATxmega64B1
x64b3 ATxmega64B3
x64c3 ATxmega64C3
x64d3 ATxmega64D3
x64d4 ATxmega64D4
x8e5 ATxmega8E5

Типы программаторов (опция -c <programmer>)

Настройки всех программаторов содержатся в конфигурационном файле по умолчанию, полистать его содержимое в ОС Linux можно командой:

less /etc/avrdude.conf

Ниже представлены значения опции и соответствующие данные программаторов:

Опция Программатор
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 кабель

Работа с памятью (опция -U <memtype>:r|w|v:<filename>[: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).

Состояние линий параллельного порта (-E <exitspec>[,<exitspec>])

  • reset - на линии RESET будут низкий уровень, микроконтроллер останется в состоянии сброса;
  • noreset - на линию RESET поступит высокий уровень для запуска МК после программирования;
  • vcc - установка высокого уровня на линии порта VCC , которая может использоваться для питания МК;
  • novcc - подача низкого уровня на линию VCC.

Допускается использование нескольких значений через запятую.

Примеры использования avrdude

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

Выполним тест связки микроконтроллера ATtiny13 с программатором USBASP:

avrdude -p t13 -c usbasp 

Произведем чтение Flash-памяти микроконтроллера ATmega88 в никуда (/dev/null), тест на читаемость флешь-памяти:

avrdude -p m88 -c usbasp -U flash:r:/dev/null:i

Выполним чтение Flash-памяти чипа ATmega8 в файл формата Intel HEX - /tmp/flash_dump.hex, при этом укажем что для программатора нужно использовать именно USB-порт (-P usb) и выводить больше отладочной информации (-v):

avrdude -p m8 -c usbasp -P usb -v -U flash:r:/tmp/flash_dump.hex:i

Прочитаем содержимое EEPROM-памяти микроконтроллера ATtiny85 и сохраним его в файл RAW формата (/tmp/eeprom_dump.raw), используя при этом программатор USBTiny:

avrdude -p t85 -c usbtiny -P usb -v -U eeprom:r:/tmp/eeprom_dump.raw:r

Произведем запись данных их HEX-файла (/tmp/program_m8.hex) во FLASH-память микроконтроллера ATmega8, используя программатор STK-500:

avrdude -c stk500 -p m8 -U flash:w:/tmp/program_m8.hex

Произведем запись данных во FLASH и EEPROM память одной командой, используя как источники данных для записи файлы /tmp/flash_1.hex и /tmp/eeprom_1.hex:

avrdude -c stk500 -p m8 -U flash:w:/tmp/flash_1.hex -U eeprom:w:/tmp/eeprom_1.hex

Выполним чтение фьюзов из микроконтроллера atmega8 и сохраним данные в файлы в шестнадцатеричном формате (hexadecimal, числа начинаются с 0x) :

avrdude -c usbasp -p m8 -U hfuse:r:m8_hfuse.txt:h -U lfuse:r:m8_lfuse.txt:h

Произведем запись фьюзов для микроконтроллера ATmeag32, установлена частота внутреннего RC-генератора на 4MHz (Low=0xc3, High=0x99):

avrdude -c usbasp -p m32 -U lfuse:w:0xc3:m -U hfuse:w:0x99:m

А теперь, запишем значения битов блокировки (Lock Bits) для микроконтроллера ATTiny13, подключенного к программатору USBASP, установим значение байта в 0xFC (11111100):

avrdude -c usbasp -p t13 -U lock:w:0xFC:m

О том, что такое фьюзы и биты блокировки в AVR микроконтроллере я подробно описал в отдельной статье - что такое Fuse и Lock биты и как с ними работать.

Графическая оболочка для avrdude

Для avrdude существует отличная графическая оболочка - AVR8 Burn-O-Mat. Данная программа позволяет читать и записывать данные во Flash и EEPROM память, а также при ее помощи можно удобно и наглядно рассчитать биты фьюзов и после прошить их  в микроконтроллер.

Программа написана на языке Java и работает как на Windows так и на GNU Linux. Автор программы - Torsten Brischalle.

AVR8-Burn-O-Mat

Рис. 3. О программе AVR8-Burn-O-Mat.

avr8-burn-o-mat главное окно

Рис. 4. Главное окно программы AVR8-Burn-O-Mat.

AVR8-Burn-O-Mat fuses set

Рис. 5. Окно установки фьюзов в программе AVR8-Burn-O-Mat.

Официальный сайт программы AVR8 Burn-O-Mat: http://avr8-burn-o-mat.brischalle.de/

Скачать программу версии 2.1.2 можно здесь: avr8_burn-o-mat_2_1_2.zip (1,4Мб).

В предыдущей статье мы разбирали как настроить среду Greany для удобного программирования AVR микроконтроллеров под Linux, на одну из кнопок (например Build) можно назначить команду для запуска программы AVR8 Burn-O-Mat - получится очень удобное решение для установки фьюзов (fuse bits)!

Также для расчета фьюзов есть хороший онлайн-калькулятор, который находится по адресу: http://www.engbedded.com/fusecalc/

Еще один калькулятор, также позволяет выполнять расчет для Lock-битов: http://eleccelerator.com/fusecalc/

Заключение

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

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

Для быстрого чтения документации по avrdude в Linux можно обратиться к родной MAN-системе (мануалы, manuals):

man avrdude

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

Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.

Комментарии к публикации (5):
Сергей #1Сергей
01 Январь 2016 01:52

Спасибо) Очень помогла ваша статья вникнуть в курс дела smile

0
ph0en1x #2ph0en1x
02 Январь 2016 15:47

Очень приятно что мой труд принес вам пользу. С Новым Годом!

+2
Игорь #3Игорь
26 Сентябрь 2016 22:45

Спасибо очень интересно я не специалист в программировании но мне помогло понять роботу в терминале.

+1
Рамиль #4Рамиль
25 Июнь 2017 09:52

Здравствуйте, а как добавить в командную строку защиту от считывания прошивки.

0
ph0en1x #5ph0en1x
25 Июнь 2017 23:48

Здравствуйте. Добавил пример установки Lock-битов с использованием AVRDude в статью.
Для изменения битов блокировки (Lock Bits) при помощи AvrDude нужно использовать опцию записи в память "-U" с указанием типа памяти "lock".
Подробная статья по использованию и программированию Fuse и Lock битов - Что такое Fuse и Lock биты в AVR микроконтроллере, как с ними работать.

0