реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
hd44780
сообщение May 25 2012, 16:38
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Здравствуйте.

Собрал схему 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 .

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

Спасибо.

Сообщение отредактировал hd44780 - May 25 2012, 16:39
Эскизы прикрепленных изображений
 РЈРјРµРЅСЊС€РµРЅРѕ РґРѕ 54%
Прикрепленное изображение
373 x 429 (13.3 килобайт)
 

Прикрепленные файлы
Прикрепленный файл  descriptor.zip ( 1.5 килобайт ) Кол-во скачиваний: 16
Прикрепленный файл  usbsnoop.zip ( 2.25 килобайт ) Кол-во скачиваний: 10
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 26 2012, 08:51
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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. Тут ведь как в "Что? Где? Когда?" - нужно накидать как можно больше версий, а верной может оказаться порой самая глупая.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
hd44780
сообщение May 27 2012, 16:17
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(Сергей Борщ @ 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. Не помогло.
Хрень какая-то....

Сообщение отредактировал hd44780 - May 27 2012, 16:21


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
alexkok
сообщение May 30 2012, 16:36
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 609
Регистрация: 3-03-07
Из: San Jose
Пользователь №: 25 837



Цитата(hd44780 @ May 27 2012, 19:17) *
Хрень какая-то....

А VID или PID менять не пробовали?
А то windows, вероятно, помнит и использует старый дескриптор, я на этом накалывался.


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th July 2025 - 19:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01446 секунд с 7
ELECTRONIX ©2004-2016