[Синопсис]
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