Avrdude prog инструкция по применению

Наверняка у Вас уже есть макетная плата на микроконтроллере 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.

AVRDUDE run Windows cmd

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

AVRDUDE run Mac Terminal

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

AVRDUDE common options

[Описание опций 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 (Порты).

AVRDUDE Windows Device Manager Ports

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

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

AVRDUDE Mac find adaptor

/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, это активирует работу загрузчика:

image

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

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

Программируем МК AVR. Бесплатная программа AVRDUDE_PROGПрограмма 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» всё понятно.

Программируем МК AVR. Бесплатная программа AVRDUDE_PROG

Поддерживаемые МК

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

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

Поддерживаемые программаторы

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

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

Основные отличия

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

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

Программируем МК AVR. Бесплатная программа AVRDUDE_PROG

Установка

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

Тип разработки: собственная инициатива.
Техническое задание: самостоятельно + интернет.
Реализовано: Borlad Delphi 7.
Состояние: реализовано.

Программируем МК AVR. Бесплатная программа AVRDUDE_PROG

Статус программы: бесплатная

ОС: Windows NT/2000/XP/VISTA/WINDOWS 7

Интерфейс: русский, english

Разработчик: yourdevice

Версия: 3.3 (24.02.2014)

Размер файла: 690КБ

Сайт разработчика:yourdevice.net

ПОДЕЛИТЕСЬ СО СВОИМИ ДРУЗЬЯМИ:

П О П У Л Я Р Н О Е:

  • Обзор модулей Arduino
  • Arduino Mini, Nano, Uno и Mega.

    Общие сведения, анализ и программирование

    Arduino Mini, Nano, Uno и Mega. Общие сведения, анализ и программированиеArduino — это интересный электронный конструктор, с помощью которого можно создавать различные электронные устройства как для начинающих, так и профессионалов. Модули пользуются огромной популярностью благодаря удобству построения схем и простоте языка программирования. Модуль программируется через обычный USB разъём, без использования специальных программаторов. Ранее мы рассматривали несколько простых схем на основе Ардуино.

    Подробнее…

  • DipTrace — программа для рисования схем и печатных плат
  • DipTrace - программа для рисования схем и печатных платПростые схемы и платы можно нарисовать в любом редакторе, а печатную плату, например, прочертить резаком. Но для разработок посложнее схем и печатных плат существуют разные специально для этих целей программы.

    Об одной из них сегодня и пойдёт речь.  DipTrace — это современная система сквозного проектирования, которая содержит набор программ и библиотек для работ со схемотехникой, разработкой печатных плат с ручной и автотрассировкой, 3-D моделирование и многое другое.

    Подробнее…

  • WinDjView-1.0.3-Setup — бесплатная программа для просмотра файлов с расширением — DJVU, DJV.
  • WinDjView-1.0.3-Setup - программа для просмотра файлов с расширением - DJVU, DJV.
    Описание: Чем открыть (прочитать) 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. Сохранение настроек программирования при закрытии программы, т.е. при последующем открытии все настройки восстановятся.

programma-avrdude_prog-3-3


В прошлой статье я рассказал о простом (но очень хорошем) программаторе для прошивки микроконтроллеров AVR ATmega и ATtiny — USBASP AVR программатор. В той же статье я указал какие программы поддерживают данный программатор. Наиболее лучшей из них, на мой взгляд, является программа AVRDUDE_PROG автором которой является Сергей Боднар. О ней мы сегодня и поговорим.
Последняя версия программы AVRDUDE_PROG — 3.3, из программы всегда можно попасть на сайт разработчика и скачать новые версии.
Программа очень проста в использовании, имеет приятный интуитивно понятный интерфейс на русском языке, поддерживает очень много различных программаторов и практически все микроконтроллеры ATmega и ATtiny. Немаловажно и то, что в программу можно самому вносить изменения — добавлять программаторы, микроконтроллеры, изменять некоторые настройки (все подробно расписано на сайте разработчика).
Программа не требует установки на компьютер, необходимо только разархивировать скачанный файл и можно сразу приступать к работе, поддерживаются все разновидности Windows — от ХР до 10.

Окно запущенной программы AVRDUDE_PROG:

vneshniy-vid-okna-avrdude_prog-3-3

Что есть что:
1:
— окно выбора типа микроконтроллера
— кнопка «Стереть все» — очищает все внутренности микроконтроллера

okno-vyibora-mikrokontrollera
2:
— чтение калибровочных ячеек микроконтроллера

chtenie-kalibrovochnyih-yacheek
В данном примере показаны четыре калибровочные ячейки микроконтроллера 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)

vyibor-programmatoraЕсли вы будете пользоваться программой скачанной с сайта разработчика то там, по умолчанию (первым в списке), будет идти «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» где скорость записи зависит от ключа «-В» и числа после него:

fayl-rogramm

znacheniya-klyucha-v-dlya-skorosti-programmirovaniya

6:
— выбор отображения FUSE битов — прямой (как в UniProf и даташитах) и инверсный (как в PonyProg)
7:
— окно вывода служебной информации о выполняемых и выполненных операциях


Внешний вид окна «FUSES» программы AVRDUDE_PROG:

okno-ustanovki-fuse

Тут все просто — расставляем в нужном виде галочки или убираем их и программируем FUSE биты. Если что-то намудрили — нажатие кнопки «По умолчанию» приведет установки FUSE битов в значения «по умолчанию» (сами FUSE биты в МК не изменятся!). Очень внимательно устанавливайте FUSE биты — ошибка может привести к отказу микроконтроллера.

Хочу обратить ваше внимание на самую распространенную ошибку при установки FUSE битов. В большинстве случаев мы изменяем только биты ответственные за выбор источника тактирования и частоту тактирования, к примеру для ATmega8 это: CKSEL0-CKSEL3. По умолчанию у ATMEGA8 тактовая частота 1 МГц от внутреннего генератора — сброшен бит CKSEL0 (стоит галочка). Нам, допустим, нужно установить тактовую частоту 8 МГц от внутреннего генератора — сбросить бит CKSEL2 (поставить галочку), что мы и делаем. Но при этом ЗАБЫВАЕМ УСТАНОВИТЬ БИТ CKSEL0 (убрать галочку)!. В результате, программируя FUSE биты, мы получаем совершенно иной результат — программа не работает, а МК не реагирует на программатор. Забыв сбросить бит CKSEL0 мы получаем другой источник тактирования МК — внешний RC. Отчаиваться не надо, главное разобраться в том, что вы получили в результате. В нашем примере — внешний RC, смотрим даташит, подсоединяем к соответствующим входам МК сопротивление и конденсатор (по схеме из даташита и с нужными номиналами) и восстанавливаем контроль над МК.


Внешний вид окна «Автоматическое программирование» AVRDUDE_PROG:

vneshniy-vid-okna-avtomaticheskoe-programmirovanie

Здесь можно задать первоначальные настройки для разных случаев использования программы.

Как видите — программа 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.

Содержание:

  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.

Программирование микроконтроллеров Курсы

Чтобы перенести нашу программу с компьютера в микроконтроллер нам понадобится программатор USBasp и программа AVRDUDE. Сегодня существует широкий выбор программаторов, предназначенных для программирования микроконтроллеров AVR. Среди них можно найти много самодельных, который даже трудно назвать программаторами, поскольку они с помощью всего лишь нескольких резисторов напрямую подключаются к COM порту. Однако современные компьютеры и ноутбуки уже практически не оборудываются COM портами, поэтому одним из основных критериев при выборе программатора является возможность подключения его к USB порту. Наиболее дешевый, простой и очень распространенный – это программатор USBasp. Его можно приобрести практически в любом радиомагазине по доступной цене. Стоимость его в китайских интернет магазина находится в пределах от 1,5 $ до 3 $.

Программатор USBasp

Связь компьютера с микроконтроллером осуществляется посредством программатора USBasp через USB порт, а данные передаются по интерфейсу SPISerial Peripheral Interface (последовательный периферийный интерфейс). Для связи МК с программатором задействуются специальные выводы: MOSI, MISO, SCK, RESET, VCC, GND. Хотя SPI предполагает использование всего трех выводов MOSI, MISO и SCK, но мы будем задействовать все шесть выводов.

Интерфейс SPI

При обмене данными по интерфейсу SPI микроконтроллер может одновременно либо принимать (вывод MISO) либо передавать данные (вывод MOSI). Установка режима приема или передачи данных осуществляется путем подачи определенного импульса на вывод SCK.

Разъем программатора, как правило, имеет 10 пинов и подключается к микроконтроллеру с помощью 10 проводного шлейфа. Однако удобней пользоваться шлейфами, которые имеют переходник на 6 пин, так как в таком случае все пины заняты. У десяти пинового разъема одни пин остается не занятым, а четыре пина подключены к общему проводу (GND).

Разъемы программатора USBasp

Маркировка разъемов USBasp

Для того, чтобы компьютер определил программатор необходимо установить драйвер USBasp.

Фото подсоединенного программатора к микроконтроллеру ATmega8 приведено ниже.

Программирование микроконтроллеров AVR

Единственный недостаток или, правильнее сказать, мелкое неудобство данного программатора заключается в том, что он не поддерживается (без различных ухищрений) Atmel Studio, поэтому приходится пользоваться сторонней программой. Наиболее зарекомендовавшей себя является AVRDUDE.

Настройка AVRDUDE

Теперь нам осталось выполнить финальный шаг. Запускаем программу AVRDUDE. По умолчанию открывается вкладка Program. В нижней части окна в меню Настройки выбираем тип программатора usbasp. Далее в категории Микроконтроллер выбираем наш микроконтроллер ATmega8. Ниже, в категории Flash кликаем по значку троеточия и в открывшемся меню указываем путь к скомпилированному файлу с расширением hex. Путь к файлу и сам файл будут теми же, что мы ранее задавали в Proteus.

Настройка AVRDUDE

Чтобы убедится в том, что программатор определен операционной системой (драйвер программатора корректно установлен) и правильно подключен к микроконтроллеру, кликаем по кнопке Чтение. Если ошибок нет, то появится окно с записью “Калибровочные ячейки генератора считаны!” И в верхнем окошке отобразится шестнадцатеричное число. У каждого МК это число индивидуальное.

AVRDUDE

Прежде, чем записать новую программу рекомендуется очистить память микроконтроллера. Это можно сделать, кликнув по кнопке Стереть все. В результате появится окно с сообщением о том, что кристалл чист.

AVRDUDE Очистка памяти микроконтроллера

Теперь кликаем по кнопке Программировать в категории Flash. При успешной записи программы в МК появляется окно с записью, приведенной ниже.

AVRDUDE Прошивка микроконтроллера

Результат записанной, или, как еще говорят, прошитой программы – это засветившийся светодиод, подключенный к выводу PC0 нашего микроконтроллера.

Прошивка микроконтроллера ATmega8

Первая наша программа очень проста, а частота работы микроконтроллера оставлена по умолчанию и для ATmega8 равна 1 МГц. В случае изменения частоты или подключения внешнего кварцевого резонатора, необходимо внести некоторые изменения во вкладке Fuses, путем установки галочек в соответственные чекбоксы CKSEL0… CKSEL3.

AVRDUDE Фьюзы Fuses

Подробно настройки данной вкладки мы рассмотрим в статье Fuses (биты настройки или биты защиты) микроконтроллера.

Скачать USBasp драйвер

Скачать AVRDUDE

Как читать электрические схемы и создавать электронные устройства

Понравилась статья? Поделить с друзьями:

Это тоже интересно:

  • Ax6000 xiaomi инструкция на русском
  • Avr dosaaf 16 видеорегистратор инструкция
  • Aviline видеорегистратор инструкция как перезагрузить видеорегистратор
  • Axis q7401 инструкция на русском
  • Avermedia avertv box9 инструкция на русском

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии