Наверняка у Вас уже есть макетная плата на микроконтроллере 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:\>avrdude -c qwerty
avrdude: Can't find programmer id "qwerty"
Valid programmers are: c2n232i = serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts dasa3 = serial port banging, reset=!dtr sck=rts mosi=txd miso=cts dasa = serial port banging, reset=rts sck=dtr mosi=txd miso=cts siprog = Lancos SI-Prog (http://www.lancos.com/siprogsch.html) ponyser = design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts 89isp = Atmel at89isp cable [c:\WinAVR\bin\avrdude.conf:791] frank-stk200 = Frank STK200 [c:\WinAVR\bin\avrdude.conf:777] blaster = Altera ByteBlaster [c:\WinAVR\bin\avrdude.conf:764] ere-isp-avr = ERE ISP-AVR (http://www.ere.co.th/download/sch050713.pdf) atisp = AT-ISP V1.1 cable for AVR-SDK1 (http://micro-research.co.th/) dapa = Direct AVR Parallel Access cable [c:\WinAVR\bin\avrdude.conf:733] xil = Xilinx JTAG cable [c:\WinAVR\bin\avrdude.conf:720] futurlec = Futurlec.com programming cable. [c:\WinAVR\bin\avrdude.conf:703] abcmini = ABCmini Board, aka Dick Smith HOTCHIP [c:\WinAVR\bin\avrdude.conf:693] picoweb = Picoweb Programming Cable (http://www.picoweb.net/) sp12 = Steve Bolt's Programmer alf = Nightshade ALF-PgmAVR (http://nightshade.homeip.net/) bascom = Bascom SAMPLE programming cable dt006 = Dontronics DT006 pony-stk200 = Pony Prog STK200 stk200 = STK200 [c:\WinAVR\bin\avrdude.conf:608] bsd = Brian Dean's Programmer, http://www.bsdhome.com/avrdude/ pavr = Jason Kyle's pAVR Serial Programmer dragon_pdi = Atmel AVR Dragon in PDI mode dragon_dw = Atmel AVR Dragon in debugWire mode dragon_hvsp = Atmel AVR Dragon in HVSP mode dragon_pp = Atmel AVR Dragon in PP mode dragon_isp = Atmel AVR Dragon in ISP mode dragon_jtag = Atmel AVR Dragon in JTAG mode jtag2pdi = Atmel JTAG ICE mkII PDI mode jtag2avr32 = Atmel JTAG ICE mkII in AVR32 mode jtagmkII_avr32 = Atmel JTAG ICE mkII in AVR32 mode jtag2dw = Atmel JTAG ICE mkII in debugWire mode jtag2isp = Atmel JTAG ICE mkII in ISP mode [c:\WinAVR\bin\avrdude.conf:502] jtag2 = Atmel JTAG ICE mkII [c:\WinAVR\bin\avrdude.conf:494] jtag2fast = Atmel JTAG ICE mkII [c:\WinAVR\bin\avrdude.conf:486] jtag2slow = Atmel JTAG ICE mkII [c:\WinAVR\bin\avrdude.conf:478] jtagmkII = Atmel JTAG ICE mkII [c:\WinAVR\bin\avrdude.conf:470] jtag1slow = Atmel JTAG ICE (mkI) [c:\WinAVR\bin\avrdude.conf:463] jtag1 = Atmel JTAG ICE (mkI) [c:\WinAVR\bin\avrdude.conf:455] jtagmkI = Atmel JTAG ICE (mkI) [c:\WinAVR\bin\avrdude.conf:447] avr911 = Atmel AppNote AVR911 AVROSP [c:\WinAVR\bin\avrdude.conf:441] avr109 = Atmel AppNote AVR109 Boot Loader [c:\WinAVR\bin\avrdude.conf:435] butterfly = Atmel Butterfly Development Board [c:\WinAVR\bin\avrdude.conf:429] usbtiny = USBtiny simple USB programmer (http://www.ladyada.net/make/usbtinyisp/) usbasp = USBasp (http://www.fischl.de/usbasp/) [c:\WinAVR\bin\avrdude.conf:417] avr910 = Atmel Low Cost Serial Programmer [c:\WinAVR\bin\avrdude.conf:411] stk600hvsp = Atmel STK600 in high-voltage serial programming mode stk600pp = Atmel STK600 in parallel programming mode stk600 = Atmel STK600 [c:\WinAVR\bin\avrdude.conf:393] stk500hvsp = Atmel STK500 V2 in high-voltage serial programming mode stk500pp = Atmel STK500 V2 in parallel programming mode stk500v2 = Atmel STK500 Version 2.x firmware mib510 = Crossbow MIB510 programming board stk500v1 = Atmel STK500 Version 1.x firmware stk500 = Atmel STK500 [c:\WinAVR\bin\avrdude.conf:357] buspirate = The Bus Pirate [c:\WinAVR\bin\avrdude.conf:347] avrisp2 = Atmel AVR ISP mkII [c:\WinAVR\bin\avrdude.conf:341] avrispmkII = Atmel AVR ISP mkII [c:\WinAVR\bin\avrdude.conf:335] avrispv2 = Atmel AVR ISP V2 [c:\WinAVR\bin\avrdude.conf:329] avrisp = Atmel AVR ISP [c:\WinAVR\bin\avrdude.conf:323] arduino = Arduino [c:\WinAVR\bin\avrdude.conf:317]
Найдите в этом списке имя, соответствующее Вашему используемому программатору. Это имя следует подставлять в опцию -c programmer.
[-p partno]
Чтобы получить список программируемых микроконтроллеров AVR, введите команду avrdude -c avrisp (при этом не имеет значения, используете ли Вы реально программатор avrisp) без указания имени микроконтроллера. Не следует запоминать этот длинный список, он используется только для того, чтобы узнать нужное имя для программируемого микроконтроллера, которое следует подставлять в командную строку вместе с опцией -p partno.
C:\>avrdude -c avrisp avrdude: No AVR part has been specified, use "-p Part"
Valid parts are: t10 = ATtiny10 [c:\WinAVR\bin\avrdude.conf:15443] t8 = ATtiny9 [c:\WinAVR\bin\avrdude.conf:15403] t5 = ATtiny5 [c:\WinAVR\bin\avrdude.conf:15363] t4 = ATtiny4 [c:\WinAVR\bin\avrdude.conf:15323] ucr2 = 32UC3A0512 [c:\WinAVR\bin\avrdude.conf:15302] x128a4 = ATXMEGA128A4 [c:\WinAVR\bin\avrdude.conf:15204] x64a4 = ATXMEGA64A4 [c:\WinAVR\bin\avrdude.conf:15107] x32a4 = ATXMEGA32A4 [c:\WinAVR\bin\avrdude.conf:15010] x16a4 = ATXMEGA16A4 [c:\WinAVR\bin\avrdude.conf:14913] x256a3b = ATXMEGA256A3B [c:\WinAVR\bin\avrdude.conf:14816] x256a3 = ATXMEGA256A3 [c:\WinAVR\bin\avrdude.conf:14719] x192a3 = ATXMEGA192A3 [c:\WinAVR\bin\avrdude.conf:14622] x128a3 = ATXMEGA128A3 [c:\WinAVR\bin\avrdude.conf:14525] x64a3 = ATXMEGA64A3 [c:\WinAVR\bin\avrdude.conf:14428] x256a1 = ATXMEGA256A1 [c:\WinAVR\bin\avrdude.conf:14331] x192a1 = ATXMEGA192A1 [c:\WinAVR\bin\avrdude.conf:14234] x128a1d = ATXMEGA128A1REVD [c:\WinAVR\bin\avrdude.conf:14137] x128a1 = ATXMEGA128A1 [c:\WinAVR\bin\avrdude.conf:14040] x64a1 = ATXMEGA64A1 [c:\WinAVR\bin\avrdude.conf:13943] m6450 = ATMEGA6450 [c:\WinAVR\bin\avrdude.conf:13754] m3250 = ATMEGA3250 [c:\WinAVR\bin\avrdude.conf:13565] m645 = ATMEGA645 [c:\WinAVR\bin\avrdude.conf:13376] m325 = ATMEGA325 [c:\WinAVR\bin\avrdude.conf:13187] usb82 = AT90USB82 [c:\WinAVR\bin\avrdude.conf:13007] usb162 = AT90USB162 [c:\WinAVR\bin\avrdude.conf:12823] usb1287 = AT90USB1287 [c:\WinAVR\bin\avrdude.conf:12634] usb1286 = AT90USB1286 [c:\WinAVR\bin\avrdude.conf:12445] usb647 = AT90USB647 [c:\WinAVR\bin\avrdude.conf:12257] usb646 = AT90USB646 [c:\WinAVR\bin\avrdude.conf:12068] m32u4 = ATmega32U4 [c:\WinAVR\bin\avrdude.conf:11880] t84 = ATtiny84 [c:\WinAVR\bin\avrdude.conf:11697] t44 = ATtiny44 [c:\WinAVR\bin\avrdude.conf:11515] t24 = ATtiny24 [c:\WinAVR\bin\avrdude.conf:11333] m128rfa1 = ATMEGA128RFA1 [c:\WinAVR\bin\avrdude.conf:11145] m2561 = ATMEGA2561 [c:\WinAVR\bin\avrdude.conf:10951] m2560 = ATMEGA2560 [c:\WinAVR\bin\avrdude.conf:10758] m1281 = ATMEGA1281 [c:\WinAVR\bin\avrdude.conf:10570] m1280 = ATMEGA1280 [c:\WinAVR\bin\avrdude.conf:10381] m640 = ATMEGA640 [c:\WinAVR\bin\avrdude.conf:10193] t85 = ATtiny85 [c:\WinAVR\bin\avrdude.conf:10012] t45 = ATtiny45 [c:\WinAVR\bin\avrdude.conf:9833] t25 = ATtiny25 [c:\WinAVR\bin\avrdude.conf:9653] pwm3b = AT90PWM3B [c:\WinAVR\bin\avrdude.conf:9472] pwm2b = AT90PWM2B [c:\WinAVR\bin\avrdude.conf:9289] pwm3 = AT90PWM3 [c:\WinAVR\bin\avrdude.conf:9106] pwm2 = AT90PWM2 [c:\WinAVR\bin\avrdude.conf:8922] t2313 = ATtiny2313 [c:\WinAVR\bin\avrdude.conf:8735] m328p = ATMEGA328P [c:\WinAVR\bin\avrdude.conf:8547] t88 = attiny88 [c:\WinAVR\bin\avrdude.conf:8361] m168 = ATMEGA168 [c:\WinAVR\bin\avrdude.conf:8173] m88 = ATMEGA88 [c:\WinAVR\bin\avrdude.conf:7987] m48 = ATMEGA48 [c:\WinAVR\bin\avrdude.conf:7800] t861 = ATTINY861 [c:\WinAVR\bin\avrdude.conf:7612] t461 = ATTINY461 [c:\WinAVR\bin\avrdude.conf:7423] t261 = ATTINY261 [c:\WinAVR\bin\avrdude.conf:7234] t26 = ATTINY26 [c:\WinAVR\bin\avrdude.conf:7077] m8535 = ATMEGA8535 [c:\WinAVR\bin\avrdude.conf:6919] m8515 = ATMEGA8515 [c:\WinAVR\bin\avrdude.conf:6761] m8 = ATMEGA8 [c:\WinAVR\bin\avrdude.conf:6600] m161 = ATMEGA161 [c:\WinAVR\bin\avrdude.conf:6460] m32 = ATMEGA32 [c:\WinAVR\bin\avrdude.conf:6285] m6490 = ATMEGA6490 [c:\WinAVR\bin\avrdude.conf:6092] m649 = ATMEGA649 [c:\WinAVR\bin\avrdude.conf:5907] m3290p = ATMEGA3290P [c:\WinAVR\bin\avrdude.conf:5724] m3290 = ATMEGA3290 [c:\WinAVR\bin\avrdude.conf:5539] m329p = ATMEGA329P [c:\WinAVR\bin\avrdude.conf:5354] m329 = ATMEGA329 [c:\WinAVR\bin\avrdude.conf:5170] m169 = ATMEGA169 [c:\WinAVR\bin\avrdude.conf:4990] m163 = ATMEGA163 [c:\WinAVR\bin\avrdude.conf:4832] m162 = ATMEGA162 [c:\WinAVR\bin\avrdude.conf:4636] m1284p = ATMEGA1284P [c:\WinAVR\bin\avrdude.conf:4446] m644p = ATMEGA644P [c:\WinAVR\bin\avrdude.conf:4254] m644 = ATMEGA644 [c:\WinAVR\bin\avrdude.conf:4064] m324p = ATMEGA324P [c:\WinAVR\bin\avrdude.conf:3873] m164p = ATMEGA164P [c:\WinAVR\bin\avrdude.conf:3682] m16 = ATMEGA16 [c:\WinAVR\bin\avrdude.conf:3504] c32 = AT90CAN32 [c:\WinAVR\bin\avrdude.conf:3313] c64 = AT90CAN64 [c:\WinAVR\bin\avrdude.conf:3123] c128 = AT90CAN128 [c:\WinAVR\bin\avrdude.conf:2933] m128 = ATMEGA128 [c:\WinAVR\bin\avrdude.conf:2755] m64 = ATMEGA64 [c:\WinAVR\bin\avrdude.conf:2574] m103 = ATMEGA103 [c:\WinAVR\bin\avrdude.conf:2434] 8535 = AT90S8535 [c:\WinAVR\bin\avrdude.conf:2313] 8515 = AT90S8515 [c:\WinAVR\bin\avrdude.conf:2199] 4434 = AT90S4434 [c:\WinAVR\bin\avrdude.conf:2116] 4433 = AT90S4433 [c:\WinAVR\bin\avrdude.conf:1992] 2343 = AT90S2343 [c:\WinAVR\bin\avrdude.conf:1868] 2333 = AT90S2333 [c:\WinAVR\bin\avrdude.conf:1740] 2313 = AT90S2313 [c:\WinAVR\bin\avrdude.conf:1627] 4414 = AT90S4414 [c:\WinAVR\bin\avrdude.conf:1514] 1200 = AT90S1200 [c:\WinAVR\bin\avrdude.conf:1399] t15 = ATtiny15 [c:\WinAVR\bin\avrdude.conf:1266] t13 = ATtiny13 [c:\WinAVR\bin\avrdude.conf:1093] t12 = ATtiny12 [c:\WinAVR\bin\avrdude.conf:960] t11 = ATtiny11 [c:\WinAVR\bin\avrdude.conf:896]
В этом списке указаны псевдонимы всех чипов микроконтроллеров, о которых знает 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 архива).
//Подключение заголовков, в которых определены порты микроконтроллера,
// и имя подпрограммы задержки:
#include < avr/io.h >
#include < util/delay.h >
//Примечание: чтобы подпрограммы задержки давали корректные значения,
// нужно правильно установить значение макропеременной F_CPU
// в соответствие с используемой тактовой частотой микроконтроллера.
//Например так:
#define F_CPU 16000000UL
//Объявление имени LED для ножки порта, куда подключен светодиод.
//На разных макетных платах светодиод подключен к разным ножкам,
// поэтому раскомментируйте одно из определений ниже в зависимости
// от используемой макетной платы.
//#define LED PB0 //Для платы AVR-USB-MEGA16.
#define LED PB5 //Для плат Arduino Uno и metaboard.
//#define LED PB7 //Для платы Arduino MEGA 2560.
// Основная функция, где находится главный цикл программы.
void main (void) { //До начала главного цикла всегда делаются предварительные настройки. DDRB = (1 << LED); // настройка порта LED как выхода //Главный бесконечный цикл программы. while(1) { PORTB |= (1 << LED); // зажечь светодиод _delay_ms (500); // задержка на 500 мс PORTB &= ~(1 << LED); // погасить светодиод _delay_ms (500); // задержка на 500 мс } }
Запишите файл прошивки (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:i
Чтобы убедиться, что записанная программа работает и светодиод мигает, подключите его через резистор 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:i
После программирования будет мигать светодиод 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.
Добавил: ,Дата: 26 Ноя 2020
Программа AVRDUDE_PROG — GUI avrdude, является обновлённой версией USBASP_AVRDUDE_PROG.
Предназначена для программирования МК AVR. Совместима с Windows2000, Windows ХР, Windows Vista, Windows7(Seven). Добавлены распространённые программаторы и дополнительный функционал. Интуитивно понятный интерфейс. Возможность выбора инверсных (PonyProg) и прямых (UniProf) Fuses битов, самостоятельное добавление контроллеров и программаторов поддерживаемых AVRDUDE.
Возможности программы
Настройки оболочки «AVRDUDE_PROG» реализованы в «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» всё понятно.
Поддерживаемые МК
По умолчанию поддерживаемые МК (список МК постоянно расширяется):
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» на рабочий стол. Установка завершена. Можно работать.
Тип разработки: собственная инициатива.
Техническое задание: самостоятельно + интернет.
Реализовано: Borlad Delphi 7.
Состояние: реализовано.
Статус программы: бесплатная
ОС: Windows NT/2000/XP/VISTA/WINDOWS 7
Интерфейс: русский, english
Разработчик: yourdevice
Версия: 3.3 (24.02.2014)
Размер файла: 690КБ
Сайт разработчика:yourdevice.net
ПОДЕЛИТЕСЬ СО СВОИМИ ДРУЗЬЯМИ:
П О П У Л Я Р Н О Е:
- Обзор модулей Arduino
- DipTrace — программа для рисования схем и печатных плат
- WinDjView-1.0.3-Setup — бесплатная программа для просмотра файлов с расширением — DJVU, DJV.
Arduino Mini, Nano, Uno и Mega.
Общие сведения, анализ и программирование
Arduino — это интересный электронный конструктор, с помощью которого можно создавать различные электронные устройства как для начинающих, так и профессионалов. Модули пользуются огромной популярностью благодаря удобству построения схем и простоте языка программирования. Модуль программируется через обычный USB разъём, без использования специальных программаторов. Ранее мы рассматривали несколько простых схем на основе Ардуино.
Подробнее…
Простые схемы и платы можно нарисовать в любом редакторе, а печатную плату, например, прочертить резаком. Но для разработок посложнее схем и печатных плат существуют разные специально для этих целей программы.
Об одной из них сегодня и пойдёт речь. DipTrace — это современная система сквозного проектирования, которая содержит набор программ и библиотек для работ со схемотехникой, разработкой печатных плат с ручной и автотрассировкой, 3-D моделирование и многое другое.
Подробнее…
Описание: Чем открыть (прочитать) DjVu или DjV -файл?
WinDjView-1.0.3 — программа, предназначенная для чтения файлов с расширением — DJVU, DJV. WinDjView-1.0.3 — это быстрая и компактная программа для просмотра файлов формата DjVu под Windows с вкладками для документов, непрерывной прокруткой страниц и расширенными возможности печати. Она основана на свободно распространяемой библиотеке DjVuLibre. Формат DjVu позволяет сохранять документы и картинки с высоким качеством в файлы малого размера. Так же в ней имеются некоторые другие возможности: Подробнее…
Популярность: 4 156 просм.
Популярнейшая программа AVRDUDE_PROG 3.3 предназначена для программирования микроконтроллеров AVR ATmega и ATtiny:
1. Возможность самостоятельного добавления программаторов, настройки скорости программирования и т.п;
2. Возможность самостоятельного добавления МК;
3. Редактирование и настройка отображения Fuses битов;
4. Выбор инверсных или прямых Fuses битов;
5. Окна вывода значений Fuses битов в HEX формате;
6. Сохранение настроек программирования при закрытии программы, т.е. при последующем открытии все настройки восстановятся.
В прошлой статье я рассказал о простом (но очень хорошем) программаторе для прошивки микроконтроллеров AVR ATmega и ATtiny — USBASP AVR программатор. В той же статье я указал какие программы поддерживают данный программатор. Наиболее лучшей из них, на мой взгляд, является программа AVRDUDE_PROG автором которой является Сергей Боднар. О ней мы сегодня и поговорим.
Последняя версия программы AVRDUDE_PROG — 3.3, из программы всегда можно попасть на сайт разработчика и скачать новые версии.
Программа очень проста в использовании, имеет приятный интуитивно понятный интерфейс на русском языке, поддерживает очень много различных программаторов и практически все микроконтроллеры ATmega и ATtiny. Немаловажно и то, что в программу можно самому вносить изменения — добавлять программаторы, микроконтроллеры, изменять некоторые настройки (все подробно расписано на сайте разработчика).
Программа не требует установки на компьютер, необходимо только разархивировать скачанный файл и можно сразу приступать к работе, поддерживаются все разновидности Windows — от ХР до 10.
Окно запущенной программы AVRDUDE_PROG:
Что есть что:
1:
— окно выбора типа микроконтроллера
— кнопка «Стереть все» — очищает все внутренности микроконтроллера
2:
— чтение калибровочных ячеек микроконтроллера
В данном примере показаны четыре калибровочные ячейки микроконтроллера ATmega8 для внутреннего RC генератора:
ВВ — для частоты 1 МГц (частота по умолчанию)
BD — для частоты 2 МГц
В2 — для частоты 4 МГц
В2 — для частоты 8 МГц
При тактировании микроконтроллера ATmega8 частотой 1 МГц от внутреннего RC генератора (по умолчанию) содержимое первой калибровочной ячейки автоматически учитывается микроконтроллером для подстройки внутреннего генератора. При других частотах — содержимое соответствующей калибровочной ячейки необходимо вручную вводить в регистр микроконтроллера для получения более стабильной частоты (если такое нужно). К примеру, в конструкции «Трехканальный термостат, термоморегулятор, таймер…», которая работает с тактовой частотой 8 МГц от встроенного генератора с внутренней RC цепочкой, требуется перед прошивкой ЕЕPROM памяти записать в определенную ячейку HEX файла значение калибровочной ячейки для частоты 8 МГц.
3:
— выбор HEX файла для прошивки Flash памяти микроконтроллера, сверка записанного файла с оригиналом, чтение данных из памяти
4:
— выбор HEX или EEP файла для прошивки EEPROM памяти микроконтроллера, сверка и чтение
5:
— выбор программатора (по умолчанию — USBASP)
Если вы будете пользоваться программой скачанной с сайта разработчика то там, по умолчанию (первым в списке), будет идти «USBASP», у меня на картинке 4 разновидности USBASP программатора:
— Usbasp_1M
— Usbasp_4M
— Usbasp_8M
— Usbasp-32кГц
Дело в том, что программатор USBASP позволяет записывать файлы прошивки с двумя скоростями:
— для МК с тактовой частотой 1,5 МГц и выше (без перемычки на J3) — скорость записи 375 кГц
— для МК с тактовой частотой менее 1,5 МГц (с перемычкой на J3) — скорость записи 5 кГц
Для нормальной записи прошивки в МК требуется скорость в 4 раза меньше, чем установленная тактовая частота.
Для прошивки нового МК, у которого по умолчанию тактовая частота 1 МГц, необходимо устанавливать в программаторе перемычку на разъем J3, а сама скорость — 5 кГц, в некоторых случаях начинает нервировать.
Для того, чтобы не портить нервы, не дергаться с перемычкой, я программно установил 4 варианта скорости записи, которые выбираются в зависимости от текущей тактовой частоты МК:
— Usbasp_1M — скорость 187,5 кгЦ, для частот 1-4 МГц
— Usbasp_4M — скорость 375 кГц, для частот 4-8 МГц
— Usbasp_8M — скорость 750 кГц, для частот 8 и более МГц
— Usbasp-32кГц — скорость 4 кГц, для часового кварца
Все эти установки прописаны в самом начале файла «programm.ini» где скорость записи зависит от ключа «-В» и числа после него:
6:
— выбор отображения FUSE битов — прямой (как в UniProf и даташитах) и инверсный (как в PonyProg)
7:
— окно вывода служебной информации о выполняемых и выполненных операциях
Внешний вид окна «FUSES» программы AVRDUDE_PROG:
Тут все просто — расставляем в нужном виде галочки или убираем их и программируем FUSE биты. Если что-то намудрили — нажатие кнопки «По умолчанию» приведет установки FUSE битов в значения «по умолчанию» (сами FUSE биты в МК не изменятся!). Очень внимательно устанавливайте FUSE биты — ошибка может привести к отказу микроконтроллера.
Хочу обратить ваше внимание на самую распространенную ошибку при установки FUSE битов. В большинстве случаев мы изменяем только биты ответственные за выбор источника тактирования и частоту тактирования, к примеру для ATmega8 это: CKSEL0-CKSEL3. По умолчанию у ATMEGA8 тактовая частота 1 МГц от внутреннего генератора — сброшен бит CKSEL0 (стоит галочка). Нам, допустим, нужно установить тактовую частоту 8 МГц от внутреннего генератора — сбросить бит CKSEL2 (поставить галочку), что мы и делаем. Но при этом ЗАБЫВАЕМ УСТАНОВИТЬ БИТ CKSEL0 (убрать галочку)!. В результате, программируя FUSE биты, мы получаем совершенно иной результат — программа не работает, а МК не реагирует на программатор. Забыв сбросить бит CKSEL0 мы получаем другой источник тактирования МК — внешний RC. Отчаиваться не надо, главное разобраться в том, что вы получили в результате. В нашем примере — внешний RC, смотрим даташит, подсоединяем к соответствующим входам МК сопротивление и конденсатор (по схеме из даташита и с нужными номиналами) и восстанавливаем контроль над МК.
Внешний вид окна «Автоматическое программирование» AVRDUDE_PROG:
Здесь можно задать первоначальные настройки для разных случаев использования программы.
Как видите — программа AVRDUDE_PROG проста и понятна в использовании, за что и скажем спасибо Сергею Боднару!
Скачать программу AVRDUDE_PROG 3.3 (1,3 МиБ, 99 322 hits)
Скачать с ЯндексДиска
Программирование микроконтроллеров AVR фирмы Atmel
1. Микроконтроллеры — первый шаг
2. Системы счисления: десятичная, двоичная и шестнадцатиричная
3. Логические операции, логические выражения, логические элементы
4. Битовые операции
5. Прямой, обратный и дополнительный коды двоичного числа
6. USBASP программатор для микроконтроллеров AVR — идеальное решение для начинающих, и не только
(31 голосов, оценка: 4,84 из 5)
Загрузка…
Программа AVRDUDE_PROG
Программа AVRDUDE_PROG: программирование микроконтроллеров AVR ATmega, ATtiny
Published by: Мир микроконтроллеров
Date Published: 09/17/2016
Прежде чем перейти к тестированию программатора вместе с микроконтроллером (МК) давайте сначала разберемся с возможностями программы avrdude, которая очень часто является основой при прошивке AVR кристаллов как в Linux, так и в других операционных системах. Приведен список всех параметров запуска программы avrdude, рассмотрим графическую оболочку, а также примеры использования avrdude.
Содержание:
- Программа AVRDude
- Параметры запуска avrdude
- Модели микроконтроллеров (опция -p <partno>)
- Типы программаторов (опция -c <programmer>)
- Работа с памятью (опция -U <memtype>:r|w|v:<filename>[:format])
- Состояние линий параллельного порта (-E <exitspec>[,<exitspec>])
- Примеры использования 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 следует установить одноименный пакет при помощи команды:
sudo apt-get install 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.
Рис. 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/
Заключение
Как видите у программы avrdude очень мощный арсенал возможностей по работе с AVR микроконтроллерами. Для консольной версии avrdude есть разнообразные графические надстройки и оболочки, но все же зная как использовать данную программу в консоли вы всегда будете держать процесс прошивки МК под полным контролем, а также легко производить автоматизацию всех необходимых действий.
Не стоит забывать что с течением времени появляются новые микроконтроллеры от Atmel, программаторы, а также программа avrdude в своем развитии не стоит на месте, желательно время-от-времени сверяться с официальной документацией по программе, следить за изменениями в мире AVR микроконтроллеров.
Для быстрого чтения документации по avrdude в Linux можно обратиться к родной MAN-системе (мануалы, manuals):
man avrdude
В следующей статье мы разберемся с настройкой avrdude для работы с микроконтроллерами на Linux, решим проблему ограничения прав запуска от обычного пользователя. Проведем первые испытания программатора в рабочей обстановке и на реальном микроконтроллере.
Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.
Чтобы перенести нашу программу с компьютера в микроконтроллер нам понадобится программатор USBasp и программа AVRDUDE. Сегодня существует широкий выбор программаторов, предназначенных для программирования микроконтроллеров AVR. Среди них можно найти много самодельных, который даже трудно назвать программаторами, поскольку они с помощью всего лишь нескольких резисторов напрямую подключаются к COM порту. Однако современные компьютеры и ноутбуки уже практически не оборудываются COM портами, поэтому одним из основных критериев при выборе программатора является возможность подключения его к USB порту. Наиболее дешевый, простой и очень распространенный – это программатор USBasp. Его можно приобрести практически в любом радиомагазине по доступной цене. Стоимость его в китайских интернет магазина находится в пределах от 1,5 $ до 3 $.
Программатор USBasp
Связь компьютера с микроконтроллером осуществляется посредством программатора USBasp через USB порт, а данные передаются по интерфейсу SPI – Serial Peripheral Interface (последовательный периферийный интерфейс). Для связи МК с программатором задействуются специальные выводы: MOSI, MISO, SCK, RESET, VCC, GND. Хотя SPI предполагает использование всего трех выводов MOSI, MISO и SCK, но мы будем задействовать все шесть выводов.
При обмене данными по интерфейсу SPI микроконтроллер может одновременно либо принимать (вывод MISO) либо передавать данные (вывод MOSI). Установка режима приема или передачи данных осуществляется путем подачи определенного импульса на вывод SCK.
Разъем программатора, как правило, имеет 10 пинов и подключается к микроконтроллеру с помощью 10 проводного шлейфа. Однако удобней пользоваться шлейфами, которые имеют переходник на 6 пин, так как в таком случае все пины заняты. У десяти пинового разъема одни пин остается не занятым, а четыре пина подключены к общему проводу (GND).
Для того, чтобы компьютер определил программатор необходимо установить драйвер USBasp.
Фото подсоединенного программатора к микроконтроллеру ATmega8 приведено ниже.
Единственный недостаток или, правильнее сказать, мелкое неудобство данного программатора заключается в том, что он не поддерживается (без различных ухищрений) Atmel Studio, поэтому приходится пользоваться сторонней программой. Наиболее зарекомендовавшей себя является AVRDUDE.
Настройка AVRDUDE
Теперь нам осталось выполнить финальный шаг. Запускаем программу AVRDUDE. По умолчанию открывается вкладка Program. В нижней части окна в меню Настройки выбираем тип программатора usbasp. Далее в категории Микроконтроллер выбираем наш микроконтроллер ATmega8. Ниже, в категории Flash кликаем по значку троеточия и в открывшемся меню указываем путь к скомпилированному файлу с расширением hex. Путь к файлу и сам файл будут теми же, что мы ранее задавали в Proteus.
Чтобы убедится в том, что программатор определен операционной системой (драйвер программатора корректно установлен) и правильно подключен к микроконтроллеру, кликаем по кнопке Чтение. Если ошибок нет, то появится окно с записью “Калибровочные ячейки генератора считаны!” И в верхнем окошке отобразится шестнадцатеричное число. У каждого МК это число индивидуальное.
Прежде, чем записать новую программу рекомендуется очистить память микроконтроллера. Это можно сделать, кликнув по кнопке Стереть все. В результате появится окно с сообщением о том, что кристалл чист.
Теперь кликаем по кнопке Программировать в категории Flash. При успешной записи программы в МК появляется окно с записью, приведенной ниже.
Результат записанной, или, как еще говорят, прошитой программы – это засветившийся светодиод, подключенный к выводу PC0 нашего микроконтроллера.
Первая наша программа очень проста, а частота работы микроконтроллера оставлена по умолчанию и для ATmega8 равна 1 МГц. В случае изменения частоты или подключения внешнего кварцевого резонатора, необходимо внести некоторые изменения во вкладке Fuses, путем установки галочек в соответственные чекбоксы CKSEL0… CKSEL3.
Подробно настройки данной вкладки мы рассмотрим в статье Fuses (биты настройки или биты защиты) микроконтроллера.
Скачать USBasp драйвер
Скачать AVRDUDE