Как из AVR-USB162 сделать ISP программатор, совместимый с avrdude |
![]() |
Добавил(а) microsin | ||
Тем, кто хорошо во всем разбирается, дам только ссылку [1], и дальше можно не читать. И, на всякий случай, расписываю процесс по шагам (на платформе Windows XP). 1. Скачайте AVRopendous-2009-02-10b.zip [2]. 2. Распакуйте из архива 2 файла - AVRISP_Programmer.hex и LUFA AVR ISP Programmer.inf в произвольное удобное место. Файлы в архиве запрятаны в папке AVRopendous \ Firmware \ AVRISP_Programmer. 3. Подключите макетную плату AVR-USB162 к компьютеру через интерфейс USB. Если платка не чистая (в ней что-то записано, но bootloader еще не стерт), то введите платку в режим DFU Flip (активизация USB бутлоадера). Для этого нажмите кнопку SW1 RESET, удерживайте её, нажмите кнопку SW2 HWB и, удерживая её, отпустите кнопку SW1 RESET, потом отпустите SW2 HWB. После этой процедуры в операционной системе Windows должно появиться устройство LibUSB-Win32 Devices\AT90USB162 (см. в Диспетчере Устройств). Если не появилось, значит надо перепрошить bootloader (Вы его каким-то образом стерли). Прошивка бутлоадера возможна с помощью программатора ISP. Если у Вас в чипе разрешен режим debugWire, то необходимо сначала отключить этот режим, чтобы заработал режим последовательного программирования ISP (в режиме debugWire технология Flip тоже не работает). Чтобы отключить debugWire, проделайте следующее. - запустите AVR Studio. Если бутлоадер DFU FLIP прошит, то можно его активизировать (с помощью уже описанной процедуры с кнопками) и перейти к шагу 4. Если не вышло, то нужно стереть чип ISP-программатором, и этим же программатором залить прошивку AVRISP_Programmer.hex. 4. Запустите программную оболочку Flip (как её устанавливать и что это такое, см. [3]). В меню утилиты Flip выберите Device -> Select... -> AT90USB162. Далее выберите Settings -> Communication -> USB -> USB Port Connection -> Open. Программа должна "ожить" - все недоступные элементы управления (которые были серенькие) должны стать доступны - наше устройство AT90USB162 определилось и готово к прошивке. 5. Откройте файл прошивки AVRISP_Programmer.hex, который мы распаковали на шаге 2 - в меню выберите File -> Load HEX File..., и выберите наш файл AVRISP_Programmer.hex. В левой части окна программы должны стоять галки Erase, Program, Verify, а галка Blank Check должна быть неустановленной. Нажмите кнопку Run слева внизу. За несколько секунд наша платка прошьется. 6. Теперь можно закрыть программу Flip, отключить платку от USB и снова подключить (можно этого не делать, а просто нажать кнопку Start Application в правой нижней части окна программы Flip. Галка Reset должна быть установленной). После этого в системе обнаружится новое устройство, и будет предложено установить для него драйвер. Скормите операционной системе второй распакованный на шаге 2 файл - LUFA AVR ISP Programmer.inf. На предупреждение о неподписанных драйверах говорим "все равно установить". После этого в системе появится новое устройство - виртуальный последовательный порт (его также можно найти в Диспетчере Устройств). У меня порт установился как Ports (COM & LPT)\USB Virtual Serial Port (COM8). Запомните номер/имя порта (COM8), это понадобится для проверки работы программной оболочки программатора avrdude. 7. Теперь можно проверить, видится ли наша платка программой avrdude как программатор. Небольшое отступление для тех, что не в курсе, что такое avrdude. Это open-source проект, который представляет собой консольную программу, управляющую большим количеством существующих в мире программаторов. Avrdude можно свободно скачать из Интернета и скомпилировать, но лучше не париться, а просто взять её из пакета программ WinAVR (как ставить и что это такое [4]), она находится в папке c:\WinAVR-20080610\bin\ (циферки в имени означают просто дату сборки пакета WinAVR). Проверьте как теперь работает AVR-USB162 в качестве программатора - перейдите в папку c:\WinAVR-20080610\bin и вводите в командной строке: c:\WinAVR-20080610\bin>avrdude -vv -F -P COM8 -c avr910 -p t261 Не случайно выделил COM8 жирным шрифтом - имя порта должно совпадать с тем, который у Вас определился на шаге 7. В ответ должны получить нечто наподобие: avrdude: Version 5.5, compiled on Jun 9 2008 at 14:32:04 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ System wide configuration file is "c:\WinAVR-20080610\bin\avrdude.conf" Using Port : COM8 Using Programmer : avr910 AVR Part : ATTINY261 Chip Erase delay : 4000 us PAGEL : PB3 BS2 : PB2 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 10 4 0 no 128 4 32 4000 4000 0xff 0xff flash 65 6 32 0 yes 2048 32 64 4500 4500 0xff 0xff signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 Programmer Type : avr910 Description : Atmel Low Cost Serial Programmer Found programmer: Id = "AVR ISP"; type = S Software Version = 2.3; Hardware Version = 1.0 Programmer supports auto addr increment. Programmer supports the following devices: Device code: 0x55 = ATtiny12 Device code: 0x56 = ATtiny15 Device code: 0x5e = ATtiny2313 Device code: 0x76 = ATMEGA8 Device code: 0x74 = ATMEGA6450 Device code: 0x72 = ATMEGA32 Device code: 0x45 = ATMEGA64 Device code: 0x74 = ATMEGA6450 Device code: 0x43 = ATMEGA128 Device code: 0x63 = ATMEGA162 Device code: 0x78 = ATMEGA169 Device code: 0x6c = AT90S4434 Device code: 0x38 = AT90S8515 Device code: 0x65 = (unknown) avrdude: warning: selected device is not supported by programmer: t261 avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0xff0000 avrdude: Expected signature for ATTINY261 is 1E 91 0C avrdude: safemode: lfuse reads as FF avrdude: safemode: Verify error - unable to read hfuse properly. Programmer may not be reliable. avrdude: safemode: To protect your AVR the programming will be aborted avrdude done. Thank you. Все в порядке, наша платка заработала (как программатор avr910, "Atmel Low Cost Serial Programmer"). 8. Теперь осталось немного поработать паяльником - спаять нехитрую схемку (цоколевка "мамы" стандартная для ISP-коннектора Atmel, и совпадает с цоколевкой коннекторов ISP макетных плат AVR-USB-MEGA16, AVR-USB-TINY45 и AVR-USB162). Хотя... назвать это схемой как-то язык не поворачивается, настолько она простая: Вот готовое устройство в сборе. Как видно на фотографии - почти все сигналы (кроме RESET) берутся с разъема ISP платы, и нумерация контактов совпадает. 9. Подключите программируемое устройство к плате программатора. Если устройство потребляет мало тока, то питание для него можно отдельно не подсоединять, а взять прямо с коннектора ISP. При этом перемычка J3, установленная на плате программатора, будет переключать напряжение питания программируемого устройства - 5 или 3.3 вольт (иногда это может понадобиться). Я подключил для программирования плату AVR-USB-MEGA16.
Записывается прошивка в программируемую плату (firmware) следующей командой: c:\myproject>c:\WinAVR-20080610\bin\avrdude.exe -vv -F -P COM8 -c avr910 -p m16 -U flash:w:main.hex Перемычки (fuses) записываются следующей командой: c:\myproject>c:\WinAVR-20080610\bin\avrdude.exe -v -F -P COM8 -c avr910 -p m16 -U hfuse:w:0x09:m -U lfuse:w:0xff:m Немного пояснений по опциям командной строки avrdude. В этом примере я записывал в макетную плату AVR-USB-MEGA16 прошивку HID-устройства, управляющего светодиодом (файл main.hex). Он указывается в команде -U flash:w:main.hex. Здесь -U означает "универсальную" команду, которая сразу последовательно делает чтение/запись/проверку чипа. Опции -v и -vv включают подробный и более подробный вывод сообщений соответственно. Опция -F игнорирует слово сигнатуры, считываемое с чипа (оно уникальное для каждого типа чипа Atmel), что позволяет программировать даже те чипы, которые программатор типа avr910 не поддерживает. Опция -P COM8 задает порт подключения программатора (виртуальный COM-порт, о котором мы уже говорили). Опция -c avr910 задает тип программатора. Опция -p m16 задает тип программируемого чипа, в данном случае задан микроконтроллер ATmega16, который установлен на программируемой плате AVR-USB-MEGA16. Опции -U hfuse:w:0x09:m -U lfuse:w:0xff:m задают прошивку байтов фьюзов (старший байт здесь равен 09h, младший ffh). 10. В архиве AVRopendous-2009-02-10b.zip, который мы скачали на шаге 1, есть обновление конфига для avrdude, включающее поддержку чипа AT90USB162. Это обновление имеется в новом файле конфига avrdude.conf, который лежит в той же папке архива AVRopendous\Firmware\AVRISP_Programmer\. Это простой текстовый файл, удобный для чтения и редактирования. Тупо переписывать Ваш старый конфиг на новый не надо, сначала сравните их и посмотрите, чем они отличаются (возможно, Ваш конфиг более новый, и поддержка AT90USB162 там уже есть). Вот секция конфига, которая добавляет поддержку чипа AT90USB162 (можно просто её добавить текстовым редактором в Ваш старый конфигурационный файл avrdude.conf): #------------------------------------------------------------ # AT90USB162 #------------------------------------------------------------ part id = "usb162"; desc = "AT90USB162"; signature = 0x1e 0x94 0x82; has_jtag = no; chip_erase_delay = 9000; pagel = 0xD7; bs2 = 0xA0; reset = dedicated; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", "x x x x x x x x x x x x x x x x"; timeout = 200; stabdelay = 100; cmdexedelay = 25; synchloops = 32; bytedelay = 0; pollindex = 3; pollvalue = 0x53; predelay = 1; postdelay = 1; pollmethod = 1; pp_controlstack = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; latchcycles = 5; togglevtg = 1; poweroffdelay = 15; resetdelayms = 1; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; chiperasepolltimeout = 10; programfusepulsewidth = 0; programfusepolltimeout = 5; programlockpulsewidth = 0; programlockpolltimeout = 5; idr = 0x31; spmcr = 0x57; rampz = 0x3b; allowfullpagebitstream = no; memory "eeprom" paged = no; /* leave this "no" */ page_size = 4; /* for parallel programming */ size = 512; min_write_delay = 9000; max_write_delay = 9000; readback_p1 = 0x00; readback_p2 = 0x00; read = " 1 0 1 0 0 0 0 0", " x x x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", " x x x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", " 0 0 0 0 0 a2 a1 a0", " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", " 0 0 x x x a10 a9 a8", " a7 a6 a5 a4 a3 0 0 0", " x x x x x x x x"; mode = 0x41; delay = 10; blocksize = 8; readsize = 256; ; memory "flash" paged = yes; size = 16384; page_size = 128; num_pages = 128; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0x00; readback_p2 = 0x00; read_lo = " 0 0 1 0 0 0 0 0", " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", " x x x x x x x x", " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", " x x x x x x x x", " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; writepage = " 0 1 0 0 1 1 0 0", " 0 a14 a13 a12 a11 a10 a9 a8", " a7 x x x x x x x", " x x x x x x x x"; mode = 0x41; delay = 6; blocksize = 128; readsize = 256; ; memory "lfuse" size = 1; write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", "x x x x x x x x i i i i i i i i"; read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; ; memory "hfuse" size = 1; write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", "x x x x x x x x i i i i i i i i"; read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; ; memory "efuse" size = 1; write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", "x x x x x x x x x x x x i i i i"; read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; ; memory "lock" size = 1; read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", "x x x x x x x x x x o o o o o o"; write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", "x x x x x x x x 1 1 i i i i i i"; min_write_delay = 9000; max_write_delay = 9000; ; memory "calibration" size = 1; read = "0 0 1 1 1 0 0 0 x x x x x x x x", "0 0 0 0 0 0 0 0 o o o o o o o o"; ; memory "signature" size = 3; read = "0 0 1 1 0 0 0 0 x x x x x x x x", "x x x x x x a1 a0 o o o o o o o o"; ; ; 11. Для удобства можно воспользоваться графической оболочкой, которая есть для avrdude - avrdude-gui [5]. Установки приложение не требует - достаточно просто скачать и запустить его:
- неправильно подписана галочка для опции -F Verify the device signature. На самом деле опция -F выключает проверку сигнатуры чипа, т. е. следовало бы подписать "disable verify the device signature". Обе ошибки поправимы, поскольку можно вручную откорректировать строку "Command line:" перед нажатием кнопки Execute. Правильнее было бы, конечно, поправить исходный код и перекомпилировать программу. К сожалению, к программе совсем нет справки (как водится у всех GPL-программ). Мне не удалось разобраться, что такое "GiveIO Driver" и 3 кнопки Install, Remove, Status. [Ссылки] 1. avropendous AVR ISP Programmer (AVRdude-compatible) site:code.google.com. |