Программирование AVR WinAVR - пакет программ для написания прошивок AVR, Tiny, Mega (free лицензия) Thu, March 28 2024  

Поделиться

Нашли опечатку?

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

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

1. Скачать тут [1]. Установка проста до безобразия.

2. В качестве примера можно скачать какой-нибудь проект. Неплохо для этого подходит V-USB, скачать тут [2]. Я скачал 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, который можно грузить в среду отладки AVR Studio (ну и отлаживать тем, что есть - эмулятором или симулятором)!

5. Прикрутим программатор на примере JTAGICE mkII, работающего в режиме ISP (In System Programmer) и подключенного через USB. Отредактируйте Makefile (переменную AVRDUDE я закомментировал и ввел переменную JTAGICEII):

#AVRDUDE = avrdude -c jtag2 -p $(DEVICE) -P usb:xx -v 
JTAGICEII = c:Program FilesAtmelAVR ToolsJTAGICEmkIIjtagiceii.exe -d $(DEVICE) -e -mi
  ...
 
flash: main.hex
# $(AVRDUDE) -U flash:w:main.hex:i
    $(JTAGICEII) -pf -if main.hex

Немного комментариев. Несмотря на то, что путь до консольной утилиты jtagiceii.exe (которая поставляется в пакете AVR Studio и служит для управления программатором/эмулятором 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-20080513examplescustom-classfirmware>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-20080610binavrdude.conf"
         Using Port            : usb:xx
         Using Programmer      : jtag2
avrdude: usbdev_open(): did not find any (matching) USB device "usb:xx"
 
c:asmavrusb-20080513examplescustom-classfirmware>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-20080610binavrdude.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 нужна только потому, что папка usbdrv копируется.
 $(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, который можно загрузить в AVR Studio, и в нем с помощью эмулятора 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, и можно их установить, если Вы раньше не установили эти драйвера вместе с пакетом AVR Studio. Драйвера находятся в папке \utils\libusb\bin. Процедура установки подробно описана в разделе "LibUSB-Win32" файла справки WinAVR-user-manual.html.

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

[Ссылки]

1. Download WinAVR site:sourceforge.net.
2. Download V-USB site:obdev.at.

 

Комментарии  

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

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


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

Top of Page