Программа
Понять работу подсистемы USB AT90USB162, будет значительно легче, если ознакомиться с готовыми примерами программ.
Программа для микроконтроллера сознательно сделана максимально просто, так как является учебной. В бесконечном цикле ид.т опрос флагов микроконтроллера, отражающих события на шине и события связанные с поступлением данных в конечные точки. Очевидный недостаток такого решения, нельзя на длительное время занимать процессор прикладной задачей. Сканирование событий должно вестись непрерывно. Прикладная задача должна выполняться в порядке общей очереди. Но есть и преимущество, понятная логика и простота, что важно для учебных программ. Поняв логику работы шины, создать программу с обработчиками событий на прерываниях не составит труда.
В непрерывном цикле ид.т опрос флагов: связанных с линией VBUS, с командой «сброс» на шине, с переходом в состояние «приостановлено», а так же с командой пробуждения от хоста. После обнаружения события выполняется ряд необходимых действий. Так же вед.тся сканирование состояние флага RXSTPI. Установка флага сигнализирует, что от хоста поступил запрос управления, и стадия установки уже выполнена. Требуется считывание из буфера конечной точки управления конфигурационного пакета и его анализ. В зависимости от типа запроса, нужно выполнить необходимые действия. После чего возврат в цикл сканирования.
Программная обработка запросов управления имеет определ.нные достоинства. Можно создавать свои запросы управления и с их помощью передавать некоторые данные и команды, не привлекая конечные точки чтения и записи, а используя единственную точку управления. Запросы классов, о которых упоминалось (например HID), кроме стандартных запросов, имеют и некоторые специфические запросы управления. Обработка этих запросов выполняется программой микроконтроллера.
Каждый принятый пакет SOF вызывает прерывание. Индикация потока пакетов SOF с шины приводит к миганию светодиода. Удобно для анализа состояния устройства при отладке.
Конечная точка записи массовой передачи микроконтроллера, принимает данные от программы на стороне хоста, модифицирует их и возвращает хосту, используя конечную точку чтения массовой передачи.
Поступление данных в буфер конечной точки записи определяется по состоянию флага RXOUTI. Затем определяется количество данных подлежащих чтению, из регистра UEBCLX и копирование принятых данных. Эти данные копируются в буфер конечной точки чтения и благополучно отправляются хосту.
Для целей отладки задействуется USART, при обработке запроса управления, через USART сбрасываются некоторые символы, показывающие состояние устройства USB. Для отладки состояния «приостановлено», компьютер к которому подключено USB устройство, переводится в состояние S3, это состояние с сохранением содержимого ОЗУ. Символы отладки поступают на другой компьютер с запущенной терминальной программой. Прикладная задача имитируется простым возвращением переданных символов обратно терминальной программе. В Linux для перевода хоста в S3, использовалась утилита pm-suspend.
Для загрузки программ на микроконтроллер AT90USB162 рекомендую использовать dfu-programmer. Микроконтроллеры, имеющие аппаратную поддержку шины USB, укомплектованы программой встроенного загрузчика DFU (Device Firmware Upgrade). Используя программу dfu-programmer, можно записывать пользовательскую программу в память контроллера и запускать, без применения аппаратного программатора. Первоначально программа создавалась для Linux , но имеются порты и для Windows.
Активируется загрузчик следующей процедурой. Нажимается кнопка «RESET», затем не отпуская кнопку «RESET», нажимаем кнопку «HWBE» (Hardware Boot Enable), отпускаем «RESET», отпускаем «HWBE». Утилитами можно посмотреть дескрипторы загрузчика. Интересно, что DFU использует только конечную точку управления для передачи и команд и данных.
В Windows, для работоспособности dfu-programmer, нужно дополнительно установить библиотеку libusb-win32. Библиотека и сопутствующие файлы поставляются в комплекте с программой. После активирования загрузчика микроконтроллера и подключения, Windows сообщит об обнаружении нового устройства и необходимости установки драйвера. На запрос Windows , укажите расположение каталога, где находится файл с расширением inf, который поставляется с dfu-programmer. После успешной установки, программа будет видеть микроконтроллер с загрузчиком на шине. Простой командный файл запишет программу в микроконтроллер:
dfu-programmer at90usb162 erase
dfu-programmer at90usb162 flash my_file.hex
dfu-programmer at90usb162 start .
|
Готовые тексты учебных программ вы можете получить, посетив авторскую страницу vk.com/protocols. Программы компилируются для хоста и микроконтроллера на платформе Linux и Windows. В планах автора дальше развивать тему USB для микроконтроллеров. Дальнейшая работа будет посвящена протоколам устройств класcа, таких как HID и CDC и созданием программ для 32-х разрядных микроконтроллеров.
.
|