Программирование AVR: работа с USB USnooBie: дизайн, FAQ (ответы на часто задаваемые вопросы) Fri, January 20 2017  

Поделиться

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

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

USnooBie: дизайн, FAQ (ответы на часто задаваемые вопросы) Печать
Добавил(а) microsin   

В этой статье обсуждаются некоторые вопросы, касающиеся проблем с использованием USnooBie.

USnooBie-readymade-and-kit

[Дизайн USnooBie]

Все необходимые файлы проекта Вы можете скачать по ссылке [1]. Подробное руководство по сборке, тестированию и назначению деталей см. по ссылке [2].

[Изменение тактовой частоты]

Если тактовая частота по умолчанию 12 МГц по какой-то причине не подходит для Вашего приложения, то можно просто поменять кварц 12 МГц на кварц с другой частотой. Имейте в виду, что для смены частоты кварца понадобится перепрошить бутлоадер новой версией, которая подходит под эту частоту (бутлоадер, скомпилированный для другой тактовой частоты, можно скачать по ссылке [1]. Помните, что для бутлоадера и для работы приложений на основе V-USB можно выбрать кварц только из определенного ряда частот (12 МГц, 12.8 МГц, 15 МГц, 16 МГц, 16.5 МГц, 18 МГц и 20 МГц).

[Перепрограммирование микроконтроллера]

Если Вам нужно перепрошить бутлоадер (например, при смене частоты кварца) или поменять фьюзы, то нужен внешний программатор [3]. Если программатора у Вас нет, то Вы можете использовать в качестве программатора USnooBie, см. [5].

[Использование внешнего источника питания]

Если Вы не хотите питать USnooBie от компьютера, Вы можете снять перемычку, которая переключает питание 3.3V или 5V, и подключить внешний источник питания к цепям GND (минус) и V+ (плюс). Напряжение внешнего источника питания должно быть в диапазоне 3.3 .. 5 вольт. Другой способ подачи питания - подключение шнура USB в зарядное устройство, которое имеет гнездо USB.

[Известные проблемы с USnooBie и их решение]

Отсутствие бутлоадера. Если в памяти микроконтроллера нет бутлоадера, то просто возьмите пакет бутлоадера из [1], и самостоятельно прошейте бутлоадер в память микроконтроллера. Убедитесь, что Вы выбрали правильный файл прошивки, который подойдет к Вашему микроконтроллеру и частоте кварца, а также правильно установили фьюзы микроконтроллера. Обычно используется микроконтроллер ATmega328P на частоте 12 МГц, настроенный на использование 4-килобайтной секции бутлоадера соответствующими битами фьюзов.

Проблемы с AVRDUDE в операционной системе Linux. Убедитесь, что у Вас имеются достаточные права для использования USB-устройств в Linux, иначе утилита программатора AVRDUDE может выдавать ошибку "error sending control message: Operation not permitted" (ошибка отправки управляющего сообщения: операция не разрешена). Один из способов решение проблемы - использование команды sudo. Другой способ - создание файла с именем "avrdude-usbasp.rules" в папке "/etc/udev/rules.d/", содержащего строку:

SUBSYSTEM=="usb", SYSFS{idVendor}=="16c0", SYSFS{idProduct}=="05dc", GROUP="adm", MODE="0666"

После создания этого файла нужно перезапустить демон udev командой "sudo restart udev".

PORTD2 или PORTD7. Будьте внимательны с портами PD2 и PD7 - они задействованы на сигналы шины USB (см. принципиальную схему USnooBie). Если Вы задействуете эти порты, то это может повлиять на работу USB, и привести к неработоспособности бутлоадера.

По поводу проблем, связанных с V-USB, попробуйте задать вопрос на форуме V-USB [6].

Не обращайте внимание на ошибку "avrdude: error: usbasp_transmit: usb_control_msg: sending control message failed, win error: A device attached to the system is not functioning.", это ожидаемое поведение бутлоадера. Так происходит всегда после того, как бутлоадер завершает работу и совершает передачу управления на приложение пользователя, без выдачи подтверждения на команду перехода, так как переход происходит сразу после получения команды. Команду подтвердить нельзя, так как размер кода бутлоадера ограничен из-за фиксированного размера секции бутлоадера.

[USnooBie FAQ, часто задаваемые вопросы]

Q001. Наверное, это не единственный проект с микроконтроллером AVR для работы с USB...
A001. Действительно, имеется изобилие проектов, использующих V-USB. Есть даже совершено сумасшедшие реализации. Мне особенно нравятся визитка USB business card, зараженный приведениями кабель USB и Stealth USB CapsLocker.

Q002. Эта плата использует микроконтроллер ATmega328P, но это не тот микроконтроллер AVR, который используется в моем проекте (вставьте тут название проекта). Как мне выполнить мой проект на основе USnooBie?
A002. Основная идея - использовать USnooBie в качестве платы для экспериментирования. В корпусе чипа ATmega328P имеется множество периферии, такой как входы АЦП, несколько таймеров с возможностью генерации ШИМ, и различные стандартные последовательные шины данных. Это позволяет сначала выполнить разработку на мощной и гибкой платформе ATmega328P, и затем перенести код / разработку на конкретный микроконтроллер AVR. Замечательно, что библиотека V-USB разработана в расчете на использование большинства микроконтроллеров AVR, даже 8-выводных ATtiny45 и ATtiny85. Поэтому по завершении разработки проекта на USnooBie портируйте Вашу идею на другой любой другой чип AVR, для чего просто отредактируйте конфигурацию проекта и перекомпилируйте код.

Q003. Имеются микроконтроллеры AVR со встроенным аппаратным интерфейсом USB, зачем мне вместо них использовать USnooBie?
A003. Простой пример - Вы не найдете чипов с аппаратным USB, у которых корпус имеет только 8 ножек. Хотя микроконтроллер USnooBie (ATmega328P) имеет 28 ножек, Вы можете начать экспериментировать / писать программу проекта на нем, и затем легко портировать проект на маленький ATtiny85 - как только решите, что проект реализован и готов к работе.

Библиотека V-USB работает почти со всеми микроконтроллерами AVR. Это одна из причин, по которой имеет смысл использовать USnooBie. Плата прототипирования - это просто поверхность для монтирования чипов, и она может оказаться дорогой. Мне кажется, большинство людей выберут компоненты со штыревыми выводами для своих самодельных DIY-проектов.

Q004. Кажется, мне предстоит кое-чему научиться, чтобы я смог по-настоящему использовать USnooBie...
A004. Помните, что Вы можете использовать USnooBie в качестве обычного микроконтроллера, необязательно на USnooBie разрабатывать устройство USB. Платка USnooBie хорошо подходит для любого микроконтроллерного проекта, который не относится к USB.

USB очень сложен внутри, однако можно очень просто начать делать устройства USB, если использовать библиотеку V-USB, так как она скрывает всю сложность протокола USB внутри себя. Если Вы уже знаете, как компилировать проект AVR, то считайте, что половина пути уже пройдена. V-USB требует компиляции 2 файлов, подключения 1 файла заголовка, и также подключение 1 конфигурационного файла. Вам нужно только ознакомиться с этими файлами, с опциями конфигурации V-USB, и можно делать свои устройства USB (прим. переводчика: доступна русскоязычная версия V-USB, где переведены все комментарии в коде библиотеки. Таким образом, можно ознакомиться с кодом и опциями конфигурации V-USB на русском языке, см. [2]). Библиотека V-USB возьмет на себя всю грязную работу наподобие обработки энумерации по шине USB (чтобы компьютер мог распознать подключенное устройство USB), и Вам остается позаботься только об основном алгоритме программы микроконтроллера (firmware).

Общей проблемой, с которой люди часто сталкиваются при использовании V-USB - их USB-устройство не распознается на компьютере, не проходит энумерацию (device not recognized error). Причина заключается в том, что есть много мест, где можно допустить ошибку - неправильно собранная схема, ошибка в конфигурации V-USB, неправильно выбранная частота кварца (например, она не соответствует настройкам проекта), неправильно делается инициализация V-USB (последовательный вызов некоторых функций и разрешение прерываний). Вместе с USnooBie Вы избавитесь от всех этих проблем, сможете выбрать любое напряжение питания 3.3 или 5 вольт, и Вы также можете использовать одну и ту же конфигурацию во всех проектах. Все это сделает разработку firmware для микроконтроллера простой и приятной работой.

Q005: Почему не используете бутлоадер Arduino вместо USBaspLoader?
A005: Бутлоадер Arduino требует наличия специального адаптера USB-to-serial, который приводит к удорожанию и усложнению всей системы. Бутлоадер Arduino виден для компьютера как последовательный порт, USB-устройство класса CDC, поверх которого реализована поддержка протокола программирования STK500. Несмотря на то, что теоретически с помощью V-USB можно сделать бутлоадер как CDC class USB device, и таким образом воссоздать поведение STK500-совместимого последовательного порта, нет необходимости делать это. Одна из причин в том, что устройства CDC не предполагают использование низкоскоростного устройства USB (V-USB позволяет делать только низкоскоростные устройства), что в будущем может привести к несовместимости операционных систем с низкоскоростными устройствами USB CDC.

Кроме того, так как поведение загрузчика Arduino состоит в том, чтобы ожидать некоторое время, чтобы проверить активность последовательного порта прежде, чем перейти к коду приложения, это приведет к раздражающим задержкам на двойную энумерацию. В то же время модифицированная версия USBaspLoader сделана так, что если кнопка BOOT для активации загрузчика на нажата при сбросе, то ненужная энумерация не произойдет.

Q006: Почему используется частота кварца именно 12 МГц?
A006: Это наилучшая частота для устройств с питанием 3.3V, поддерживаемая библиотекой V-USB. Такая частота наилучшим образом подходит для работы на напряжениях 5V и 3.3V. Конечно, Вы можете поменять частоту кварцевого резонатора на любую другую частоту, которую поддерживает V-USB. Просто имейте в виду, что для другой частоты кварца нужно использовать соответствующую версию бутлоадера (для перепрошивки бутлоадера нужен внешний программатор [3]), и также поменяйте настройки компилируемого проекта на нужную частоту кварца (эта установка обычно задается в makefile проекта).

Q007: Почему было принято решение использовать для сигналов USB порты PD2 и PD7?
A007: PD2 был выбран потому, что он аппаратно поддерживает прерывание INT0, которое рекомендуется использовать с библиотекой V-USB из-за своего высокого приоритета. PD7 используется потому, что эта ножка самая ненужная по аппаратуре, она всего лишь может использоваться как аналоговый вход компаратора. Если Вам вдруг понадобится компаратор (а это случается редко), то можно использовать дешевый чип на 8 ножек, в то время как ножки с другими аппаратными функциями заменить будет непросто.

Q008: Можно ли мне все-таки как-нибудь использовать порты PD2 и PD7?
A008: Если Вы используете V-USB в своем проекте для создания устройства USB, то Вы никак не сможете использовать порты PD2 и PD7. Порт PD2 должен быть сконфигурирован как вход с разрешенным прерыванием INT0, а порт PD7 должен иметь верхний нагрузочный резистор (pull-up). Если ножка PD7 (сигнал D- интерфейса USB) удерживается в состоянии 0 дольше, чем несколько миллисекунд, то компьютер/хост USB будет считать, что устройство USB отключено от компьютера. Таким образом, если Вы удерживаете нажатой кнопку активизации бутлоадера BOOT, то Вы замкнете тем самым PD7 на землю, поэтому можно использовать эту кнопку для повторной энумерации Вашего устройства USB.

Если Вы не делаете устройства USB, но коннектор USB остается подключенным к хосту USB, то PD2 будет притянут к земле (pull-down) на стороне хоста, а PD7 будет притянут к питанию (pull-up) через резистор 1.7 кОм. Если коннектор USB отключен, то PD7 остается подтянутым к питанию, а PD2 нет.

Чтобы лучше разобраться в том, как устроена и работает аппаратная часть USB, см. схему USnooBie [1], а также ознакомьтесь с руководством [4].

[Ссылки]

1. USnooBie downloads: загрузка схемы, кода, библиотек, прошивок и утилит.
2. USnooBie: инструкция по сборке, комплектующие.
3. Программаторы для AVR.
4. Описание аппаратуры (hardware, глава 2 "Железо") USB в руководстве USB in a Nutshell.
5. Как превратить USnooBie в ISP программатор USBasp.
6. V-USB site:forums.obdev.at - форум Objective Development, посвященный библиотеке V-USB. 

 

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


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

Top of Page