Устройства hid что это

Приобщение к миру USB-устройств на примере микроконтроллеров от Silicon Laboratories

Устройства от Silicon Laboratories не пользуются широкой популярностью в любительских кругах, им далеко до таких флагманов, как Atmel. Однако у них есть и вполне доступные простому смертному микроконтроллеры основных линеек в корпусе TQFP, и стартовые комплекты USB ToolStick (о чем совсем недавно упоминалось на хабре). Я сам начал свое знакомство с микропроцессорной техникой, работая с «силабсами», и вполне успешно.
В данной статье я расскажу, каким образом можно организовать связь компьютера с МК, используя USB-интерфейс, и как Silabs попытались сделать это простым для разработчика.
В качестве испытуемого будем использовать плату С8051F320DK, с микроконтроллером соответственно F32x серии, поддерживающей USB аппаратно, и Keil’овскую среду разработки uVision4.

Перед тем, как начинать копать в сторону реализации связи по USB необходимо определиться с некоторыми базовыми аспектами протокола: какое место занимает устройство в топологии (хост или ведомое устройство) и какой характер будет иметь информация, передаваемая по интерфейсу.

Создание USB совместимого HID-устройства типа джойстик

Начинаем с дескриптора устройства

Для упрощения задачи составления дескриптора можно воспользоваться программой, лежащей на www.usb.org (HID Descriptor Tool). В комплекте с программой предоставляются примеры конфигураций некоторых HID-устройств, которые можно корректировать под свою задачу или создавать собственное HID-устройство.
На этом описание джойстика заканчивается и нужно подготовить данные для передачи в PC.

Процедуры передачи данных

Находим в примере следующий код:
void IN_Report(void)<

IN_PACKET[0] = VECTOR;
IN_PACKET[1] = BUTTONS;

// point IN_BUFFER pointer to data packet and set
// IN_BUFFER length to transmit correct report size
IN_BUFFER.Ptr = IN_PACKET;
IN_BUFFER.Length = 2;
>

В этой процедуре идет составление отправляемого пакета, который после через хитрый указатель (на самом деле это просто структура из указателя и его длины) и передается нашим устройством. Главное аккуратно составить пакет, о чем нам и намекает комментарий, а дальше уже с ним сделают все без нашего участия.
Теперь расскажу о том, как и откуда мы берем переменные VECTOR и BUTTONS (обе, к слову, имеют тип unsigned char размером в байт).
Глобальной переменной VECTOR присваиваются значения с АЦП во время возникновения прерывания от него:
void ADC_Conver_ISR(void) interrupt 10
<
AD0INT = 0;

VECTOR = ADC0H;
>

Глобальная переменная BUTTONS аналогично изменяет значение в зависимости от нажатия кнопок. Кнопки опрашиваются по прерыванию от таймера. Таймер настраивайте в соответствии с личными предпочтениями.
void Timer2_ISR (void) interrupt 5
<
P2 &=

if ((P2 & Sw1)==0) // Проверка нажатия кнопки #1
<
// pressed
BUTTONS = BUTTONS | (1

Дескриптор имени HID-устройства

Напоследок можем скорректировать строковые данные, чтобы устройство имело то название, какое мы хотим (в моем примере «JOYSTICK-HABR»).
Ищем строковый дескриптор String2Desc, переписываем
#define STR2LEN sizeof («JOYSTICK-HABR») * 2

Идентификация HID-устройства

После компиляции проекта и программирования микроконтроллера можно подключить устройство к USB-порту. Хост определяет, что устройство принадлежит к HID классу и передает управление устройством соответствующему драйверу.
Устройства hid что это
Теперь в Windows идем в Панель управления->Игровые устройства и видим там нашего пассажира. Смотрим свойства и проверяем функциональность.
Устройства hid что это
Низкая скорость передачи является главным ограничением HID-варианта построения устройства. Максимально возможная скорость передачи данных при такой организации обмена составляет 64 Кбит/сек. Такой показатель в сравнении с 12 Мбит/сек полной скорости USB-шины выглядит минусом HID-технологии в вопросе выбора конкретной USB-реализации. Однако для многих задач коммуникации указанной скорости вполне хватает и HID-архитектура как специализированный инструмент занимает достойное место среди способов организации обмена данными.

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

Создание полноценного USB-устройства с использованием инструментария Silabs USBXpress

Но вот наступает момент, когда вам необходимо использовать свой протокол работы с устройством на МК. При этом хотелось бы передавать много данных на большой скорости, и делать все это с помощью своего ноутбука, в котором много USB и ни одного COM, да еще и ваше устройство должно быть не больше спичечного коробка, и лепить на плату USB-UART на микросхеме FT232RL нет никакой возможности.
Тут-то ребята из Silabs и решили облегчить всем жизнь и показать “дорогу в будущее”, без тяжелого ломанья зубов об написание собственных дров и прошивок.
USBXpress Development Kit – это законченное решение для МК и хоста (PC), обеспечивающее простую работу с протоколом USB с помощью высокоуровневого API для обоих сторон. Не требуется особых знаний ни самого протокола USB, ни написания драйверов. Так пишут силабовцы в своем гайде.
Устройства hid что это
Кстати о Programmer’s Guid: занимая всего 30 страниц, он крайне прост и доходчив. Примеры же лично мне не нравятся, часто встречаются очень кривые места, программы же под PC вообще лучше не смотреть, крайне нечитабельны.
USBXpress DK предоставляется к микроконтроллерам линеек C8051F32x, C8051F34x и для CP210x (USB-to-UART Bridge Controller). Библиотека USBXpress включает в свой состав библиотеку нижнего уровня, драйверы USB для ПК и DLL-библиотеку для разработки приложений на верхнем уровне. Ну и, конечно же, набор документации и примеров.
В библиотеке реализована передача данных только в режиме BULK. При использовании всех функций библиотеки, их реализация займет всего 3 Кбайта Flash-памяти микроконтроллера.

Firmware
Написание USB-дескриптора

В отличие от HID с его хитро формализованной структурой тут все просто
code const UINT USB_VID = 0x10C4;
code const UINT USB_PID = 0xEA61;
code const BYTE USB_MfrStr[] = <0x1A,0x03,'S',0,'i',0,'l',0,'a,0,'b,0,'s,0>;
code const BYTE USB_ProductStr[] = <0x10,0x03,'U',0,'S',0,'B',0,'X',0,'_',0,'A',0,'P',0>;
code const BYTE USB_SerialStr[] = <0x0A,0x03,'H',0,'A',0,'B',0,'R',0>;
code const BYTE USB_MaxPower = 15;
code const BYTE USB_PwAttributes = 0x80;
code const UINT USB_bcdDevice = 0x0100;

С VID, PID и именами думаю все понятно, плюс еще можно задавать максимальный ток параметром MaxPower (макс.ток = _MaxPower*2), PwAttributes — параметр отвечающий за удаленный wake-up хоста, и bcdDevice — номер релиза устройства.

Нюанс инициализации устройства и USB на борту

0x40; // Disable Watchdog timer
USB_Clock_Start(); // Init USB clock *before* calling USB_Init
USB_Init(USB_VID,USB_PID,USB_MfrStr,USB_ProductStr,USB_SerialStr,USB_MaxPower,USB_PwAttributes,USB_bcdDevice);

Initialize();
USB_Int_Enable();
.

Здесь, как требует комментарий, в первую очередь необходимо инициализировать тактовый генератор для USB перед самой его инициализацией, только потом провести остальные стартовые операции для МК — Initialize(); — который настраивает порты, таймер и АЦП; затем разрешаем прерывания от USB.

Обработка входящих данных и формирование исходящего пакета

Вот подобрались к самому главному
//. продолжение main
while (1)
<
if (Out_Packet[0] == 1) Led1 = 1;
else Led1 = 0;
if (Out_Packet[1] == 1) Led2 = 1;
else Led2 = 0;

In_Packet[0] = Switch1State;
In_Packet[1] = Switch2State;
In_Packet[2] = Potentiometer;
In_Packet[3] = Temperature;
>
// конец main
>

Out_Packet – пакет, принятый от хоста;
In_Packet — пакет, отправляемый хосту;
Суть ясна, МК постоянно обновляет отправляемый пакет и считывает статус полученного.

Обработка прерываний

Теперь в 2-х словах о том, откуда получаем значения в отправляемый пакет. Как и в примере с HID, состояния кнопок получаем по прерываниям от таймера, а значения АЦП и термометра — по прерываниям от АЦП.
Вот здесь один тонкий момент — при инициализации АЦП настраиваем его так, чтобы конвертирование значений происходило по переполнению таймера (того же, который мы используем для кнопок), а само же прерывание от АЦП возникает по завершению конвертирования. И тут кроме получения значений преобразователя в конце процедуры вызываем API функцию
Block_Write(In_Packet, 8)
которая и отправляет собранные данные на компьютер.
Получение команд от компьютера происходит в процедуре обработки прерываний от USB:
void USB_API_TEST_ISR(void) interrupt 16
<
BYTE INTVAL = Get_Interrupt_Source();

if (INTVAL & DEV_CONFIGURED)
<
Initialize();
>
>

Этот момент подробно расписан в Programmer’s Guid. Суть в том, что вызывается API-функция Get_Interrupt_Source(), возвращающая код причины возникновения API прерывания. Далее код анализируется и выполняется необходимое действие.

Программ на PC

Разбирать программу для компьютера я не буду. Силабовцы предоставили примеры на Visual Basic и на C, но, даже не заглядывая в исходники, подключить библиотеку в используемой вами среде разработки и прочитать пару страниц о функциях сложности вызвать не должно.
Поэтому я воспользуюсь уже скомпилированной программой из примера.

Итак, компилируем проект для МК, зашиваем, устанавливаем универсальные драйвера для USBXpress и подключаем отладочную плату. Система определит новое устройство и установит для него драйвера.
Посмотрим после установки, что творится в диспетчере устройств Винды:
Устройства hid что это
Теперь запускаем программу:
Устройства hid что это
Видим, что она правильно нашла устройство.
Устройства hid что это
Все, теперь можно тут потыкать кнопки, поморгать диодами, погреть МК руками, увидеть как растет температура.

Заключение

В целом создание USB устройства с помощью библиотек USBXpress оказалось более быстрым и прозрачным процессом, нежели используя HID-архитектуру. Да и скорость будет однозначно выше. Наиболее тонким местом является то, что библиотека закрыта, и узнать насколько надежным является это решение невозможно, к тому же доступен только BULK режим передачи данных.

Источник

HID-клавиатура: что это такое и что делать, если она не работает или не распознается компьютерной системой?

В свете последних научных разработок в области компьютерных технологий пользователи все чаще замечают присутствие на компьютерах неких непонятных устройств, опознаваемых операционной системой, как HID-девайсы. В частности, это касается всевозможных игровых контроллеров, устройств ввода и манипуляторов, включая мыши, а также современные HID-клавиатуры. Что это за устройства, почему им присвоены такие названия и как справиться с наиболее распространенными проблемами в их работе, далее и разберемся. Но для начала давайте определимся с пониманием основного термина.

Human Interface Device: что это за оборудование в общем смысле?

Устройства hid что это Вам будет интересно: Как работает флешка? Устройство и принцип работы флешки

Разобраться с этим термином в общем-то совершенно несложно. Достаточно просто перевести его с английского языка на русский, в итоге получим что-то вроде устройств с человеческим лицом (интерфейсом). Все оборудование, включаемое в это понятие, принято считать таковым, которое призвано максимально просто взаимодействовать с человеком. В категорию такого оборудования в общем случае относят большинство периферийных устройств, предназначенных для управления компьютерными системами на разных уровнях.

Устройства hid что это Вам будет интересно: Как работает Wi-Fi роутер: описание, назначение и принцип действия

Устройства hid что это

Для их подключения используются либо USB-интерфейсы и соответствующие порты, либо беспроводные модули Wi-Fi и Bluetooth. Последние два, кстати сказать, тоже относят к классу USB HID. С Wi-Fi-модулями все понятно, ведь те же мыши и клавиатуры беспроводными можно назвать весьма условно, поскольку для их подключения к основному компьютерному блоку как раз и нужен тот самый беспроводный переходник, вставляемый в соответствующий USB-порт. С Bluetooth полной ясности нет, поскольку при подключении к тем же ноутбукам со встроенными «синезубыми» модулями порты USB могут не понадобиться вообще.

HID-клавиатура: что это такое?

Теперь несколько слов непосредственно о клавиатурных блоках. Давайте посмотрим, какие есть виды HID-клавиатур. Что это за устройства, нетрудно сообразить, если просто оценить их визуально. Среди них встречаются и стандартные блоки по типу тех, которые используются на стационарных ПК (стандарт PS/2), и уменьшенные по размерам клавиатуры без цифровых панелей по типу тех, что устанавливаются на ноутбуках с диагоналями экрана 13 дюймов и меньше.

Устройства hid что это

Также можно встретить целые мультимедийные системы, игровые усеченные панели, клавиатуры на мягкой подкладке, сворачивающиеся чуть ли не в трубочку, совершенно миниатюрные блоки с 22, 18, 11 или 10 клавишами и т. д. Вообще считается, что теоретически можно создать блок с 256 клавишами (диапазон ввода/вывода 0-255). Но особой популярностью в последнее время пользуются устройства, на которых положения основных кнопок с литерами и символами изменены, что соответствует заводской установке нестандартной раскладки.

Что делать, если USB-клавиатура не работает: простейшее решение

С основными понятиями ясность внесена. Теперь кратко остановимся на ситуациях, связанных с тем, что клавиатура ПК стандарта HID по каким-то причинам не работает. Устранить неполадки можно несколькими простейшими методами. Первым и самым простым решением, поскольку клавиатурный блок подключается либо непосредственно через USB-порт, либо через беспроводный модуль (но тоже через USB), является смена используемого порта. Вполне возможно, что он просто не работает или имеет другой класс (например, клавиатура рассчитана на подключение через интерфейс USB 3.0, а кабель вставлен в порт USB 2.0).

Устройства hid что это

Отличить разъемы и штекеры можно по цвету (USB 3.0 соответствует синяя окраска).

Переустановка драйвера

Если учесть, что для любого, имеющегося в системе устройства (внешнего или внутреннего) и его корректной работы необходимо специальное управляющее программное обеспечение, называемое драйвером, логично предположить, что проблема может быть именно в нем. Убедиться в этом можно совершенно просто, если вызвать «Диспетчер устройств». Если оборудование с неполадками будет обнаружено, его сразу можно будет увидеть в списке HID-устройств, для которых драйвер не установлен или в его функционировании произошли сбои. Обычно производители поставляют носители с драйверами под свою периферию, так что переустановить драйвер можно самостоятельно.

Но в большинстве случаев это не нужно, поскольку все оборудование класса HID должно распознаваться любой компьютерной системой и без этого.

Устройства hid что это

В этой ситуации лучше всего удалить проблемное устройство целиком и полностью, а затем перезагрузить компьютер. По идее, Windows найдет и установит недостающий драйвер сама.

Управляющее ПО USB-контроллеров

Нередко причина может крыться даже не в самом оборудовании или его драйверах, а в управляющем ПО USB-контроллеров.

Устройства hid что это

В этом случае рекомендуется обновить драйверы всех контроллеров, находящихся в соответствующем разделе все того же «Диспетчера устройств». Для установки самых свежих версий драйверов в обоих случаях можно воспользоваться специальными программами вроде iObit Driver Booster, которые способны находить и устанавливать обновленное программное обеспечение без участия пользователя.

Включение USB в BIOS

Остается добавить еще пару слов о HID-клавиатурах. Что это за устройства, понятно. Как они работают и для чего предназначены, тоже вроде бы ясность есть. Но вот что делать, если вышеперечисленные методы устранить проблему работоспособности так и не смогли? По всей видимости, хотя поддержка периферии этого класса заявлена изначально, что-то могло произойти с настройками первичной системы ввода/вывода.

Устройства hid что это

Для верности зайдите в параметры BIOS/UEFI сразу же после включения компьютера и найдите там пункты вроде USB Keyboard Support или USB Legacy Support. Для них должен быть выставлен параметр Enabled. В некоторых модификациях BIOS можно встретить настройки вроде EHCI Hand-Off и XHCI Hand-Off, отвечающие за ручное переключение между стандартами USB 2.0/3.0. При наличии на компьютере именно Windows-системы они должны быть деактивированы (значение Disabled). В устаревших версиях BIOS также встречается параметр Plug & Play OS, позволяющий автоматически распознавать подключаемые PNP-устройства. Он должен быть включен (значение Yes).

Источник

Устройства HID Human Interface Devices Windows 10

Устройства hid что это

Устройства hid что это

Устройства hid что это

— HID-совместимая сенсорная панель.

— Microsoft Input Configuration Device.

— Устройство HID на шине I2C.

Устройства hid что это

Далее, в свойствах устройства вы можете узнать и настроить:

Общие:

— Вы можете узнать тип устройства.

Драйвер:

— Вы можете узнать поставщика драйвера.

— Сведения о файлах драйвера.

— Вы можете обновить драйвер.

— Вы можете откатить драйвер к предыдущему.

— Можно отключить устройство.

— Можно удалить драйвер.

Сведения:

— Вы можете узнать значения свойств устройства.

— Выберите свойство и вам автоматически покажут его значение.

— Вы можете узнать характеристики, класс, код ошибки устройства и т.д.

События:

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

— Вы можете узнать дату и время события.

— Можно узнать описания и сведения событий.

— В конце нажмите на кнопку OK, чтобы сохранить сделанные изменения.

Устройства hid что это

Источник

СОДЕРЖАНИЕ

Устройства

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

Клавиатуры

Некоторые клавиатуры реализуют профиль загрузочной USB-клавиатуры, указанный в определении класса USB-устройств для устройств с интерфейсом пользователя (HID) v1.11, и явно настроены на использование протокола загрузки. Они ограничены 6-клавишным переключением клавиш (6KRO) и будут прерывать работу ЦП каждый раз при опросе клавиатуры (даже если нет изменения состояния), если USB-контроллер не отменяет это поведение. Этот профиль предназначен для того, чтобы BIOS могла работать с USB-клавиатурой в отсутствие операционной системы, поддерживающей USB. Рекомендуемый профиль для клавиатур, которые не находятся в режиме загрузки в этой спецификации, ограничивает количество клавиатур до 6KRO и заставляет их отвечать на прерывание отчетом о состоянии не реже, чем каждые полсекунды (опять же, даже если нет изменения состояния), чтобы реализовать typematic (повторение скан-кода при достаточно долгом нажатии клавиши), если USB-контроллер не запрограммирован так, чтобы клавиатура не делала этого. Однако клавиатуры в режиме без загрузки могут использовать альтернативный профиль HID.

Вышеупомянутое поведение отличается от интерфейса PS / 2 (не путать с PlayStation 2), который поддерживает одновременное нажатие клавиш n (NKRO) для клавиатур, способных его поддерживать. Интерфейс PS / 2 вообще не прерывает работу ЦП, когда нет изменений состояния, за исключением случаев, когда клавиша удерживается достаточно долго, чтобы активировать typematic. Отсутствие необходимости отвечать на повторный опрос экономит электроэнергию, поэтому интерфейс PS / 2 часто используется во внутренних клавиатурах ноутбуков.

мышей

USB-мыши имеют меньшую задержку, чем мыши PS / 2, потому что стандартные USB-мыши часто опрашиваются с частотой по умолчанию 125 Гц, в то время как стандартные мыши PS / 2 отправляют прерывания с частотой по умолчанию 100 Гц, когда у них есть данные для отправки на компьютер. Кроме того, USB-мыши не заставляют USB-контроллер прерывать работу системы, если у них нет изменений состояния, чтобы сообщить о них в соответствии с профилем по умолчанию спецификации USB HID для устройств мыши. И PS / 2, и USB позволяют переопределить частоту дискретизации, причем PS / 2 поддерживает частоту дискретизации до 200 Гц, а USB поддерживает частоту опроса до 1 кГц, пока USB-мышь работает на полной скорости или выше. Скорость USB.

Благодаря тому, что интерфейс мыши PS / 2 управляется прерываниями и не требует периодического опроса, интерфейс PS / 2 экономит электроэнергию, что делает его популярным выбором для указывающих устройств, встроенных в ноутбуки.

Игровые контроллеры

Другие устройства

Спецификации класса USB HID позволяют использовать множество других устройств в классе USB HID. Некоторыми примерами являются контроллеры для моделирования автомобилей, тренажеры, телефонные устройства, термометры, средства управления аудиосистемой и медицинские приборы. Даже источники бесперебойного питания и программные защитные ключи заявляют о себе под этим классом, несмотря на то, что зачастую они вообще не имеют человеческого интерфейса. Любое устройство может быть устройством класса USB HID, если разработчик соответствует логическим спецификациям класса USB HID. Это не означает, что нет необходимости поставлять драйверы для этих устройств или что операционная система немедленно распознает устройство. Это означает только то, что устройство может объявить себя в классе устройства интерфейса пользователя.

Уязвимости безопасности

Интерфейс USB уязвим для уязвимостей безопасности, таких как BadUSB, которые злоупотребляют комбинацией способности USB подключать множество различных типов устройств, его неспособностью проверить, действительно ли устройства являются тем, за что они претендуют, возможностью для USB-устройств изменить свой тип или объявляет о дополнительных подустройствах, когда они подключены, и о своем поведении по умолчанию, принимающем любое подключенное к нему устройство. В качестве частичной меры противодействия вместо этого можно использовать периферийные устройства PS / 2 с отключением всех портов USB.

Драйверы

Одним из преимуществ четко определенной спецификации, такой как класс USB HID, является обилие драйверов устройств, доступных в большинстве современных операционных систем. Устройства класса USB HID и их основные функции определены в документации USB-IF без учета какого-либо специального программного обеспечения. Благодаря этим общим описаниям разработчики операционных систем могут легко включить работающие драйверы для таких устройств, как клавиатуры, мыши и другие универсальные устройства с интерфейсом пользователя. Включение этих универсальных драйверов позволяет ускорить развертывание устройств и упростить установку конечным пользователям.

Логические спецификации

Функциональные характеристики

Класс USB-устройства с интерфейсом пользователя можно использовать для описания классов устройств и интерфейсов. Класс интерфейса используется, когда устройство USB может содержать более одной функции. Следовательно, можно иметь USB-устройства с двумя разными интерфейсами одновременно (например, USB-телефон может использовать клавиатуру, относящуюся к классу HID, и динамик, относящийся к классу USB-устройств связи ).

Отчеты

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

Хост периодически опрашивает конечную точку прерывания IN устройства во время работы. Когда у устройства есть данные для отправки, оно формирует отчет и отправляет его в качестве ответа на токен опроса. Обычные устройства, такие как клавиатуры и мыши, отправляют отчеты, соответствующие стандартам, установленным Форумом разработчиков USB (USB-IF). Когда поставщик создает пользовательское устройство класса USB HID, отчеты, формируемые устройством, должны соответствовать описанию отчета, приведенному во время перечисления, и драйверу, установленному в хост-системе. Таким образом, класс USB HID может быть чрезвычайно гибким.

USB HID API

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *