Atmel встраивает в чипы два протокола программирования: ICSP и JTAG. ICSP - это специальный фирменный последовательный интерфейс, использующий сигналы MOSI, MISO, SCK, /RESET. Реализован во всех чипах Atmel. Для ICSP имеется много программаторов: от простейшего STK200 на порт LPT до AVRISP2 с интерфейсом USB. JTAG - более современный протокол, позволяющий не только программирование, но и отладку программ. Сигналы TDI, TDO, TCK, TMS. Имеется только в старших моделях чипов: ATmega16, ATmega162, ATmega169, ATmega32, ATmega323, ATmega64, ATmega128. Программатор/отладчик для порта JTAG называется JTAGICE. Существует открытый проект [[http://www.siwawi.arubi.uni-kl.de/avr_projects/evertool/ | Evertool]] - программатор, совместимый одновременно с STK500 и JTAGICE. Имеются схема и тексты, но нет интерфейса USB. ---- ====== AVR-ISP500: самодельный USB-программатор для порта ICSP ====== Для повседневной работы с чипами AVR я изготовил самодельный программатор, совместимый с AVRISP2. По сути это клон открытого проекта [[http://www.tuxgraphics.org/electronics/200510/article05101.shtml | AVRUSB500]]. Отличия: * Используется ATmega163 (в оригинале ATmega8). * Генератор 7.3728 МГц (был 3.6864 МГц). * Сигналы ISP находится на других ножках порта PB. [[avr:usbprog:isp500-sch |{{avr:usbprog:isp500-sch-small.png}}]][[avr:usbprog:isp500-board |{{avr:usbprog:isp500-top-small.jpg}}]] Оригинальный фирменный программатор AVRISP [[http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2726 | описан здесь]]. Для скачивания доступны следующие файлы: * {{avr:usbprog:avr-isp500.sch | Схема}} и {{avr:usbprog:avr-isp500.brd | рисунок платы}} в формате [[http://cadsoft.de/info.htm | Eagle]] * Бинарный файл прошивки {{avr:usbprog:avrisp500.hex}} * Правки к исходным текстам {{avr:usbprog:avrusb500-1.7-vak.pch}} Чтобы прошить устройство, надо подключить его к программатору, имеющему порт ISCP, и установить два джампера. Пример прошивки через STK200 и avrdude: avrdude -cstk200 -patmega163 -Enoreset -e -Uavrisp500.hex -Ulfuse:w:0xCD:m -Uhfuse:w:0x07:m Разъём AVR ICSP-6: {{avr-icsp6.gif}} Разъём AVR ICSP-10: {{http://www.olimex.com/dev/images/avr-icsp-10.gif}} ---- ====== JTAGICE: USB-программатор и отладчик для порта JTAG ====== {{http://terraelectronica.ru/images/catalog/kt-eujtagice.jpg}} Приобрел [[http://www.rtcs.ru/popup_product.asp?id=5466 | EU-JTAGICE-USB]] - программатор для AVR через порт USB. Сделано в России, полный аналог [[http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2737 | AVR JTAGICE]] фирмы Atmel. Цена - около $100. Существует также [[http://www.olimex.com/dev/avr-usb-jtag.html | аналог от Olimex]]. Изначально изделие имело прошивку (firmware version) 7E. Чтобы обновить её, пришлось потрудиться. Штатным путём эта операция не проходила: AVRPROG не "видел" устройство. Пришлось использовать загрузочный блок от проекта [[http://www.siwawi.arubi.uni-kl.de/avr_projects/evertool/ | Evertool]]. Чтобы прошить его программатором STK200, потребовалось внести некоторые аппаратные изменения. == Шаг 1: переделка разъёма ICSP == На плате имеется 6-контактный разъем ICSP. Изначально он подключен к микросхеме AT90S2313. Подключим его к ATmega16. Надо перерезать проводники у ножек 1, 16, 17, 18 и 19 чипа AT90S2313. Затем паяем контакт 5 разъёма ICSP к ножке 4 чипа ATmega16. == Шаг 2: прошивка загрузочного блока == Из [[http://www.siwawi.arubi.uni-kl.de/avr_projects/evertool/evertool_SW07_HW09_PB0_20050211.zip | дистрибутива Evertool]] извлекаем файл evertool.hex и прошиваем его, используя программатор STK200 и утилиту avrdude: avrdude -cstk200 -patmega16 -U lfuse:w:0xff:m -U hfuse:w:0xd8:m -U flash:w:evertool.hex -U lock:w:0x2f:m == Шаг 3: установка джампера загрузки == Чтобы запустить загрузочный блок в режиме обновления, необходимо закоротить ножку 25 чипа ATmega16 на землю. На плате есть соответствующее отверстие, куда можно запаять контактный вывод. Соединяем его, например, с контактом 2 разъёма JTAG. После этого выключаем и снова включаем питание платы. == Шаг 4: обновление версии JTAGICE == Вызываем AVRPROG. Он обнаружит устройство "ATmega16 boot". Выбираем для прошивки файл "/Program Files/Atmel/AVR Tools/JTAGICE/Upgrade.ebn". Затем нажимаем кнопку "Program" в рамке "Flash". После завершения убираем джампер с ножки 25 и передёргиваем питание. Устройство готово к работе. После обновления у меня получилась версия прошивки (firmware version) 80. Её можно скачать здесь: {{avr:usbprog:jtagice80.hex}}. Разъём AVR JTAG: {{http://www.olimex.com/dev/images/avr-jtag.gif}} Для отладки необходимо использовать GDB и [[http://avarice.sourceforge.net/ | AVARICE]]. Под Ubuntu Linux их можно установить командой: sudo apt-get install gdb-avr avarice Вызов отладчика: avarice --jtag /dev/ttyUSB0 :4242 gdb test_timer.out (gdb) target remote localhost:4242 (gdb) break main (gdb) continue