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.
Существует открытый проект Evertool - программатор, совместимый одновременно с STK500 и JTAGICE. Имеются схема и тексты, но нет интерфейса USB.
AVR-ISP500: самодельный USB-программатор для порта ICSP
Для повседневной работы с чипами AVR я изготовил самодельный программатор, совместимый с AVRISP2. По сути это клон открытого проекта AVRUSB500. Отличия:
- Используется ATmega163 (в оригинале ATmega8).
- Генератор 7.3728 МГц (был 3.6864 МГц).
- Сигналы ISP находится на других ножках порта PB.
Оригинальный фирменный программатор AVRISP описан здесь.
Для скачивания доступны следующие файлы:
- Бинарный файл прошивки avrisp500.hex
- Правки к исходным текстам 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 ICSP-10:
JTAGICE: USB-программатор и отладчик для порта JTAG
Приобрел EU-JTAGICE-USB - программатор для AVR через порт USB. Сделано в России, полный аналог AVR JTAGICE фирмы Atmel. Цена - около $100. Существует также аналог от Olimex.
Изначально изделие имело прошивку (firmware version) 7E. Чтобы обновить её, пришлось потрудиться. Штатным путём эта операция не проходила: AVRPROG не “видел” устройство. Пришлось использовать загрузочный блок от проекта Evertool. Чтобы прошить его программатором STK200, потребовалось внести некоторые аппаратные изменения.
Шаг 1: переделка разъёма ICSP
На плате имеется 6-контактный разъем ICSP. Изначально он подключен к микросхеме AT90S2313. Подключим его к ATmega16. Надо перерезать проводники у ножек 1, 16, 17, 18 и 19 чипа AT90S2313. Затем паяем контакт 5 разъёма ICSP к ножке 4 чипа ATmega16.
Шаг 2: прошивка загрузочного блока
Из дистрибутива 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. Её можно скачать здесь: jtagice80.hex.
Разъём AVR JTAG:
Для отладки необходимо использовать GDB и 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