Программирование AVR: работа с USB Как портировать проекты V-USB с ATmega16 (ATmega32) на ATtiny45 (ATtiny85) Sat, December 07 2024  

Поделиться

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

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


Как портировать проекты V-USB с ATmega16 (ATmega32) на ATtiny45 (ATtiny85) Печать
Добавил(а) microsin   

При портировании проектов V-USB с макетной платы AVR-USB-MEGA16 на макетную плату AVR-USB-TINY45 столкнулся с рядом особенностей реализации кода, которые решил рассмотреть в этой статье. Надеюсь, она поможет в портировании проектов V-USB между микроконтроллерами старших (ATmegaXX) и младших (ATtinyXX) моделей. 

V-USB-porting.png

Портирование проектов между ATmegaXX и ATtinyXX предоставляет много возможностей. Самый большой плюс, на мой взгляд - теперь можно отлаживать программы для ATtiny на кристаллах ATmega, так как отладка в этом случае намного проще - на ATmega можно передавать отладочную информацию через UART, полноценно использовать JTAG и отключать оптимизацию для пошаговой отладки (чего нельзя делать на ATtiny из-за того, что у неё очень мало ножек и памяти). Проектов на библиотеке V-USB для чипов ATmega намного больше, чем для ATtiny. Так что теперь проще делать миниатюрные устройства USB на чипах ATtinyXX и библиотеке V-USB.

Главное отличие, которое имеют ATmega и ATtiny для библиотеки V-USB - это даже не количество ножек и не объем кода FLASH, а тот факт, что ATmega работает с кварцевым резонатором (который может быть любым из ряда частот 12, 15, 16, 16.5, 20 МГц), а ATtiny работает со встроенным подстраиваемым генератором на частоте 16.5 МГц (так как из-за малого количества свободных ножек подключать кварц к ATtiny смысла нет). Поэтому нужно не забыть правильно сконфигурировать фьюзы ATtiny, а также добавить код для поддержки автонастройки тактового генератора. Для наглядности я свел в таблицу отличия проектов на ATmega и ATtiny. 

Настраиваемая опция проекта ATmega32 (AVR-USB-MEGA16) ATtiny85 (AVR-USB-TINY45)
makefile
DEVICE atmega32 attiny85
F_CPU 12000000
15000000
16500000
20000000
16500000 (кварц не нужен!)
FUSE_L 0xCF 0xD1
FUSE_H 0x98 0xDD
main.c
#include <avr/eeprom.h> не обязательно нужно для сохранения байта калибровки частоты тактового генератора
calibrateOscillator()
usbEventResetReady()
не нужно нужно для подстройки частоты тактового генератора по событиям SOF
код в main() для начальной установки OSCCAL байтом из EEPROM не нужно нужно для подстройки частоты тактового генератора по событиям SOF
usbconfig.h
USB_CFG_IOPORTNAME
USB_CFG_DMINUS_BIT
USB_CFG_DPLUS_BIT
назначить по принципиальной схеме назначить по принципиальной схеме
USB_RESET_HOOK(isReset)
hadUsbReset()
не нужно нужно раскомментировать USB_RESET_HOOK и предоставить код для hadUsbReset()
USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0 1
Закачка прошивок и исходного кода (на примере портирования проекта firmware hid-custom-rq устройства USB HID)
Где взять скомпилированную прошивку firmware тестового примера устройства USB HID (управление светодиодом
макетной платы)
Ссылка [4], см. в архиве папку
examples\hid-custom-rq\firmware-bin
Ссылка [4], см. в архиве папку
examples\hid-custom-rq\firmware-bin
Где взять исходный код тестового примера firmware устройства USB HID (управление светодиодом макетной платы) Ссылка [4], см. в архиве папку
examples\hid-custom-rq\firmware-mega
Ссылка [4], см. в архиве папки
examples\hid-custom-rq\firmware-tiny
и
examples\hid-custom-rq\firmware-tiny-haunted
Где взять скомпилированное ПО хоста для управления тестовым устройством USB HID (управление светодиодом макетной платы) Ссылка [4], см. в архиве папки
examples\hid-custom-rq\commandline
и
examples\hid-custom-rq\set-led-gui
Ссылка [4], см. в архиве папки
examples\hid-custom-rq\commandline
и
examples\hid-custom-rq\set-led-gui
Где взять исходный код ПО хоста для управления тестовым устройством USB HID (управление светодиодом макетной платы) Ссылка [4], см. в архиве папки
examples\hid-custom-rq\commandline
и
examples\hid-custom-rq\set-led-gui
Ссылка [4], см. в архиве папки
examples\hid-custom-rq\commandline
и
examples\hid-custom-rq\set-led-gui

В примере портирования по ссылке [4] устройство USB HID (examples\hid-custom-rq) портировано так, что для разных микроконтроллеров и макетных плат (AVR-USB-MEGA16 и AVR-USB-TINY45) подходит одна и та же управляющая программа ПО хоста (examples\hid-custom-rq\set-led-gui или examples\hid-custom-rq\commandline).

Что еще нужно не забыть, но нет смысла сводить в таблицу:

1. Правильно переназначить ножки согласно принципиальным схемам (D+ и D-, LED).
2. Правильно назначить сигналы D+ и D-. Помните, что D+ должен приходить на аппаратное прерывание ножки INT0 кристалла!
3. Переназначить VID и PID (usbconfig.h: USB_CFG_VENDOR_ID и USB_CFG_DEVICE_ID).
4. Переназначить USB_CFG_VENDOR_NAME и правильно установить его длину в USB_CFG_VENDOR_NAME_LEN.
5. Переназначить USB_CFG_DEVICE_NAME и правильно установить его длину в USB_CFG_DEVICE_NAME_LEN.
6. Правильно прописать дескриптор USB устройства (main.c: PROGMEM char usbHidReportDescriptor [USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH]) и прописать его длину (usbconfig.h: USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH).

[Ссылки]

1. Макетная плата AVR-USB-TINY45 (микроконтроллер ATtiny45 или ATtiny85).
2. Макетная плата AVR-USB-MEGA16 (микроконтроллер ATmega16 или ATmega32).
3. Разработка устройства USB - как начать работу с библиотеками AVR USB (V-USB) и libusb.
4. 110918avrusb-20080513.zip - исходный код и готовые прошивки примера портирования устройства USB HID (портирование кода между макетными платами AVR-USB-MEGA16 и AVR-USB-TINY45).

 

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


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

Top of Page