Прежде чем перейти к тестированию программатора вместе с микроконтроллером (МК) давайте сначала разберемся с возможностями программы avrdude, которая очень часто является основой при прошивке AVR кристаллов как в Linux, так и в других операционных системах. Приведен список всех параметров запуска программы avrdude, рассмотрим графическую оболочку, а также примеры использования avrdude.
В конце статьи – настройка среды и работа с программаторами для AVR микроконтроллеров в LinuxПриведены особенности настройки и использования USBAsp, COM и LPT программаторов при работе с программой avrdude в операционной системе Linux. Попробуем считать и записать прошивку микроконтроллера (МК) используя программатор USBAsp
Содержание:
– Программа AVRDude
– Параметры запуска avrdude
– Модели микроконтроллеров (опция -p
– Типы программаторов (опция -c
– Работа с памятью (опция -U
– Состояние линий параллельного порта (-E
– Примеры использования avrdude
– Графическая оболочка для avrdude
Программа 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 следует установить одноименный пакет при помощи команды:
urpmi avrdude
Послее установки пакета программа готова к работе из консоли.
Параметры запуска avrdude
Запустив в консоли программу avrdude без аргументов мы сможем увидеть список доступных опций для использования. Приведенную ниже информацию можно позже использовать как краткую справку по параметрам программы avrdude.
Рис. 2. Список параметров программы avrdude.
Рассмотрим все опции программы по порядку:
-p
-b
-B
-C
-c
-D – опция запрещает автоматическое стирание Flash-памяти. Автоматическое стирание не используется в микроконтроллерах семейства ATxmega;
-i
-F – опция для отключения проверки сигнатуры микроконтроллера. По умолчанию перед программированием avrdude проверяет сигнатуру микроконтроллера, которая в некоторых случаях может быть повреждена, при этом микроконтроллер может продолжать нормально функционировать;
-e – стирает содержимое FLASH и EEPROM памяти (заполнение значениями 0xFF), очищаются fuse-bits (биты защиты). Исключением являются микроконтроллеры семейства ATxmega в которых используется постраничная запись;
-O – опция для калибровки RC-генератора в соответствии с примечанием AVR053 от Atmel. Поддерживается только на программаторах STK500v2, AVRISP mkII, и JTAG ICE mkII. Результат будет сохранен в EEPROM памяти в ячейке с адресом 0;
-U
-n – запрет на запись в микроконтроллер, используется для отладки avrdude;
-V – отключение автоматической проверки записанной информации;
-u – отключить режим безопасной (safe mode) проверки и сопоставления ячеек конфигурации (fuse bits) до и по завершению программирования. Данная опция необходима если нужно изменить значения фьюзов (fuse bits), в противном случае avrdude в качестве меры безопасности изменит их значения на те которые были прочитаны перед программированием;
-s – запрет вывода запросов в безопасном режиме при работе с фьюзами;
-t – переводит avrdude в режим терминала (terminal mode);
-E
-x
-y – опция что включает сохранение количества стираний МК в последних 4-х байтах памяти EEPROM;
-Y
-v – расширенный вывод информации о работе программы (verbose);
-q – отключает отображение полоски прогресса при операциях с микроконтроллером. Для еще большого уменьшения отображаемой информации опцию следует указать дважды;
-l
? – отображение справки.
Модели микроконтроллеров (опция -p
Значение параметра Модель МК
Значение параметра | Модель МК |
---|---|
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
Настройки всех программаторов содержатся в конфигурационном файле по умолчанию, полистать его содержимое в ОС 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
В качестве
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 – прочитать указанную область памяти и записать в указанный файл
w – прочитать данные из файла
v – прочитать данные из указанного файла
В поле
i – Intel HEX;
s – Motorola S-record;
r – raw binary (RAW формат);
e – ELF (Executable and Linkable Format);
m – занчения байтов для записи указываются непосредственно в командной строке в поле
a – авто-определение формата (auto detect);
d – десятичный формат (decimal), числа разделяются запятыми;
h – шестнадцатеричный формат (hexadecimal), числа начинаются с 0x;
o – восьмеричный формат (octal), перед числами ставится 0;
b – двоичный формат (binary), перед числами ставится 0b.
По умолчанию используется авто-определение формата (auto detect).
Состояние линий параллельного порта (-E
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.
Рис. 3. О программе AVR8-Burn-O-Mat.
Рис. 4. Главное окно программы AVR8-Burn-O-Mat.
Рис. 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/