Avrdude — консольная программа прошивки микроконтроллеров

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

Сайт программы: http://www.nongnu.org/avrdude/
Лицензия: GPL
Операционная система: Кросплатформенный
Особенностью программы Avrdude является то, что она имеет консольный интерфейс пользователя, что потребует от пользователя определенных навыков. Тем не менее для любителей графического интерфейса имеется ряд сторонних графических оболочек для этой программы.
Хотя графический интерфейс является во многом удобным и предпочтительным, для выполнения повседневных однотипных задач все же лучше использовать программу из скриптов cmd, что будет рассмотрено в данном документе.
Альтернативным способом прошивания микроконтроллеров являются встроенные средства, входящие в состав средств разработки, такие как AVR Studio. Но они удобны только в процессе разработки и отладки программ. Avrdude больше полезен в процессе серийного прошивания готовых изделий, т.к. не потребует для работы установки среды разработки, а для прошивки микроконтроллера достаточно только дважды щелкнуть мышью по заранее подготовленному ярлыку (естественно с указанными параметрами запуска программы).
Консоль avrdude
Итак, для работы с программой потребуется:
  1. Установить программу;
  2. Разобраться с параметрами командной строки и сформировать команду запуска программы.
После чего программа готова к использованию.

Установка Avrdude

Avrdude входит в состав пакета WinAVR, поэтому установка сводится к установке данного пакета. Скачать WinAVR можно здесь: http://sourceforge.net/projects/winavr/.
После установки пакета WinAVR можно запускать Avrdude, для чего откройте командную строку и выполните команду:
avrdude
После чего на экране вы должны увидеть краткую инструкцию команды:

Параметры программы

Синтаксис команды Avrdude:
Avrdude [опции]
Где [опции] задают параметры команды в формате -ключ_значение.
Рассмотрим наиболее значимые опции команды.

Задаем тип микроконтроллера (-p)

Avrdude -p <partno>

где <partno> — тип микроконтроллера. Данная команда указывает какой тип микроконтроллера используется. Например, для микроконтроллера Atmega32 <partno> будет равен m32.

Задаем скорость порта для программатора (-b)

Avrdude -b <baudrate>

где <baudrate> переопределяет скорость обмена данными с программатором по последовательному интерфейсу (относится не ко всем типам программаторов). Не рекомендуется изменять данный параметр без особых причин, т.к. программаторы обычно оптимизированы на скорость по умолчанию.

Задаем скорость обмера данными программатора с микроконтроллером (-B)

Avrdude -B <bitclock>

где < bitclock> переопределяет скорость обмена данными программатора с микроконтроллером. Данный параметр может потребоваться если частота микроконтроллера слишком низкая и не позволяет производить программирование на скорости по умолчанию. В таком случае с помощью данного параметра скорость программирования может быть снижена.

Запрещаем автоматическую очистку памяти микроконтроллера перед прошиванием (-D)

Avrdude -D
Если нам не нужно выполнять автоматическую очистку flash-памяти микроконтроллера, выполняемую перед ее прошиваением, то используем данную опцию.

Указываем порт, к которому подключен программатор (-P)

Avrdude -P <port>
Указывается коммуникационный порт по которому к компьютеру подключен программатор. Среди возможных значений могут быть COM1 для последовательного интерфейса или LPT1 для параллельного или USB.

Отключение проверки сигнатуры микроконтроллера (-F)

Avrdude -F
Опция отключает проверку сигнатуры микроконтроллера при прошивке. Не рекомендуется использовать данную опцию, т.к. проверка сигнатуры позволяет проверять тот ли тип микроконтроллера подключен, что мы предполагаем или нет.

Очистка микроконтроллера (-e)

Avrdude -e
Производит очистку flash-памяти микроконтроллера. Данная операция производится автоматически при прошивании.

Манипуляции с памятью микроконтроллера (-U)

Avrdude -U <memtype>:r|w|v:<filename>[:format]

Наиболее значимая опция команды, которая непосредственно отвечает за программирование микроконтроллера.
Параметр memtype задает какой тип памяти будет затронут командой:
  • flash — флеш память микроконтроллера;
  • eeprom — энергонезависимая память микроконтроллера;
  • hfuse — старший байт фьюзов микроконтроллера;
  • lfuse —  младший байт фьюзов микроконтроллера;
  • efuse —  еще один байт фьюзов микроконтроллера (если поддерживается микроконтроллером).
Что сделать с памятью определяет следующий за memtype параметр через двоеточие, который обозначает запись в память (r), чтение содержимого памяти микроконтроллера (w) и проверка памяти (v).
Далее после двоеточего следует имя файла <filename> (можно полный путь с указанием диска в кавычках) куда следует сохранить или откуда надо загрузить содержимое памяти.
Необязательный параметр format определяет формат файла, в котором хранится участок памяти. Наиболее типичным для flash памяти будет формат «Intel Hex», обозначаемый символом i.
Таким образом, команда на запись в микроконтроллера прошивки, содержащейся в файле test.hex будет следующей:
Avrdude -U flash:w:test.hex:i 

Команда на чтение содержимого энергонезависимой памяти микроконтроллера в файл  eedump.hex будет следующей:

Avrdude -U eeprom:r:eedump.hex:i

Блокировать любую запись в микроконтроллер (-n)

Avrdude -n

Опция заблокирует любые попытки записать что-либо в микроконтроллер. Может потребоваться если вы собираетесь попробовать выполнить команду, но пока в чем-то не уверены и хотите сначала ее проверить, т.к. боитесь, что испортите микроконтроллер.

Разрешение на изменение фьюзов (-u)

Avrdude -u

Если вы собираетесь изменить фьюзы микроконтроллера, то необходимо подтвердить это намерение с помощью данной опции.

Открытие терминала программатора (-t)

Avrdude -t

Данная опция позволяет работать с программатором в режиме терминала. Эта опция полезна для продвинутых пользователей.

Выключить автоматическую проверку записи (-V)

Avrdude -V

Опция запрещает производить проверку данных при записи.

Задаем тип программатора (-c)

С помощью опции -c <programmer> возможен выбор одного из следующих программаторов:

  • t10 = ATtiny10
  • t8 = ATtiny9
  • t5 = ATtiny5
  • t4 = ATtiny4
  • ucr2 = 32UC3A0512
  • x128a4 = ATXMEGA128A4
  • x64a4 = ATXMEGA64A4
  • x32a4 = ATXMEGA32A4
  • x16a4 = ATXMEGA16A4
  • x256a3b = ATXMEGA256A3B
  • x256a3 = ATXMEGA256A3
  • x192a3 = ATXMEGA192A3
  • x128a3 = ATXMEGA128A3
  • x64a3 = ATXMEGA64A3
  • x256a1 = ATXMEGA256A1
  • x192a1 = ATXMEGA192A1
  • x128a1d = ATXMEGA128A1REVD
  • x128a1 = ATXMEGA128A1
  • x64a1 = ATXMEGA64A1
  • m6450 = ATMEGA6450
  • m3250 = ATMEGA3250
  • m645 = ATMEGA645
  • m325 = ATMEGA325
  • usb82 = AT90USB82
  • usb162 = AT90USB162
  • usb1287 = AT90USB1287
  • usb1286 = AT90USB1286
  • usb647 = AT90USB647
  • usb646 = AT90USB646
  • m32u4 = ATmega32U4
  • t84 = ATtiny84
  • t44 = ATtiny44
  • t24 = ATtiny24
  • m128rfa1 = ATMEGA128RFA1
  • m2561 = ATMEGA2561
  • m2560 = ATMEGA2560
  • m1281 = ATMEGA1281
  • m1280 = ATMEGA1280
  • m640 = ATMEGA640
  • t85 = ATtiny85
  • t45 = ATtiny45
  • t25 = ATtiny25
  • pwm3b = AT90PWM3B
  • pwm2b = AT90PWM2B
  • pwm3 = AT90PWM3
  • pwm2 = AT90PWM2
  • t2313 = ATtiny2313
  • m328p = ATMEGA328P
  • t88 = attiny88
  • m168 = ATMEGA168
  • m88 = ATMEGA88
  • m48 = ATMEGA48
  • t861 = ATTINY861
  • t461 = ATTINY461
  • t261 = ATTINY261
  • t26 = ATTINY26
  • m8535 = ATMEGA8535
  • m8515 = ATMEGA8515
  • m8 = ATMEGA8
  • m161 = ATMEGA161
  • m32 = ATMEGA32
  • m6490 = ATMEGA6490
  • m649 = ATMEGA649
  • m3290p = ATMEGA3290P
  • m3290 = ATMEGA3290
  • m329p = ATMEGA329P
  • m329 = ATMEGA329
  • m169 = ATMEGA169
  • m163 = ATMEGA163
  • m162 = ATMEGA162
  • m1284p = ATMEGA1284P
  • m644p = ATMEGA644P
  • m644 = ATMEGA644
  • m324p = ATMEGA324P
  • m164p = ATMEGA164P
  • m16 = ATMEGA16
  • c32 = AT90CAN32
  • c64 = AT90CAN64
  • c128 = AT90CAN128
  • m128 = ATMEGA128
  • m64 = ATMEGA64
  • m103 = ATMEGA103
  • 8535 = AT90S8535
  • 8515 = AT90S8515
  • 4434 = AT90S4434
  • 4433 = AT90S4433
  • 2343 = AT90S2343
  • 2333 = AT90S2333
  • 2313 = AT90S2313
  • 4414 = AT90S4414
  • 1200 = AT90S1200
  • t15 = ATtiny15
  • t13 = ATtiny13
  • t12 = ATtiny12
  • t11 = ATtiny11
Пример команды:
C:\>avrdude -c avrisp ...

Скрипт для автоматической прошивки микроконтроллера

Для того, чтобы прошивка микроконтроллера производилась с помощью программы avrdude автоматически можно написать небольшой скрипт. Далее приведу небольшой пример, написанный для программатора AVR-JTAG-USB. К данному программатору можно обращаться через COM-порт, который создается при установке его драйвера, поэтому скрипт первым делом спрашивает номер порта, к которому подключен программатор, далее пытается с ним соединиться. Если не удается, то программа возвращается к выбору последовательного порта. Иначе производит прошивку платы.
set AVRDUDECMD="<путь к папке с avrdude>\avrdude.exe"
set FIRMWARESOURCEDIR=<путь к папке с текущей прошивкой>
set FIRMWAREDIR=%TMP%\firmware\

:SELECTPORT
set /P port="Выберите номер порта COM"
echo %AVRDUDECMD%

echo Проверка подключения...
%AVRDUDECMD% -c jtagmkI -p m32 -P COM%port%
IF %ERRORLEVEL% EQU 9009 GOTO SELECTPORT

echo Удаляем временные файлы
rmdir /S /Q %FIRMWAREDIR%
echo Копируем прошивку во временную папку
mkdir %FIRMWAREDIR%
xcopy "%FIRMWARESOURCEDIR%*.*"  "%FIRMWAREDIR%"

echo Прошиваем микроконтроллер
@echo on
%AVRDUDECMD% -c jtagmkI -p m32 -P COM%port% -U flash:w:"%FIRMWAREDIR%firmware.hex":i -U hfuse:w:^<0x91^>:m -U lfuse:w:^<0xFF^>:m
@echo off

pause

 

Как работает скрипт?

В самом начале скрипта определяются значения трем переменным:
  • AVRDUDECMD — полный путь к программе avrdude.exe
  • FIRMWARESOURCEDIR — Полный путь к папке с прошивкой
  • FIRMWAREDIR — путь к временной папке, в которую будут скопированы файлы прошивки. Данная папка необходима для успешного выполнения программы avrdude на случай, если FIRMWARESOURCEDIR окажется сетевой папкой. В случае, если папка с прошивкой окажется сетевой, то программа avrdude выдаст ошибку.

Имя файла с прошивкой должно быть firmware.hex и располагаться в папке FIRMWARESOURCEDIR.

Строка с командой на прошивку микроконтроллера выглядит следующим образом:
%AVRDUDECMD% -c jtagmkI -p m32 -P COM%port% -U flash:w:»%FIRMWAREDIR%firmware.hex»:i -U hfuse:w:^<0x91^>:m -U lfuse:w:^<0xFF^>:m
Здесь указывается, что будет использован программатор AVR-JTAG-USB, микроконтроллер Atmega32, порт COM[номер порта вводится пользователем с клавиатуры]. В строке команды указываются значения фьюзов — hfuse=0x91 иlfuse=0xFF в шестнадцатиричном формате.
Значения фьюзов в шестнадцатиричном формате можно подобрать с помощью встроенных инструментов AVR-Studio, предназначенных для прошивания миктроконтроллеров.
Данный скрипт можно разместить в сетевой папке вашей локальной сети и запускать с любого компьютера прямо из сетевой папки.
Результат работы скрипта будет примерно таким:
Выберите номер порта COM2
"\\center\Прошивки для плат\avrdude\avrdude.exe"
Проверка подключения...
avrdude.exe: jtagmkI_open(): failed to synchronize to ICE
avrdude.exe: jtagmkI_close(): unsupported baudrate -1

avrdude.exe done.  Thank you.

Удаляем временные файлы
Копируем прошивку во временную папку
\\center\Прошивки для плат\МОС-Универсальный\revision01.00\version01.00\MOS.hex
Скопировано файлов: 1.
Прошиваем микроконтроллер

C:\WINDOWS>"\\center\Прошивки для плат\avrdude\avrdude.exe" -c jtagmkI -p m32 -P COM2 -U flash:w:"C:\DOCUME~1\valeyev\LOCALS~
1\Temp\firmware\MOS.hex":i -U hfuse:w:<0x91>:m -U lfuse:w:<0xFF>:m

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.05s

avrdude.exe: Device signature = 0x1e9502
avrdude.exe: NOTE: FLASH memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "C:\DOCUME~1\valeyev\LOCALS~1\Temp\firmware\MOS.hex"
avrdude.exe: writing flash (19104 bytes):

Writing | ################################################## | 100% 7.19s

avrdude.exe: 19104 bytes of flash written
avrdude.exe: verifying flash memory against C:\DOCUME~1\valeyev\LOCALS~1\Temp\firmware\MOS.hex:
avrdude.exe: load data flash data from input file C:\DOCUME~1\valeyev\LOCALS~1\Temp\firmware\MOS.hex:
avrdude.exe: input file C:\DOCUME~1\valeyev\LOCALS~1\Temp\firmware\MOS.hex contains 19104 bytes
avrdude.exe: reading on-chip flash data:

Reading | ################################################## | 100% 4.11s

avrdude.exe: verifying ...
avrdude.exe: 19104 bytes of flash verified
avrdude.exe: reading input file "<0x91>"
avrdude.exe: invalid byte value (<0x91>) specified for immediate mode
avrdude.exe: write to file '<0x91>' failed

avrdude.exe: safemode: Fuses OK

avrdude.exe done.  Thank you.

Для продолжения нажмите любую клавишу . . .

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *