Главная arrow Программирование arrow AVR arrow WinAVR - пакет программ для написания прошивок AVR, Tiny, Mega (free лицензия) Friday, September 22 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

WinAVR - пакет программ для написания прошивок AVR, Tiny, Mega (free лицензия) Версия для печати
Написал microsin   
27.08.2008

1. Скачать тут - http://winavr.sourceforge.net/ . Установка проста до безобразия.

2. В качестве примера можно скачать какой-нибудь проект. Неплохо для этого подходит AVR-USB, скачать тут - http://www.obdev.at/avrusb/. Я скачал avrusb-20080513.zip. Распаковываем в отдельный каталог.

3. Будем компилировать примерчик examples\custom-class\firmware\. Заходим в этот каталог, редактируем файл Makefile. Там нужно прописать тип процессора AVR, тактовую частоту, значение перемычек и другие параметры (см. текст Makefile, он хорошо задокументирован комментариями). Вот фрагмент файла Makefile, где были внесены изменения (остальное поначалу можно не трогать):
DEVICE  = atmega16
F_CPU   = 16000000    # частота в герцах
FUSE_L  = 0x9f
FUSE_H  = 0xc9
AVRDUDE =
CFLAGS  = -Iusbdrv -I. -DDEBUG_LEVEL=0
OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o main.o
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(F_CPU) $(CFLAGS) -mmcu=$(DEVICE)

4. Вводим команду make hex. И... О чудо! Получаем файл main.hex, который можно шить в кристалл, и main.elf, который можно грузить в среду отладки AVRStudio (ну и отлаживать тем, что есть - эмулятором или симулятором)!

5. Прикрутим программатор на примере JTAGICE mkII, работающего в режиме ISP (In System Programmer) и подключенного через USB. Редактируем Makefile (переменную AVRDUDE я закомментировал и ввел переменную JTAGICEII):
#AVRDUDE = avrdude -c jtag2 -p $(DEVICE) -P usb:xx -v
JTAGICEII = c:\Program Files\Atmel\AVR Tools\JTAGICEmkII\jtagiceii.exe -d $(DEVICE) -e -mi
  ...

flash: main.hex
#    $(AVRDUDE) -U flash:w:main.hex:i
    $(JTAGICEII) -pf -if main.hex

Немного комментариев. Несмотря на то, что путь до консольной утилиты jtagiceii.exe (которая поставляется в пакете AVRStudio и служит для управления программатором/эмулятором JTAG ICE mkII) содержит пробелы, НЕ НУЖНО здесь применять кавычки. Опция -d $(DEVICE) задает через переменную DEVICE тип микроконтроллера (atmega16), -e указывает стереть устройство перед программированием, -mi включает режим ISP, -pf указывает программировать flash, а -if main.hex указывает входной файл для программирования.

Программатор avrdude.exe вроде (судя по документации doc\avrdude.pdf) должен поддерживать JTAG ICE mkII, подключенный по USB, но к великому сожалению он у меня не заработал - не мог по шине USB найти устройство:
c:\avrusb-20080513\examples\custom-class\firmware>avrdude -c jtag2 -p atmega16 -P usb:xx -v
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            : usb:xx
         Using Programmer      : jtag2
avrdude: usbdev_open(): did not find any (matching) USB device "usb:xx"

c:\asm\avrusb-20080513\examples\custom-class\firmware>avrdude -c jtag2 -p atmega16 -P usb -v
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            : usb
         Using Programmer      : jtag2
avrdude: usbdev_open(): did not find any USB device "usb"
-------

6. Чтобы можно было отлаживать программу эмулятором JTAGICE mkII, нужен файл coff-формата. Он получается из файла *.elf с помощью утилиты avr-copy. Итак, в Makefile нужно внести следующие изменения:
COMPILE = avr-gcc -Wall -Os -gstabs -DF_CPU=$(F_CPU) $(CFLAGS) -mmcu=$(DEVICE)
...
main.elf: usbdrv $(OBJECTS)    # usbdrv dependency only needed because we copy it
    $(COMPILE) -o main.elf $(OBJECTS)

main.hex: main.elf
    rm -f main.hex main.eep.hex
    avr-objcopy -j .text -j .data -O ihex main.elf main.hex
    avr-objcopy --debugging -O coff-ext-avr $< main.cof
    avr-size main.hex
   
    Теперь после команды make hex будет также появляться файл main.cof, который можно загрузить в AVRStudio, и в нем с помощью эмулятора JTAGICE mkII отлаживать программу.

7. После того, как Вы скомпилировали программу и записали её в Ваше USB-устройство, то может понадобиться USB-драйвер. Например, если Вы скомпилировали пример examples\custom-class\firmware\, то если Вы воткнете свое USB-устройство в компьютер, то определится устройство LEDControl, для которого и нужен драйвер. Делается он просто, процесс по шагам:
- скачайте пакет libusb-win32-device-bin-x.x.xx.x.tar.gz с сайта http://sourceforge.net/ (строка для поиска в Google "libusb-win32-device-bin"). Я скачал libusb-win32-device-bin-0.1.12.1.tar.gz.
- в архиве найдите папку bin, в которой есть программа inf-wizard.exe. Распакуйте всю папку bin куда-нибудь во временное место.
- программа inf-wizard.exe позволяет генерировать inf-файлы для устройств avr-usb, которые подключены в настоящий момент. Подключите свое USB-устройство, на сообщения о том, что необходимо установить драйвер, не обращайте внимания. Запустите программу inf-wizard.exe, и следуйте указаниям на экране (на первом экране просто жмем Next).
- на втором экране отобразится список устройств, которые определила программа, и для которых может быть сгенерированы файлы драйвера. Здесь "Vendor ID" и "Product ID" показывают шестнадцатеричные величичины, которые вы ввели в файле examples\custom-class\firmware\usbconfig.h, опции USB_CFG_VENDOR_ID и USB_CFG_DEVICE_ID соответственно. Значение "Description" берется из опции USB_CFG_DEVICE_NAME того же файла examples\custom-class\firmware\usbconfig.h.
- на третьем экране "Vendor ID (hex format)" и "Product ID (hex format)" оставляем без изменений, а Manufacturer Name и Device Name лучше поменять на что-либо более информативное. Жмем Next.
- появится диалог для сохранения inf-файла. Указываем ту же самую папку, где находится inf-wizard.exe (поскольку там же лежат другие необходимые для установки драйвера файлы - libusb0.dll, libusb0.sys и другие), имя для inf-файла даем произвольное - предположим, что имя дали your_file. По окончании процесса в папке, откуда мы запустили inf-wizard.exe, появятся файлы your_file.inf, your_file.cat, your_file_x64.cat.
- отключим и снова подключим наше устройство. Появится диалог установки драйвера, где нужно указать месторасположение драйвера там, где находятся наши сгенерированные inf-файлы. После этого в диспетчере устройств должно появиться наше устройство LEDControl. Теперь можно скомпилировать и запустить программу для хоста ().

Для написания собственного драйвера USB понадобится установленный пакет libusb-win32 (см. пункт 10, 11), а также Windows Server 2003 DDK. Я его скачал в виде файла .iso (276 мегабайт) и установил обычным образом.

8. Чтобы можно было откомпилировать ПО хоста, скачаем компилятор gcc. Он есть в составе пакета MinGW (http://www.mingw.org/). Заходим на сайт MinGW, идем по ссылке Today's: MinGW, ищем в низу секцию Download, там есть ссылка на Sourceforge's MinGW project page, оттуда скачиваем пакет. Я скачал "Automated MinGW Installer MinGW 5.1.4", файл MinGW-5.1.4.exe. Запускаем, выбираем Download and install, на вопрос "Which MinGW package do you wish to install?" выбираем Current, в выборе типа инсталляции галочка стоит только на "MinGW base tools", ставим еще галочку на "g++ compiler". Жмем Next, папку установки выбираем c:\MinGW, жмем Next, выбираем месторасположение ярлычков, жмем Install. Запустится процесс скачки из Интернета нужных пакетов (около 18 мегабайт, они будут складываться в текущую папку, откуда запустили MinGW-5.1.4.exe), а потом их распаковка и установка. Если что-то не зачачалось или недокачалось, можно запустить MinGW-5.1.4.exe заново - будет закачиваться только то, чего не хватает в текущей папке (если какой-то файл недокачался и выдает ошибку при распаковке, его нужно удалить перед запуском MinGW-5.1.4.exe).

9. Добавляем в переменную окружения PATH строчку c:\MinGW\bin (я добавил в начало старой переменной PATH c:\MinGW\bin;). Теперь у Вас должны работать команды make, gcc, ld, rm и другие в любой текущей папке (это нужно для компиляции программ через среду Makefile).

10. Устанавливаем пакет libusb\libusb-win32-filter-bin-0.1.12.1.exe, перед установкой файл libusb\readme.txt рекомендует закрыть все программы, работающие с устройствами USB. По окончании установки по умолчанию запустится тест (если не убрать галочку), который показывает все устройства, доступные через библиотеку. Этот тест показывает все устройства USB, для которых установлен драйвер (те устройства USB, у которых восклицательный значок в диспетчере устройств, не показываются), и их параметры - весьма полезная программа!

11. Чтобы правильно откомпилировалось ПО хоста, нужно в файле Makefile (он находится в папке каждого примера) исправить пути до файла usb.h (заголовочный файл) и libusb.a (библиотека usb). С заголовочным файлом я разобрался быстро, а вот с путем до библиотеки я помучился всласть. Предположим, мы хотим откомпилировать программу хоста из пирмера custom-class, для этого заходим в папку examples\custom-class\commandline, и открываем файл Makefile текстовым редактором. Итак, вот секция Makefile, где нужно внести изменения (старую строчку я закомментировал символом #):
#USBFLAGS = -I/usr/local/include
USBFLAGS = -I"c:/Program Files/LibUSB-Win32/include"
#USBLIBS = -L/usr/local/lib -lusb
USBLIBS = -L"c:/Program Files/LibUSB-Win32/lib/gcc" -lusb
  Запутался я тут с настройкой USBLIBS - пытался прописать опцию -llibusb.a, поскольку библиотеки с именем usb не нашел, была библиотека с именем libusb.a. Оказывается, нужно просто указать -lusb (почему, не знаю).
  Теперь, если ввести в каталоге проекта (examples\custom-class\commandline) команду make, то появится файл set-led.exe. Если ввести команду make clean, то удалятся все объектные файлы (с расширением *.o).
  Как вариант, можно внести вышеуказанные изменения в файле Makefile.windows, и компилировать проект командой make -f Makefile.windows.

12. В пакете WinAVR есть драйвера USB для эмулятора JTAG ICE mkII, и можно их установить, если Вы раньше не установили эти драйвера вместес пакетом AVRStudio. Драйвера находятся в папке <install>\utils\libusb\bin. Процедура установки подробно описана в разделе "LibUSB-Win32" файла справки WinAVR-user-manual.html.

13. В папке <install>\utils\bin\ лежит куча консольных unix-like утилит - grep, tail, cat, cmp, cp, cut, date и многие другие (!). Ну и маке, естественно. Путь поиска да этого каталога прописывается при установке WinAVR, так что теперь можно пользоваться мощью консольных команд UNIX в любом текущем каталоге.

Последнее обновление ( 31.03.2013 )
 

Комментарии  

  1. #1 fantom
    2009-01-3121:03:35 Скажи а меню программы на русском языке или нет?
    microsin: наврядли, по крайней мере мне неизвестно. При желании можете русифицировать сами, только - зачем?

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017