Как из макетки AVR-USB162 сделать ISP программатор, совместимый с avrdude |
Написал microsin | |||
20.04.2009 | |||
Тем, кто хорошо во всем разбирается, дам только ссылку, и дальше можно не читать - http://code.google.com/p/avropendous/wiki/AVR_ISP_Programmer. И, на всякий случай, расписываю процесс по шагам (на платформе Windows XP). 1. Скачиваем AVRopendous-2009-02-10b.zip release по ссылке http://avropendous.googlecode.com/files/AVRopendous-2009-02-10b.zip (ссылку для скачки можно также найти на страничке http://code.google.com/p/avropendous/wiki/AVR_ISP_Programmer, она там первая). 2. Распаковываем из архива 2 файла - "AVRISP_Programmer.hex" и "LUFA AVR ISP Programmer.inf", кладем их в произвольное удобное место. Файлы в архиве запрятаны в папке AVRopendous\Firmware\AVRISP_Programmer\. 3. Подключаем макетку AVR-USB162 к компьютеру через интерфейс USB. Если платка не чистая (в ней что-то записано, но bootloader еще не стерт), то вводим платку в режим DFU Flip. Для этого нажимаем кнопку SW1 RESET, удерживаем её, нажимаем кнопку SW2 HWB и, удерживая её, отпускаем кнопку SW1 RESET, потом отпускаем SW2 HWB. После этой процедуры у нас в системе должно появиться устройство LibUSB-Win32 Devices\AT90USB162 (см. в Диспетчере Устройств). Если не появилось, значит надо перепрошить bootloader (Вы его каким-то образом стерли).
Если же у Вас в чипе разрешен режим debugWire, то необходимо сначала отключить этот режим, чтобы заработал режим последовательного программирования ISP (в режиме debugWire технология Flip тоже не работает. Как все запущено, однако!..). Чтобы отключить debugWire делаем следующее. После этого можно попытаться войти в режим Flip (ранее указанной процедурой с кнопками) и перейти к шагу 4. Если не вышло, то стереть чип ISP-программатором, и этим же программатором залить прошивку AVRISP_Programmer.hex. 4. Запускаем программную оболочку Flip (как её устанавливать и что это такое, см. тут - http://microsin.ru/content/view/685/44/. В меню выбираем 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 (как ставить и что это такое, см. тут - http://microsin.ru/content/view/613/44/), она находится в папке c:\WinAVR-20080610\bin\ (циферки в имени означают просто дату сборки пакета WinAVR). Проверяем, работает ли наша платка как программатор (переходим в папку c:\WinAVR-20080610\bin и вводим в командной строке):
Не случайно выделил COM8 жирным шрифтом - имя порта должно совпадать с тем, котоый у Вас определился на шаге 7. В ответ должны получить нечто наподобие: System wide configuration file is "c:\WinAVR-20080610\bin\avrdude.conf"
Block Poll Page
Programmer Type : avr910
Found programmer: Id = "AVR ISP"; type = S
Programmer supports the following devices:
avrdude: warning: selected device is not supported by programmer: t261 Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0xff0000 avrdude done. Thank you.
Все в порядке, наша платка заработала (как программатор avr910, "Atmel Low Cost Serial Programmer").
Вот готовое устройство в сборе. Как видно на фотографии - почти все сигналы (кроме RESET) берутся с разъема ISP платы, и нумерация контактов совпадает. 9. Подключаем программируемое устройство к плате программатора. Если устройство потребляет мало тока, то питание для него можно отдельно не подсоединять, а взять прямо с коннектора ISP. При этом перемычка J3, установленная на плате программатора, будет переключать напряжение питания программируемого устройства - 5 или 3.3 вольт (иногда это может понадобиться). Я подключил для программирования плату AVR-USB-MEGA16.
Записываем прошивку в программируемую плату (firmware) следующей командой:
Записываем перемычки (fuses) следующей командой: Немного пояснений по опциям командной строки 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):
#------------------------------------------------------------
chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
timeout = 200;
pp_controlstack =
idr = 0x31;
memory "eeprom"
write = " 1 1 0 0 0 0 0 0",
loadpage_lo = " 1 1 0 0 0 0 0 1",
writepage = " 1 1 0 0 0 0 1 0",
mode = 0x41;
memory "flash"
read_hi = " 0 0 1 0 1 0 0 0",
loadpage_lo = " 0 1 0 0 0 0 0 0",
loadpage_hi = " 0 1 0 0 1 0 0 0",
writepage = " 0 1 0 0 1 1 0 0",
mode = 0x41;
memory "lfuse"
read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
memory "hfuse"
read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
memory "efuse"
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
memory "lock"
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
memory "calibration"
memory "signature"
11. Для удобства можно воспользоваться графической оболочкой, которая есть для avrdude - avrdude-gui, см. http://sourceforge.net/projects/avrdude-gui/, там же найдете ссылку на загрузку. Установки приложение не требует - достаточно просто запустить его: Обе ошибки поправимы, поскольку можно вручную откорректировать строку "Command line:" перед нажатием кнопки Execute. Правильнее было бы, конечно, поправить исходный код и перекомпилировать программу. К сожалению, к программе совсем нет справки (как водится у всех GPL-программ). Мне не удалось разобраться, что такое "GiveIO Driver" и 3 кнопки Install, Remove, Status. |
|||
Последнее обновление ( 15.05.2010 ) |