Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите написать HID дескриторы
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
hd44780
Здравствуйте.

Собрал схему ATMega16+PDIUSBD12D (просьба не иронизировать, просто микросхемы уже все были).
На контроллере пока только пара светодиодов, в конечном варианте будет LCD, 2-й контроллер на USART и пр.

С обычными дескрипторами (если надо, выложу), самописным драйвером и софтиной шарманка работает.
Но хочу сделать HID, чтобы не париться с драйверами под кучу разный виндов biggrin.gif . Скорость и объёмы данных там такие, что и возможностей HID там выше крыши. Раньше оно вообще работало на USB OBDEV, но контроллер регулярно терял байты из USART и пр.

Выдрал дескрипторы из того ObDev, подправил размер конечных точек - см. вложение.
Устройство опознаётся как HID, пишет его имя, светодиодик GoodLink (на PDIUSBD) несколько раз мигает, но потом в диспетчере устройств появляется воскл. знак - "Запуск этого устройства невозможен. (Код 10)".

Диагностическая прога USBLyzer (скрин) пишет, что размер конечной точки д. б. 8 байт для low speed устройств.
Но PDIUSBD12D FullSpeed, резюк у неё на D+, а размер конечной точки 16 байт.
Я пытался туда написать 8 - девайс вообще не опознаётся, даже дескриптор устройства не считывается.

Смотрел также сниффером USBSnoop (лог прилагаю) - видна ошибка:
DescriptorType = 00000022 (<illegal descriptor type!>)

Но не могу понять, откуда лезет этот дескриптор типом 22h wacko.gif .

Помогите пожалуйста понять, в чём я ошибся.

Спасибо.
Сергей Борщ
QUOTE
Но PDIUSBD12D FullSpeed, резюк у неё на D+, а размер конечной точки 16 байт.
Наверное начать надо с победы над этим.
Нашел в даташите такую фразу:
QUOTE
In the PDIUSBD12, the 1.5 kΩ pull-up resistor
is integrated on-chip and is not connected to VCC by default. The connection is
established through a command sent by the external or system microcontroller
.
То есть само там ничего не включено. Вы включаете подтяжку? Хотя если бы не включали - как бы комп ваше устройство почувствовал... Что еще можно предположить? Может лишний внешний резистор на D- от OBDev остался, может D+ D- в разъеме перепутали?

Я не очень большой спец в дескрипторах, но на вопрос "откуда 22" могу предположить, что вот отсюда:
CODE
    0x22, 0x00,                            // wTotalLength = 34
Вы точно не ошибаетесь с адресом начала дескриптора на 1 байт?

Несколько странно выглядит и эта строка:
CODE
    0xFF,                        // bDeviceClass
Если вы указываете класс HID в интерфейсе, то здесь должен быть 0.

Если решение этих трех моментов не поможет - будем смотреть дальше.

P.S. Тут ведь как в "Что? Где? Когда?" - нужно накидать как можно больше версий, а верной может оказаться порой самая глупая.
hd44780
Цитата(Сергей Борщ @ May 26 2012, 11:51) *
Наверное начать надо с победы над этим.
Нашел в даташите такую фразу:То есть само там ничего не включено. Вы включаете подтяжку? Хотя если бы не включали - как бы комп ваше устройство почувствовал... Что еще можно предположить? Может лишний внешний резистор на D- от OBDev остался, может D+ D- в разъеме перепутали?


Подтяжка включается, путаницы ног нету. От ObDevа ничего остаться не могло, совершенно другая плата.

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

Цитата(Сергей Борщ @ May 26 2012, 11:51) *
ошибаетесь с адресом начала дескриптора на 1 байт?

да вроде нет:
Код
            usb_codeTransmit(ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);

Через эту же функцию все дескрипторы передаются.
Дескриптор устройства и строки передаются нормально.
Западло сидит в этом ConfigDescr wacko.gif .

Цитата(Сергей Борщ @ May 26 2012, 11:51) *
здесь должен быть 0.


Поставил 0. Не помогло.
Хрень какая-то....
alexkok
Цитата(hd44780 @ May 27 2012, 19:17) *
Хрень какая-то....

А VID или PID менять не пробовали?
А то windows, вероятно, помнит и использует старый дескриптор, я на этом накалывался.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.