Программирование AVR Альтернативы для Atmel DFU Flip Wed, April 24 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Альтернативы для Atmel DFU Flip Печать
Добавил(а) microsin   

Обновлять firmware микроконтроллеров через USB, без программатора очень удобно. Но с некоторых пор у меня перестала работать утилита Flip DFU на операционной системе Windows XP. Причина в том, что Flip DFU от Atmel основана на Java, и Windows XP библиотеками Java перестала поддерживаться. Конечно, давно пора переходить на Windows 7, Windows 8 и Windows 10. Но как быть тем, у кого слабый компьютер, и нет никакого желания переустанавливать Windows? К счастью, есть несколько альтернатив для Flip DFU от Atmel.

[dfu-programmer]

Консольная утилита с открытым исходным кодом [1]. Пользоваться довольно просто. В распространяемом архиве распространяется как сама утилита (dfu-programmer.exe), так и драйвер USB для устройства DFU (находится в подкаталоге dfu-prog-usb-1.2.2 архива).

Подсказку по командной строке можно получить с опцией --help:

c:\Program Files\dfu-programmer>dfu-programmer.exe --help
dfu-programmer 0.7.0
https://github.com/dfu-programmer/dfu-programmer
Usage: dfu-programmer target[:usb-bus,usb-addr] command [options] [global-option
s] [file|data]
 
global-options:
        --quiet
        --debug level    (level is an integer specifying level of detail)
        Global options can be used with any command and must come
        after the command and before any file or data value
 
command summary:
        launch       [--no-reset]
        read         [--force] [--bin] [(flash)|--user|--eeprom]
        erase        [--force] [--suppress-validation]
        flash        [--force] [(flash)|--user|--eeprom]
                     [--suppress-validation]
                     [--suppress-bootloader-mem]
                     [--serial=hexdigits:offset] {file|STDIN}
        setsecure
        configure {BSB|SBV|SSB|EB|HSB} [--suppress-validation] data
        get     {bootloader-version|ID1|ID2|BSB|SBV|SSB|EB|
                 manufacturer|family|product-name|
                 product-revision|HSB}
        getfuse {LOCK|EPFL|BOOTPROT|BODLEVEL|BODHYST|
                 BODEN|ISP_BOD_EN|ISP_IO_COND_EN|
                 ISP_FORCE}
        setfuse {LOCK|EPFL|BOOTPROT|BODLEVEL|BODHYST|
                 BODEN|ISP_BOD_EN|ISP_IO_COND_EN|
                 ISP_FORCE} data
 
additional details:
 launch: Launch from the bootloader into the main program using a watchdog
         reset.  To jump directly into the main program use --no-reset.
   read: Read the program memory in flash and output non-blank pages in ihex
         format.  Use --force to output the entire memory and --bin for binary
         output.  User page and eeprom are selected using --user and --eprom
  erase: Erase memory contents if the chip is not blank or always with --force
  flash: Flash a program onto device flash memory.  EEPROM and user page are
         selected using --eeprom|--user flags. Use --force to ignore warning
         when data exists in target memory region.  Bootloader configuration
         uses last 4 to 8 bytes of user page, --force always required here.
Note: version 0.6.1 commands still supported.

Список поддерживаемых микроконтроллеров можно получить с опцией --targets:

c:\Program Files\dfu-programmer>dfu-programmer.exe --targets
8051 based controllers:
    at89c51snd1c       at89c51snd2c       at89c5130          at89c5131
    at89c5132
AVR based controllers:
    at90usb1287        at90usb1286        at90usb1287-4k     at90usb1286-4k
    at90usb647         at90usb646         at90usb162         at90usb82
    atmega32u6         atmega32u4         atmega32u2         atmega16u4
    atmega16u2         atmega8u2
AVR32 based controllers:
    at32uc3a0128       at32uc3a1128       at32uc3a0256       at32uc3a1256
    at32uc3a0512       at32uc3a1512       at32uc3a0512es     at32uc3a1512es
    at32uc3a364        at32uc3a364s       at32uc3a3128       at32uc3a3128s
    at32uc3a3256       at32uc3a3256s      at32uc3a4256s      at32uc3b064
    at32uc3b164        at32uc3b0128       at32uc3b1128       at32uc3b0256
    at32uc3b1256       at32uc3b0256es     at32uc3b1256es     at32uc3b0512
    at32uc3b1512       at32uc3c064        at32uc3c0128       at32uc3c0256
    at32uc3c0512       at32uc3c164        at32uc3c1128       at32uc3c1256
    at32uc3c1512       at32uc3c264        at32uc3c2128       at32uc3c2256
    at32uc3c2512
XMEGA based controllers:
    atxmega64a1u       atxmega128a1u      atxmega64a3u       atxmega128a3u
    atxmega192a3u      atxmega256a3u      atxmega16a4u       atxmega32a4u
    atxmega64a4u       atxmega128a4u      atxmega256a3bu     atxmega64b1
    atxmega128b1       atxmega64b3        atxmega128b3       atxmega64c3
    atxmega128c3       atxmega256c3       atxmega384c3       atxmega16c4
    atxmega32c4

Пример программирования памяти ATmega32U4 (команда flash) с предварительным стиранием (команда erase). В память flash будет записан файл myfile.hex в стандартном формате Intel HEX. Обратите внимание, что команды нужно запускать отдельными вызовами dfu-programmer.exe (для этого можно написать BAT-файл):

c:\temp>"C:\Program Files\dfu-programmer\dfu-programmer.exe" atmega32u4 erase --force
Erasing flash...  Success
Checking memory from 0x0 to 0x6FFF...  Empty.
 
c:\temp>"C:\Program Files\dfu-programmer\dfu-programmer.exe" atmega32u4 flash myfile.hex
Checking memory from 0x0 to 0x20FF...  Empty.
0%                            100%  Programming 0x2100 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]  Success
0%                            100%  Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]  Success
Validating...  Success
0x2100 bytes written into 0x7000 bytes memory (29.46%).

[Синопсис]

dfu-programmer target[:usb-bus,usb-addr] command [options] [parameters]
dfu-programmer --help
dfu-programmer --targets
dfu-programmer --version

[Описание]

Утилита командной строки dfu-programmer предназначена для поддержки совместимости с протоколом Device Firmware Upgrade (DFU) на множестве компьютерных платформ. Протокол DFU изначально был разработан компанией Atmel с целью обновлять память программ (flash) микроконтроллеров AVR, AVR32, XMEGA и 8051 при участии загрузчика (многие микроконтроллеры Atmel поставляются с завода с прошитым загрузчиком USB, это так называемый USB boot loader, подробнее см. [5, 6, 7]). Таким образом, протокол DFU + загрузчик позволяет обновлять прошивки firmware приборов прямо у потребителя. USB-загрузчики сделаны по образцу стандартного класса устройств USB DFU 1.0, но зависят от специальных расширений, определенных Atmel до такой степени, что стандартные драйверы DFU не работают.

Для использования утилиты dfu-programmer сначала подключите программируемое устройство таким образом, чтобы оно перешло в режим DFU. Переход в режим DFU зависит от микроконтроллера, например он может быть реализован нажатием кнопки HWB в момент подачи питания/подключения устройства к USB (или с помощью специального аппаратного сброса). Если микроконтроллер "чистый" (т. е. в нем прошит только загрузчик DFU), то после сброса/включения питания устройство автоматически перейдет в режим DFU. После этого программирование (или чтение) памяти микроконтроллера осуществляется одной или несколькими командами DFU. Обычно сначала нужно запустить команду очистки программируемой памяти (для этого нужно выдать команду erase), после чего выдать команду (команды) прошивки памяти определенными данными. Протокол DFU позволяет также и считывать память микроконтроллера, если это не запрещено специальными кодами защиты.

[Поддерживаемые микроконтроллеры]

Следующие имена чипов используются в параметре "target" командной строки.

MCU на основе ядра 8051:

at89c51snd1c, at89c51snd2c, at89c5130, at89c5131, at89c5132

MCU платформы AVR:

at90usb1287, at90usb1286, at90usb1287-4k, at90usb1286-4k, at90usb647, at90usb646, at90usb162, at90usb82, atmega32u6, atmega32u4, atmega32u2, atmega16u4, atmega16u2, atmega8u2 

MCU платформы AVR32:

at32uc3a0128, at32uc3a1128, at32uc3a0256, at32uc3a1256, at32uc3a0512, at32uc3a1512, at32uc3a0512es, at32uc3a1512es, at32uc3a364, at32uc3a364s, at32uc3a3128, at32uc3a3128s, at32uc3a3256, at32uc3a3256s, at32uc3a4256s, at32uc3b064, at32uc3b164, at32uc3b0128, at32uc3b1128, at32uc3b0256, at32uc3b1256, at32uc3b0256es, at32uc3b1256es, at32uc3b0512, at32uc3b1512, at32uc3c064, at32uc3c0128, at32uc3c0256, at32uc3c0512, at32uc3c164, at32uc3c1128, at32uc3c1256, at32uc3c1512, at32uc3c264, at32uc3c2128, at32uc3c2256, at32uc3c2512 

MCU платформы XMEGA:

atxmega64a1u, atxmega128a1u, atxmega64a3u, atxmega128a3u, atxmega192a3u, atxmega256a3u, atxmega16a4u, atxmega32a4u, atxmega64a4u, atxmega128a4u, atxmega256a3bu, atxmega64b1, atxmega128b1, atxmega64b3, atxmega128b3, atxmega64c3, atxmega128c3, atxmega256c3, atxmega384c3, atxmega16c4, atxmega32c4 

[Как использовать]

Нет простых механизмов, которые позволили бы программировать несколько устройств одновременно. По умолчанию будет выбрано первое из устройств, которое совпадает по своему коду id с указанным микроконтроллером в опции target. Многие варианты target используют одинаковые коды id. Соответственно избегайте одновременного подключения к хосту программирования нескольких устройств выбранного семейства (AVR, XMEGA, AVR32 или 8051).

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

Все перечисленные ниже команды поддерживают "глобальные опции". Команды, которые записывают память микроконтроллера, будут проверять записываемые данные путем повторного чтения (если Вы не запретили это), и в случае возникновения ошибок будут выдаваться соответствующие сообщения.

Обратите внимание, что в отличие от утилиты BatchISP [] компании Atmel, dfu-programmer будет за один запуск выполнять только одно действие. Таким образом, очистка и программирование памяти требуют выполнения отдельных команд, т. е. dfu-programmer понадобится запускать дважды (что легко реализуется с помощью командного скрипта).

configure register [--suppress-validation] data

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

dump [--force] [--bin] [(flash)|--user|--eeprom]

Читает память программ (flash) и выводит в stdout не чистые страницы в формате Intel HEX. Используйте --force, чтобы вывести всю память, и --bin, чтобы выводит данные в двоичном формате. Страница пользователя (user page) и EEPROM выбираются через --user и --eeprom. 

erase [--force]

Стирает всю память flash. Для устройств AT90 и ATmega выполнение команды стирания должно быть сделано перед тем, как станут доступными другие команды. Процедура очистки предварительно проверяет чистоту памяти, и память очищается только в случае, если не все её данные равны 0xFF. Это поведение по умолчанию можно отменить используя --force, тогда память будет стираться принудительно.

flash [--force] [(flash)|--user|--eeprom] [--suppress-validation] [--suppress-bootloader-mem]
[--serial=hexbytes:offset] file или STDIN

Записывает память flash (память программ микроконтроллера). Входной файл file (или поток stdin) должен иметь формат Intel HEX. Опция --suppress-bootloader-mem игнорирует любые данные, записываемые в область памяти загрузчика (bootloader memory space). Эта опция в частности полезна для чипов AVR32. Опция --force говорит программе игнорировать тот факт, что записываемая область памяти может быть не чистая. User page и eeprom выбираются соответственно опциями --user и --eeprom. Пространство пользователя (user space) памяти flash чипов AVR32 лежит вне обычного диапазона блоков flash, и это было разработано для хранения конфигурационных параметров. Конфигурация загрузчика (bootloader configuration) использует последние от 4 до 8 байт области пользователя (user page). Если эти данные повреждены, то устройство будет перезапускаться в режим загрузчика до тех пор, пока не будут использоваться допустимые данные (см. даташиты doc7745 или doc32166 компании Atmel). В этом случае всегда требуется использовать --force.

--serial предоставляет способ вставлять серийный номер или любую другую уникальную последовательность байт в образ данных, который программируется в устройство. Это дает возможность использовать один файл .ihex для программирования нескольких устройств, и при этом каждое из них получит свой собственный уникальный серийный номер. Например, --serial=ABCDEF01:0x6000 запрограммирует по адресу 0x6000 байт с шестнадцатеричным значением 0xAB, по адресу 0x6001 байт 0xCD, и так далее. Здесь до двоеточия должно быть четное количество шестнадцатеричных цифр, однако их последовательность может быть любой длины (существует только ограничение на максимальную длительность командной строки). Подразумевается, что адрес смещения указывается в шестнадцатеричном формате, если он с префиксом "0x", в восьмеричном формате, если он начинается на "0", иначе подразумевается десятичный формат адреса.

setsecure

Устанавливает бит защиты (security bit, или security fuse) чипов AVR32. Это предотвратит возможность чтения содержимого памяти чипа, за исключением той же сессии, в которой память была запрограммирована. Когда бит защиты установлен, то получить какой-либо доступ к памяти устройства можно только после выполнения команды erase. Очистить бит защиты, когда он установлен, можно только с помощью очистки чипа через JTAG, что также сотрет из памяти bootloader.

get register

Отобразит байты идентификатора, по которым различают чипы.

launch [--no-reset]

Запустит программу микроконтроллера путем его сброса. Опция --no-reset может использоваться для запуска устройства без сброса (jump на начальный адрес программы).

Глобальные опции

--quiet

Генерирует минимальный вывод в консоли.

--debug level

Позволяет активировать вывод в консоли на указанном уровне подробности (используется для отладки и решения проблем).

Конфигурирование регистров

Стандартный загрузчик чипов на базе ядра 8051 поддерживает запись байт данных, которые не относятся к чипам AVR.

BSB - boot status byte
SBV - software boot vector
SSB - software security byte
EB - extra byte
HSB - hardware security byte

Получение содержимого регистра

bootloader-version - прошитая в настоящий момент версия загрузчика
ID1 - device boot identification 1
ID2 - device boot identification 2
manufacturer - код аппаратуры производителя
family - код, обозначающий семейство продукции
product-name - имя продукта
product-revision - ревизия продукта
HSB - то же самое, что и версия configure_register
BSB - то же самое, что и версия configure_register
SBV - то же самое, что и версия configure_register
SSB - то же самое, что и версия configure_register
EB - то же самое, что и версия configure_register

[Известные проблемы]

Чипы серии at90usb не делают доступными флаги защиты чтения/записи, и по этой причине команды dump или flash могут возвратить ошибку без всякой полезной информации о причине ошибки. Чтобы снять любую защиту от записи или чтения любого чипа, требуется его полная очистка. Для чипов AVR32 операция стирания через USB также снимет защиту до момента перезагрузки устройства. Чтобы снять защиту постоянно, требуется применить JTAG erase (что также сотрет и bootloader). 

На платформах xNix Вам нужно быть членом группы uucp, чтобы получить доступ к устройству без прав доступа root.

Автор: Weston Schmidt < weston_schmidt@alumni.purdue.edu >

[См. также]

dfu-programmer.sourceforge.net
USB DFU Bootloader Datasheet (8051, AVR)
AVR32 UC3 USB DFU Bootloader Protocol
FLIP USB DFU Protocol
AVR32 UC3 USB DFU Bootloader

[AVRDUDE]

Утилита командной строки с открытым исходным кодом [2]. AVRDUDE начиная с версии 6.1 поддерживает протокол DFU Flip. Получить Windows-версию можно в архиве avrdude-6.3-mingw32.zip, доступному по ссылке [3]. Распакуйте архив в любую папку на диске. Обратите внимание, что вместе с исполняемым файлом avrdude.exe в архиве находится конфигурационный файл avrdude.conf. Этот файл обязательно должен находиться на диске в одном каталоге вместе с исполняемым файлом avrdude.exe.

Подсказку по опциям командной строки можно получить с опцией -?, либо запуском без опций:

c:\Program Files\avrdude-6.3-mingw32>avrdude.exe -?
Usage: avrdude.exe [options]
Options:
  -p < partno>               Required. Specify AVR device.
  -b < baudrate>             Override RS-232 baud rate.
  -B < bitclock>             Specify JTAG/STK500v2 bit clock period (us).
  -C < config-file>          Specify location of configuration file.
  -c < programmer>           Specify programmer type.
  -D                         Disable auto erase for flash memory
  -i < delay>                ISP Clock Delay [in microseconds]
  -P < port>                 Specify connection port.
  -F                         Override invalid signature check.
  -e                         Perform a chip erase.
  -O                         Perform RC oscillator calibration (see AVR053).
  -U < memtype>:r|w|v:< filename>[:format]
                             Memory operation specification.
                             Multiple -U options are allowed, each request
                             is performed in the order specified.
  -n                         Do not write anything to the device.
  -V                         Do not verify.
  -u                         Disable safemode, default when running from a script.
  -s                         Silent safemode operation, will not ask you if
                             fuses should be changed back.
  -t                         Enter terminal mode.
  -E < exitspec>[,< exitspec>] List programmer exit specifications.
  -x < extended_param>       Pass < extended_param> to programmer.
  -y                         Count # erase cycles in EEPROM.
  -Y < number>               Initialize erase cycle # in EEPROM.
  -v                         Verbose output. -v -v for more.
  -q                         Quell progress output. -q -q for less.
  -l logfile                 Use logfile rather than stderr for diagnostics.
  -?                         Display this usage.
avrdude version 6.3, URL: < http://savannah.nongnu.org/projects/avrdude/>

Список поддерживаемых программаторов выводится командой -c ?:

c:\Program Files\avrdude-6.3-mingw32>avrdude.exe -c ?
Valid programmers are:
  2232HIO          = FT2232H based generic programmer
  4232h            = FT4232H based generic programmer
  89isp            = Atmel at89isp cable
  abcmini          = ABCmini Board, aka Dick Smith HOTCHIP
  alf              = Nightshade ALF-PgmAVR, http://nightshade.homeip.net/
  arduino          = Arduino
  arduino-ft232r   = Arduino: FT232R connected to ISP
  atisp            = AT-ISP V1.1 programming cable for AVR-SDK1 from < http://mic
ro-research.co.th/>
  atmelice         = Atmel-ICE (ARM/AVR) in JTAG mode
  atmelice_dw      = Atmel-ICE (ARM/AVR) in debugWIRE mode
  atmelice_isp     = Atmel-ICE (ARM/AVR) in ISP mode
  atmelice_pdi     = Atmel-ICE (ARM/AVR) in PDI mode
  avr109           = Atmel AppNote AVR109 Boot Loader
  avr910           = Atmel Low Cost Serial Programmer
  avr911           = Atmel AppNote AVR911 AVROSP
  avrftdi          = FT2232D based generic programmer
  avrisp           = Atmel AVR ISP
  avrisp2          = Atmel AVR ISP mkII
  avrispmkII       = Atmel AVR ISP mkII
  avrispv2         = Atmel AVR ISP V2
  bascom           = Bascom SAMPLE programming cable
  blaster          = Altera ByteBlaster
  bsd              = Brian Dean's Programmer, http://www.bsdhome.com/avrdude/
  buspirate        = The Bus Pirate
  buspirate_bb     = The Bus Pirate (bitbang interface, supports TPI)
  butterfly        = Atmel Butterfly Development Board
  butterfly_mk     = Mikrokopter.de Butterfly
  bwmega           = BitWizard ftdi_atmega builtin programmer
  C232HM           = FT232H based module from FTDI and Glyn.com.au
  c2n232i          = serial port banging, 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
  diecimila        = alias for arduino-ft232r
  dragon_dw        = Atmel AVR Dragon in debugWire mode
  dragon_hvsp      = Atmel AVR Dragon in HVSP mode
  dragon_isp       = Atmel AVR Dragon in ISP mode
  dragon_jtag      = Atmel AVR Dragon in JTAG mode
  dragon_pdi       = Atmel AVR Dragon in PDI mode
  dragon_pp        = Atmel AVR Dragon in PP mode
  dt006            = Dontronics DT006
  ere-isp-avr      = ERE ISP-AVR < http://www.ere.co.th/download/sch050713.pdf>
  flip1            = FLIP USB DFU protocol version 1 (doc7618)
  flip2            = FLIP USB DFU protocol version 2 (AVR4023)
  frank-stk200     = Frank STK200
  ft232r           = FT232R Synchronous BitBang
  ft245r           = FT245R Synchronous BitBang
  futurlec         = Futurlec.com programming cable.
  jtag1            = Atmel JTAG ICE (mkI)
  jtag1slow        = Atmel JTAG ICE (mkI)
  jtag2            = Atmel JTAG ICE mkII
  jtag2avr32       = Atmel JTAG ICE mkII im AVR32 mode
  jtag2dw          = Atmel JTAG ICE mkII in debugWire mode
  jtag2fast        = Atmel JTAG ICE mkII
  jtag2isp         = Atmel JTAG ICE mkII in ISP mode
  jtag2pdi         = Atmel JTAG ICE mkII PDI mode
  jtag2slow        = Atmel JTAG ICE mkII
  jtag3            = Atmel AVR JTAGICE3 in JTAG mode
  jtag3dw          = Atmel AVR JTAGICE3 in debugWIRE mode
  jtag3isp         = Atmel AVR JTAGICE3 in ISP mode
  jtag3pdi         = Atmel AVR JTAGICE3 in PDI mode
  jtagkey          = Amontec JTAGKey, JTAGKey-Tiny and JTAGKey2
  jtagmkI          = Atmel JTAG ICE (mkI)
  jtagmkII         = Atmel JTAG ICE mkII
  jtagmkII_avr32   = Atmel JTAG ICE mkII im AVR32 mode
  lm3s811          = Luminary Micro LM3S811 Eval Board (Rev. A)
  mib510           = Crossbow MIB510 programming board
  mkbutterfly      = Mikrokopter.de Butterfly
  nibobee          = NIBObee
  o-link           = O-Link, OpenJTAG from www.100ask.net
  openmoko         = Openmoko debug board (v3)
  pavr             = Jason Kyle's pAVR Serial Programmer
  pickit2          = MicroChip's PICkit2 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
  stk500hvsp       = Atmel STK500 V2 in high-voltage serial programming mode
  stk500pp         = Atmel STK500 V2 in parallel programming mode
  stk500v1         = Atmel STK500 Version 1.x firmware
  stk500v2         = Atmel STK500 Version 2.x firmware
  stk600           = Atmel STK600
  stk600hvsp       = Atmel STK600 in high-voltage serial programming mode
  stk600pp         = Atmel STK600 in parallel programming mode
  ttl232r          = FTDI TTL232R-5V with ICSP adapter
  tumpa            = TIAO USB Multi-Protocol Adapter
  UM232H           = FT232H based module from FTDI and Glyn.com.au
  uncompatino      = uncompatino with all pairs of pins shorted
  usbasp           = USBasp, http://www.fischl.de/usbasp/
  usbasp-clone     = Any usbasp clone with correct VID/PID
  usbtiny          = USBtiny simple USB programmer, http://www.ladyada.net/make/
usbtinyisp/
  wiring           = Wiring
  xil              = Xilinx JTAG cable
  xplainedmini     = Atmel AVR XplainedMini in ISP mode
  xplainedmini_dw  = Atmel AVR XplainedMini in debugWIRE mode
  xplainedpro      = Atmel AVR XplainedPro in JTAG mode

Среди этого обширного списка поддерживаемых программаторов нас больше всего интересуют опции flip1 и flip2, позволяющие задействовать загрузчик Flip DFU Atmel. Опция flip1 применяется для всех микроконтроллеров, кроме XMEGA, а flip2 применяется для XMEGA.

Список поддерживаемых микроконтроллеров можно получить командой -p ?:

c:\Program Files\avrdude-6.3-mingw32>avrdude.exe -p ?
Valid parts are:
  uc3a0512 = AT32UC3A0512
  c128     = AT90CAN128
  c32      = AT90CAN32
  c64      = AT90CAN64
  pwm2     = AT90PWM2
  pwm216   = AT90PWM216
  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
  m1284    = ATmega1284
  m1284p   = ATmega1284P
  m1284rfr2 = ATmega1284RFR2
  m128rfa1 = ATmega128RFA1
  m128rfr2 = ATmega128RFR2
  m16      = ATmega16
  m161     = ATmega161
  m162     = ATmega162
  m163     = ATmega163
  m164p    = ATmega164P
  m168     = ATmega168
  m168p    = ATmega168P
  m168pb   = ATmega168PB
  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
  m32m1    = ATmega32M1
  m32u2    = ATmega32U2
  m32u4    = ATmega32U4
  m406     = ATMEGA406
  m48      = ATmega48
  m48p     = ATmega48P
  m48pb    = ATmega48PB
  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
  m88pb    = ATmega88PB
  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
  t28      = ATtiny28
  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
  ucr2     = deprecated, use 'uc3a0512'

Пример стирания памяти ATmega32U4:

c:\temp>"c:\Program Files\avrdude-6.3-mingw32\avrdude.exe" -c flip1 -p m32u4 -e
 
avrdude.exe: Warning: USB bDeviceClass = 255 (expected 254)
avrdude.exe: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.00s
avrdude.exe: Device signature = 0x1e9587 (probably m32u4)
 
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: erasing chip
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: safemode: Sorry, reading back fuses was unreliable. I have given up
 and exited programming mode
 
avrdude.exe done.  Thank you.

Пример записи в память flash файла myfile.hex. Обратите внимание на две вещи: во-первых, эта команда автоматически перед записью выполняет стирание памяти flash. Во-вторых, используется опция -F для отмены проверки сигнатуры чипа (иначе почему-то здесь сигнатура читается неправильно, и из-за этого запись во flash почему-то не работает):

c:\temp>"c:\Program Files\avrdude-6.3-mingw32\avrdude.exe" -c flip1 -p m32u4 -F -U flash:w:myfile.hex:i
 
avrdude.exe: Warning: USB bDeviceClass = 255 (expected 254)
avrdude.exe: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.00s
 
avrdude.exe: Device signature = 0x1e9587 (probably m32u4)
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be per
formed
             To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "c:\asm\vcp-ppf-66\vcp-Si570-control\VirtualSeri
al.hex"
avrdude.exe: writing flash (8408 bytes):
 
Writing | ################################################## | 100% 0.61s
 
avrdude.exe: 8408 bytes of flash written
avrdude.exe: verifying flash memory against c:\asm\vcp-ppf-66\vcp-Si570-control\
VirtualSerial.hex:
avrdude.exe: load data flash data from input file c:\asm\vcp-ppf-66\vcp-Si570-co
ntrol\VirtualSerial.hex:
avrdude.exe: input file c:\asm\vcp-ppf-66\vcp-Si570-control\VirtualSerial.hex co
ntains 8408 bytes
avrdude.exe: reading on-chip flash data:
 
Reading | ################################################## | 100% 0.27s
 
avrdude.exe: verifying ...
avrdude.exe: 8408 bytes of flash verified
 
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: Error: "lfuse" memory not accessible using FLIP
avrdude.exe: safemode: Sorry, reading back fuses was unreliable. I have given up
 and exited programming mode
 
avrdude.exe done.  Thank you.

http://download.savannah.gnu.org/releases/avrdude/avrdude-doc-6.3.pdf

[Ссылки]

1. dfu-programmer site:dfu-programmer.github.io.
2. AVRDUDE - AVR Downloader/UploaDEr site:nongnu.org.
3. AVRDUDE: различные версии, документация.
4. Как пользоваться avrdude, быстрый старт.
5. AVR4023: протокол FLIP USB DFU.
6. Где взять код USB загрузчиков для микроконтроллеров AVR USB?
7. AVR282: обновление firmware через USB.

 

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


Защитный код
Обновить

Top of Page