Поиск по сайту: |
|
По базе: |
|
Главная страница > Применение > Микроконтроллеров > AVR |
|
|||||||||||||||||||||||||||
AVR328Реализация устройства класса HIDСвойства:
1. Введение Целью этого документа является описание начала реализации и разработки приложения USB основанного на HID-классе, осуществляющего передачу данных между ПК и оборудованием пользователя. 2. Описание Интерфейс USB становится очень сложным, если данные пользователя не соответствуют стандартным классам USB-устройств (Mass Storage, Аудио, Видео…). Для таких устройств должны быть разработаны специальные драйвера, а это отнимает много времени у разработчика. Atmel разработала решение для уменьшения временных затрат на разработку. Это решение основано на классе HID. Это решение обеспечивает обмен данными между ПК и устройством в режиме полного дуплекса (со скоростью до 64Кбайт/с). Кроме обмена данными это приложение позволяет пользователю обновить программное обеспечение без установки какого-либо аппаратного обеспечения. HID-класс поддерживается всеми операционными системами Microsoft начиная с Windows 98SE. Он также поддерживается большинством ОС других фирм (на момент публикации 02/08). Предполагается, что пользователь знаком с программной библиотекой USB для микроконтроллеров AT90USBxxx (Application Note AVR276 Программная библиотека USB для AT90USBxxx) и спецификацией HID-класса. 3. Требования к аппаратному обеспечению Для реализации HID-приложения требуется следующее аппаратное обеспечение:
4. Внутрисистемное программирование и обновление программного обеспечения устройства Для программирования устройства вы можете использовать несколько методов:
Пожалуйста, обратитесь к руководству пользователя используемой вами платы (если вы используете стартовые наборы Atmel) для понимания как программировать устройства этими разными методами. Пожалуйста, обратитесь к разделу помощи Flip, чтобы понять как устанавливать USB-драйвер и программировать устройство через USB-интерфейс. Замечание. Flip - это программное обеспечение, поставляемое фирмой Atmel, для предоставления пользователям возможности программирования USB AVR-устройств через USB-интерфейс (для этого не требуется внешнего аппаратного обеспечения) благодаря заводскому DFU-загрузчику. 5. Быстрый старт Когда ваше устройство запрограммировано HID hex файлом, вы можете запустить демонстрационную версию HID-устройства. Проверьте, что ваше устройство нумеруется в качестве HID устройства, (см. рис. 5.1), затем запустите приложение на ПК (см. рис. 5.2) и начните обмен данными между ПК и устройством.
Цель этой демонстрации показать как осуществить полнодуплексный обмен между USB устройством и USB хостом. IN-передача представляет собой посылку данных из устройства в хост. Эти данные посылаются, когда вы двигаете джойстик на отладочном наборе. Приложение на ПК (см. рис. выше) позволяет вам отправлять данные в устройство, чтобы включать или выключать светодиоды на вашей отладочной плате. Рисунок 5.2 показывает графический интерфейс, используемый приложением на ПК.
Пожалуйста для дополнительной информации о приложении для ПК, обратитесь к рекомендациям "Драйверы для устройств USB HID-класса" 6. Обзор приложения Приложение HID-класса обеспечивает простой обмен данными между ПК и устройством. Обмен данными по USB для этого приложения происходит через две конечные точки прерываний (одна для IN- и одна для OUT-передач). ПК через одинаковые промежутки времени P (интервал опроса) "спрашивает" у устройства, есть ли у него новые данные, устройство, если у него есть данные, отправляет их, а иначе посылает NAK (отказ от транзакции), чтобы сказать ПК, что нет новых доступных данных. Пакет данных, посылаемый из устройства в хост, называется IN-репортом. Чтобы послать данные в устройство ПК каждый интервал времени P (интервал опроса) проверяет, есть ли новые доступные данные для приложения. Этот пакет данных называется OUT-репортом. Эти репорты содержат набор байт, которые могут быть использованы приложением пользователя для обмена данными - в зависимости от условий. Это демонстрационное приложение использует IN-и OUT-репорты нижеприведенной структуры:
Значение LEDs: Этот байт содержит текущее состояние (вкл/выкл) светодиодов. Значение джойстика (Joystick): этот байт содержит состояние джойстика (активный/неактивный) и направление указателя. Значение потенциометра: этот байт содержит значение потенциометра. Значение температуры: этот байт содержит показание датчика температуры.
Значение LEDs: Этот байт содержит новое состояние (вкл/выкл) светодиодов. Замечание: В этом приложении мы используем IN- и OUT-репорты длиной 8 байт. Этот размер может быть изменен пользователем. Нет верхнего предела для длины репорта, но единовременно должно посылаться не более 64 байт. (см. раздел "Программное обеспечение"). Устройства HID-класса позволяют пользователю посылать данные через нулевую конечную точку с помощью функции "set_feature". Эта функция посылает feature-репорт длиной 4 байта (длина может быть изменена пользователем, см. раздел 7.3).
7. Программное обеспечение Как объяснено в документе "Программная библиотека USB для AT90USBxxx" (Application Note AVR276, включенной в CD-диск, посвященный USB) все программное обеспечение для USB имеет одинаковую архитектуру (для более подробной информацией обратитесь, пожалуйста, к этому документу).
Этот раздел посвящен только модулю HID. Изменение файлов, описанных ниже, позволяет пользователю разработать его собственное HID-приложение:
7.1 hid_task.c Этот файл содержит функции для инициализации устройства, обеспечения обмена данными с ПК, и старта загрузчика, когда пользователь хочет обновить программное обеспечение.
7.1.1 hid_task_init Эта функция обеспечивает инициализацию устройства и аппаратных ресурсов (джойстик, потенциометр…). 7.1.2 (*start_bootloader) Эта функция-указатель позволяет запускать загрузчик. 7.1.3 hid_task Эта функция обеспечивает обмен данными, запуск загрузчика, при посылке команды DFU от ПК. 7.2 stk_52x.c. Этот файл содержит все процедуры для управления ресурсами платы STK52x (джойстик, потенциометр, датчик температуры, светодиоды…). Пользователь не должен изменять этот файл при использовании STK52x. Иначе ему придется разработать собственный файл для управления аппаратными ресурсами. 7.3. Изменение длины репорта Как уже упоминалось в пункте "обзор приложения", пользователь может изменять длину IN- и OUT-репортов. Длины IN- и OUT-репортов определяются в файле usb_descriptor.h:
Пожалуйста заметьте, что длина репорта должна быть равна или меньше размера конечной точки. Если размер репорта больше размера конечной точки, то вы должны посылать репорт за несколько временных интервалов. Для изменения размера репорта (максимально 64 байта, т.к. HID-класс использует передачу по прерываниям), вы должны изменить следующие параметры в файле usb_descriptors.c:
И параметр SIZE_n в файле usb_specific_request.c, а конкретнее в функции usb_user_endpoint_init():
SIZE_n может принимать следующие значения:
Для изменения feature-репорта, вы должны изменить следующий параметр в файле usb_descriptor.h:
Как и для IN- и OUT- репортов, для этого репорта нет ограничения на длину. Если его длина равна или меньше размера нулевой конечной точки, то он будет послан за один временной интервал, иначе он должен быть послан за несколько временных интервалов. Вам может понадобиться изменить размер нулевой конечной точки для посылки более длинного репорта, для этого вы должны изменить следующий параметр в файле usb_descriptors.h:
Максимальный размер, который может быть установлен для нулевой конечной точки, составляет 64 байта (согласно спецификации USB). 7.4. Как обрабатывать запросы setFeature Функция setFeature() содержится в DLL для того, чтобы позволить пользователю посылать устройству управляющие команды. Эти команды посылаются через нулевую конечную точку и должны обрабатываться как запросы set_report (для более подробной информации обратитесь к спецификации HID). Запрос set_report должен обрабатываться программным обеспечением как управляющая передача. Сначала хост пошлет set_report как показано ниже:
Этот запрос является специфическим для HID-класса, поэтому он не обрабатывается функциями в файле usb_standard_request.c, но обрабатывается функциями, содержащимися в файле usb_specific_request.c. В этом файле запрос декодируется с помощью функции usb_user_read_request() в соответствии со значениями полей bmRequest и bRequest. Тип репорта (0x03) соответствует Set_Feature_Report. Для обработки этого запроса usb_user_read_request() вызовет функцию usb_set_feature(). Эта функция подтвердит setup-запрос и затем позволит вам получить доступ к посланным данным (вы можете проверить размер с помощью параметра wLength).
Запрос Set_Feature посылается ПК устройству для того, чтобы устройство перешло к выполнению загрузчика. 7.5. Как изменить интервал опроса для каждой конечной точки Поскольку устройства HID-класса используют передачи по прерываниям для обеих конечных точек, каждая из конечных точек должна иметь свой интервал опроса (устанавливаемый в дескрипторе конечной точки). Для изменения этого параметра в соответствии с требованиями вашего приложения, вы должны изменить следующие значения в файле usb_descriptors.c:
Разрешенные значения находятся в интервале от 1 до 255 и измеряются в мс. 8. Программное обеспечение для ПК Как показано на рисунке 6-4, приложения HID-класса требуют пакета программ. В этот пакет входит DLL (динамически подключаемая библиотека) и приложение пользователя. DLL позволяет пользователю "общаться" с драйверами USB-хоста и предотвратить сложную разработку. Эта DLL содержит 5 функций, как описано ниже:
8.0.1 findHidDevice Эта функция возвращает "1" и создает дескриптор, если найдено правильное устройство (правильные VID и PID). Иначе она возвращает "0". Параметры: VID: идентификатор производителя устройства PID: идентификатор изделия. 8.0.2 read Data Эта функция обеспечивает чтение данных, посланных устройством, и сохраняет их в буфере. Параметры: *buffer: указатель буфера, в котором сохраняются данные. 8.0.3 writeData Эта функция обеспечивает посылку данных от ПК к устройству. Она также обеспечивает посылку DFU-команд. Параметры: *buffer: указатель буфера данных. 8.0.4 setFeature Эта функция позволяет пользователю посылать управляющие посылки устройству через нулевую конечную точку. Параметры: *buffer: указатель буфера данных. 8.0.5 closeHandles Эта функция закрывает все обработчики и потоки. Она должна вызываться, когда вы закрываете приложение. Параметры: нет. Для получения более подробной информации о USB HID DLL обратитесь, пожалуйста, к документу "USB-драйвера основанные на USB HID-классе" Документация:
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|