Программирование AVR: работа с USB Программатор AVR vusbtiny Wed, December 11 2024  

Поделиться

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

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


Программатор AVR vusbtiny Печать
Добавил(а) microsin   

Программатор собран на чипе ATtiny85 (или ATtiny45), работает без кварца, и наверное это самый простой и самый маленький из программаторов AVR, который работает через USB. Проект был опубликован на сайте simpleavr.com, в этой статье переведенное и доработанное описание программатора.

Все выводы микроконтроллера ATtiny45 (ATtiny85) задействованы, даже вывод сброса RESET (для этого необходимо специальным образом запрограммировать фьюзы, см. далее). На рисунке показана цоколевка микроконтроллера, и красным шрифтом сигналы программатора, которые соответствуют его выводам.

ATtiny85

RESET выход сигнала сброса для программируемого устройства (внешнего микроконтроллера AVR). Чтобы firmware программатора могло использовать ножку этого порта, необходимо запрограммировать фьюз RSTDISBL.
D- сигнал интерфейса USB.
D+ сигнал интерфейса USB.
MOSI выход программатора, вход программируемого устройства. Через эту линию данные передаются от программатора к программируемому чипу AVR.
MISO вход программатора, выход программируемого устройства. Через эту линию данные считываются программатором из программируемого чипа AVR.
SCL сигнал тактов данных, как для MOSI, так и для MISO. Выход программатора, вход программируемого устройства.

vusbtiny-sch

В firmware программатора используется библиотека V-USB [1], которая позволяет реализовать программную поддержку протокола USB 1.0 без использования кварцевого резонатора (работает внутренний генератор на 16.5 МГц, программно подстраиваемый по частоте импульсов конца фрейма EOF USB).

[Особенности программатора vusbtiny]

1. Логика программирования взята из исходного кода программатора usbtiny isp [2].
2. Как и для usbtiny isp, в качестве утилиты программирования используется avrdude [3]. Есть версии этой утилиты и для Linux, и для Windows.
3. Программатор имеет очень маленькие размеры.
4. Простая схема, минимальное количество деталей. Программатор можно собрать самому и он получается очень дешевым.
5. Питается программатор от интерфейса USB. Можно также применить питание от программируемого устройства.
6. Исходный код программатора открыт, при необходимости Вы можете доработать или изменить функционал программатора.
7. Программатор может работать под управлением Linux и Windows (благодаря кроссплатформенной утилите программатора avrdude).

Имейте в виду, что сигнальные линии до программируемого устройства не имеют защиты. Вы можете на всякий случай добавить резисторы номиналом 1..2 кОм на линии SCK и MOSI для защиты программатора от возможного неправильного подключения к программируемому устройству (на схеме эти резисторы показаны пунктиром).

[Список деталей]

- микроконтроллер Atmel AVR ATtiny45 (или ATtiny85).
- диоды Зенера (стабилитроны) на 3.6V (1N747, BZX79, и т. п., однако не ставьте стабилитроны, рассчитанные на 1 ватт).
- резистор 68 ом, 2 шт.
- резистор 1.5 кОм, 1 шт.
- конденсатор 0.22 мкФ, 1шт.
- маленькая плата для отладки на 170 точек соединения (mini breadboard).
- кабель USB.
- (необязательно) резисторы 1..2 кОм для защиты выходных сигналов программатора, 2 шт.

[Необходимые инструменты]

- работающий программатор AVR. Он нужен, чтобы записать firmware программатора, и правильно установить фьюзы микроконтроллера ATtiny45 (ATtiny85).
- компьютер, на котором можно запустить утилиту программатора.

[Указания по использованию]

1. Программатор vusbtiny работает совместно с консольной программой/утилитой avrdude [3], и avrdude видит программатор как usbtiny programmer.
2. Программатор подает питание (VCC) на программируемое устройство от интерфейса USB.
3. Коннектор J2 предназначен для подключения к программируемому устройству.
4. Необходимо подключать и отключать программируемое устройство (через J2) только тогда, когда программатор не находится в режиме программирования.
5. На разъем J2 выводится сигнал сброса RESET, который в исходном (неактивном) состоянии имеет высокий логический уровень.
6. Перед началом программирования, когда неактивен сигнал сброса RESET (он имеет уровень лог. 1), другие выводы программируемого устройства (MISO, MOSI, CLK) находятся в высокоимпедансном, "третьем" состоянии (hi-Z state).
7. Процесс программирования начинается с переводом сигнала RESET в состояние лог. 0. При этом MISO становится входом программатора (выходом программируемого устройства), а MOSI, CLK становятся выходами программатора (входами программируемого устройства).

На рисунке показано цоколевка размещение деталей и соединений на макетном поле breadboard. На фото показан внешний вид монтажа.

vusbtiny bb vusbtiny02

[Фьюзы микроконтроллера ATtiny85]

vusbtiny-fuses

В таблице показаны фьюзы микроконтроллера ATtiny45 (ATtiny85), их отличие от фьюзов по умолчанию, и расшифровано значение отличающихся фьюзов (отличающиеся значения фьюзов помечены красным цветом).

CKDIV8 бит, который отключает делитель тактовой частоты для ядра. Раньше частота тактового генератора делилась на 8. В программаторе vusbtiny делитель отключен, чтобы частота тактов могла быть 16.5 МГц.
CKSEL1, CKSEL0 биты, задающие режим работы тактового генератора. Раньше этими битами был включен внутренний RC генератор микроконтроллера, работающий на 8 МГц (и его частота была поделена на 8, так как работал делитель). В программаторе vusbtiny тактовый генератор работает в режиме PLL (Phase Locked Loop, фазовая автоподстройка частоты). Именно этот режим работы внутреннего генератора позволяет работать с интерфейсом USB без использования кварцевого резонатора.
RSTDSBL бит, который управляет режимом работы ножки 1 микроконтроллера. Раньше этот вывод работал как аппаратный вход сброса. В программаторе vusbtiny эта ножка используется как обычный порт ввода/вывода, которым можно управлять программно, и на него выводится сигнал RESET интерфейса программирования ISP.
BODLEVEL1 один из битов управления детектором качества напряжения питания (Brown Out Detector). В заводских установках этот детектор был отключен. В программаторе vusbtiny детектор настроен на напряжение 2.7 вольта. Если напряжение питания упадет ниже 2.7 вольта, то произойдет аппаратный сброс микроконтроллера vusbtiny.

[Сборка vusbtiny firmware из исходного кода, прошивка чипа программатора]

Проект был написан и собран в среде linux ubuntu lucid box, с использованием инструмента разработчика avr-gcc toolchain [5]. Подразумевается, что у Вас уже установлен avr-gcc, и Вы можете скачать исходный код vusbtiny (распространяется под лицензией gnu gpl v2), ссылка на закачку [4]. Можно также скомпилировать исходный код и в среде Windows, имея установленный пакет разработчика WinAVR [6].

Структура исходного кода выдержана в стиле библиотеки V-USB. Скачайте vusbtiny.tgz [4] и распакуйте его в папку проекта. В файле main.c содержится основной код программатора, который был взят от usbtiny programmer и модифицирован. Поддиректория usbdrv содержит код библиотеки V-USB.

Процесс сборки по шагам в среде Linux:

1. Распакуйте файл vusbtiny.tgz [4] командой tar -zxvf vusbtiny.tgz.
2. Перейдите в папку vsubtiny, выполнив команду cd vsubtiny.
3. Отредактируйте makefile, чтобы он соответствовал Вашему применяемому микроконтроллеру, для этого поменяйте строку с макросом PROGRAMMER_MCU на "PROGRAMMER_MCU=t45" или PROGRAMMER_MCU=t85
4. Выполните make clean.
5. Выполните make.
6. Запрограммируйте полученный двоичный код Вашим ISP программаторов в чип vsubtiny (ATtiny45 или ATtiny85).

Для того, чтобы пользоваться программатором через makefile, предназначен макрос AVRDUDE_PROGRAMMERID, в котором указан тип программатора. Например, для программатора usbtiny и для vusbtiny строка в makefile должна быть:

AVRDUDE_PROGRAMMERID=usbtiny

После того, как настроите программатор и подключите программируемый микроконтроллер к чипу, выполните команду make install, и код vusbtiny firmware запишется в чип программатора.

Далее необходимо поменять фьюзы так, чтобы firmware могло использовать вывод 1 микроконтроллера (который пока по умолчанию используется для сброса). Для этого выполните команду:

avrdude -c usbtiny -p t45 -V -U lfuse:w:0xe1:m -U hfuse:w:0x5d:m -U efuse:w:0xff:m

Внимание! Эта команда запретит дальнейшую перепрошивку запрограммированного чипа, так как вывод 1 микроконтроллера перестанет работать как вход сброса. Это происходит потому, что фьюз RSTDISBL будет перепрошит так, что он начнет работать как простой порт ввода/вывода (чтобы им можно было управлять программно), и перестанет работать как вход сброса микроконтроллера (вход сброса должен работать, чтобы можно было запрограммировать микроконтроллер через протокол ISP). Чтобы стереть/перепрограммировать микроконтроллер программатора, нужно использовать специальный высоковольтный программатор HVSP. Только им можно восстановить фьюзы, чтобы чип снова программировался по ISP.

[Использование программатора]

Если Вам нужно использовать vusbtiny для программирования 8-выводных AVR в корпусе DIP8, то можете просто повесить программируемый чип сверху, как показано на фото (сверху насажен программируемый чип ATtiny13V). Программатор vusbtiny разработан так, что программирующие ножки программатора совпадают с соответствующими ножками программируемого чипа. Однако нужно отключить выводы 2 и 3 программируемого чипа (можно немного отогнуть их в сторону, или использовать полоску скотча), чтобы они не мешали работе сигналов D+ и D- интерфейса USB.

vusbtiny03 vusbtiny05

Для программирования внешних устройств нужно использовать коннектор ISP J2. Аббревиатура ISP расшифровывается как In-System Programming. Для соединения с программируемым устройством применяется кабель, который с одной стороны подключается к J2 программатора, а с другой стороны к программируемому устройству.

vusbtiny04

На рисунках показаны стандартные цоколевки кабелей ISP (они бывают ISP6PIN 2x3 и ISP10PIN 2x5).

vusbtiny-ISP6PIN-cable

vusbtiny-ISP10PIN-cable

[Устранение проблем (troubleshooting)]

1. Не прошивается firmware? Проверьте исходный программатор, возможно нужно подстроить скорость тактирования с помощью флага -B утилиты avrdude. Сначала попробуйте прочитать чип - если он совсем не читается, то возможно в нем неправильно установлены фьюзы. В этом случае возможно нужно подать внешнюю тактовую частоту, либо воспользоваться программатором HVSP для восстановления фьюзов.

2. Часто чип не прошивается из-за неправильного подключения. Проверьте все контакты соединения с программируемым устройством.

3. Если программатор не видится в компьютере как устройство USB, проверьте диоды Зенера 3.6V. Вы можете их заменить на 400 или 500 милливаттные версии (не используете диоды Зенера на 1 Ватт). Если программатор работает неустойчиво, попробуйте также уменьшить значение резистора R3 до 1.2 кОм.

4. Поэкспериментируйте с флагом -B утилиты avrdude, попробуйте применить более короткий кабель USB.

5. Windows: проблема в компиляции firmware vusbtiny после make clean, make, компилятор выдает ошибку:
make: *** No rule to make target `usbdrv/usbdrvasm.o', needed by `vusbtiny.out'. Stop.

Проблема была в том, что make clean запускал строку $(REMOVE) $(GENASMFILES), которая удаляла файл usbdrvasm.S. Под Linux этот файл не удалялся, так как там в именах маленькие и большие буквы дают разные имена, а в Windows имена usbdrvasm.S и usbdrvasm.s совпадают. Закомментировал строку $(REMOVE) $(GENASMFILES). После этого проект стал нормально компилироваться после выполнения команд make clean, make.

6. Windows: снова ошибка, связанная с длинными именами файлов. Возникает при повторной перекомпиляции из-за того, что файл usbdrvasm.S перетирается генерируемым дампом.
usbdrv/usbdrvasm.s:1102:57: error: unterminated comment
make: *** [usbdrv/usbdrvasm.o] Error 1

Файл перетирался из-за опций ASMFLAGS makefile, исправил. Было раньше:

ASMFLAGS =-I. $(INC) -mmcu=$(MCU)   \
     -x assembler-with-cpp          \
     -DF_CPU=16500000               \
     -Wa,-gstabs,-ahlms=$(firstword \
     $( < :.S=.lst) $( < .s=.lst))

Исправленные опции ASMFLAGS, которые не перетирают usbdrvasm.S:

ASMFLAGS =-I. $(INC) -mmcu=$(MCU) \
     -x assembler-with-cpp        \
     -DF_CPU=16500000             \
     -Wa,-gstabs

[Программатор vusbtiny, собранный на макетной плате AVR-USB-TINY45]

AVR-USB-TINY45-vusbtiny-programmer-simple-top-IMG_1562.JPG AVR-USB-TINY45-vusbtiny-programmer-simple-bottom

[Ссылки]

1. V-USB site:obdev.at - официальный сайт библиотеки V-USB.
2. USBtiny site:dicks.home.xs4all.nl - программатор USBtiny (собран на микроконтроллере ATtiny2313).
3. AVRDUDE - AVR Downloader/UploaDEr site:nongnu.org - AVRDUDE, популярная консольная утилита для управления программаторами.
4. 120520vusbtiny.zip - исходный код программатора vusbtiny (проекты для компиляции под Linux и Windows), документация, готовые прошивки firmware для ATtiny45 и ATtiny85, драйвер для операционной системы Windows.
5. avr-gcc toolchain (avr-libc) site:nongnu.org.
6. WinAVR download site:sourceforge.net - набор инструментов разработчика WinAVR.

 

Комментарии  

 
0 #8 kim095 13.07.2016 20:54
Собрал схему с стабилитронами BZX55C3V6. Устройство USB не опознано. В чём может быть дело?

microsin: причин может быть множество. Прогуглите "Почему не работает библиотека V-USB с микроконтроллер ом AVR?".
Цитировать
 
 
0 #7 pavel 21.07.2013 12:35
А attiny85v подойдёт?

microsin: подойдет.
Цитировать
 
 
0 #6 FukaNora 24.12.2012 21:34
кстати попробовал сверху 13 тиньку прошить, перепутал полярности(недо глядел). после того как услышал звук похожий на удар статикой и учуял запах горелого, понял что все... :sad:

З.Ы. Не повторяйте моих ошибок! :-|
Цитировать
 
 
0 #5 FukaNora 24.12.2012 21:29
немного повозившись, не найдя нужного кондера, вместо него поставил светодиод на 3 вольта с килло-Омным одно-ваттным резистором и все получилось. Я просто в восторге!
спасибо большое за статью. :zzz
Цитировать
 
 
0 #4 FukaNora 20.12.2012 17:59
Кстати, не подскажете в какой программе так красиво схема и цоколевка была сделана?

microsin: использовалась программа Microsoft Visio 2003. Еще могу порекомендовать для той же цели CorelDraw или CorelXara.
Цитировать
 
 
0 #3 FukaNora 20.12.2012 17:53
fukanora@ubuntu :~/Загрузки/vusbtiny/Linux/vusbtiny$ make
avr-gcc -I. -Iusbdrv -g -mmcu=attiny85 -Os -DF_CPU=16500000 -fpack-struct -fshort-enums -funsigned-bitfields -funsigned-char -Wall -Wstrict-prototypes -Wa,-ahlms=main.lst -c main.c -o main.o
main.c:38:20: fatal error: avr/io.h: Нет такого файла или каталога
compilation terminated.
make: *** [main.o] Ошибка 1

а если я готовую прошивку на тиньку85 из папки хекс возьму и прошью ей работать будет?

microsin: да, будет.
Цитировать
 
 
0 #2 FukaNora 20.12.2012 17:08
А можно без него? Я не нашел его в магазинах(конде р) :sad:

microsin: без конденсатора по питанию никак нельзя. Как его можно было не достать?.. Это самая не дефицитная деталь. В магазине не было, потому что они везде под ногами валяются. Выкусите кондер или выпяйте из старой материнской платы, или дохлого жесткого диска. Кондеров там тучи.
Цитировать
 
 
0 #1 FukaNora 13.12.2012 14:18
Керамический конденсатор случайно не на 22 пФ?

microsin: нет конечно, тут должен быть конденсатор на 0.22 мкФ. Конденсатор на 22 пикофарад по питанию бесполезен. Вот если замените его танталом на 22 мкФ, то пожалуйста.
Цитировать
 

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


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

Top of Page