|
не работает USB-Serial в Windows 7 32bit |
|
|
|
Dec 21 2010, 08:08
|
Группа: Новичок
Сообщений: 4
Регистрация: 21-12-10
Пользователь №: 61 770

|
пытаюсь сделать USB устройства класса CDC. Примеров на эту тему вроде бы много. Пытаюсь повторить один из примеров и вот какая штука. В Windows XP SP2 работает хорошо.
В Windows 7 32bit не устанавливаются драйвера - ошибка 10. Перепробовал на 3х компьютерах.
Смотрю USB трекером, какие пакеты ходят в шине. Ошибок нет - все транзакции выполняются без ошибок. GetDescriptor(addr0) SetAddress(addr1) GetDescriptor(addr1) GetConfiguration(67bytes) ... GetDescriptor(addr1) GetConfiguration(67bytes) SetConfiguration()
Все - дальше не работает. Драйвер не устанавливается, в DeviceManager желтая иконка.
Единственная странность которую заметил - при первом чтении configuration хост запрашивает 255 байт и устройство отдает 67 - сколько есть. При втором чтении configuration хост почему-то спрашивает 265 байт - это 0х109! Конечно устройство и в этом случае отдает все 67 байт дескриптора, которые есть. Странность в том, что всякие другие устройства какие я пробою подключать у них хост спрашивает только 9 байт при втором чтении конфиг дескриптора и никогда не спрашивает 0х109.
Вот те дескрипторы, что у меня есть:
////////////////////////////////////////////////////////////////////////// UCHAR usb_device_descriptor_a[]= { 0x12,0x01,0x00,0x02,0x02,0x00,0x00,0x08, 0x10,0xff,0x10,0xff,0x01,0x00,0x00,0x00, 0x00,0x01 };
UCHAR usb_configuration_descriptor_a[]= { 0x09,0x02,0x43,0x00,0x02,0x01,0x00,0x80, 0x32,0x09,0x04,0x00,0x00,0x01,0x02,0x02, 0x01,0x00,0x05,0x24,0x00,0x10,0x01,0x04, 0x24,0x02,0x02,0x05,0x24,0x06,0x00,0x01, 0x05,0x24,0x01,0x00,0x01,0x07,0x05,0x82, 0x03,0x08,0x00,0x02,0x09,0x04,0x01,0x00, 0x02,0x0a,0x00,0x00,0x00,0x07,0x05,0x03, 0x02,0x08,0x00,0x00,0x07,0x05,0x83,0x02, 0x08,0x00,0x00 }; //////////////////////////////////////////////////////////////////////////
Я уже и всякие другие пробовал из других примеров - результат тот же
Может кто сталкивался почему виндовс 7 хочет прочитать 265 байт?
|
|
|
|
|
 |
Ответов
|
Dec 21 2010, 08:19
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(itester @ Dec 21 2010, 15:08)  Может кто сталкивался почему виндовс 7 хочет прочитать 265 байт? Думаю, дело вообще не в этом. У меня XP тоже может попросить заведомо больше данных, чем есть в дескрипторе, однако же все работает правильно. Как вариант - в примере счетчик этих самых данных восьмиразрядный, поэтому попросту переполняется и отбрасывает девятый разряд. Кстати, а что у вас за МК ? Чей пример ? А если взять другой пример (не CDC), то он заработает, или нет ? USB - штука тонкая, примеров разных я в свое время перебрал кучу. И далеко не все из них работают ...
|
|
|
|
|
Dec 21 2010, 08:51
|
Группа: Новичок
Сообщений: 4
Регистрация: 21-12-10
Пользователь №: 61 770

|
Цитата(kovigor @ Dec 21 2010, 14:19)  Думаю, дело вообще не в этом. У меня XP тоже может попросить заведомо больше данных, чем есть в дескрипторе, однако же все работает правильно. Как вариант - в примере счетчик этих самых данных восьмиразрядный, поэтому попросту переполняется и отбрасывает девятый разряд. Кстати, а что у вас за МК ? Чей пример ? А если взять другой пример (не CDC), то он заработает, или нет ? USB - штука тонкая, примеров разных я в свое время перебрал кучу. И далеко не все из них работают ... пример я брал вот этот http://habrahabr.ru/blogs/controllers/95925/хотя само устройство у меня не такое. Из примера взяты дескрипторы и INF файл. Я не против, что хост может запрашивать больше данных, чем есть в дескрипторе. Это теоретически нормально. А практически я вижу что так не должно быть. В XP хост всегда первый раз читает 9 байт configuration - это конфиг дескриптор - чтобы узнать полный размер configuration. Затем попозже уже читает столько сколько узнал из конфиг дескриптора - 67байт. В Linux UBUNTU - происходит то же самое. и работает. В виндовс 7 читает сперва 255 байт и получает реальные 67. А второй раз запрашивает почему-то 265 (хотя уже точно знает сколько длина дескриптора) - этого никогда не случается ни с какими другими устройствами.
|
|
|
|
|
Dec 21 2010, 09:18
|
Группа: Новичок
Сообщений: 4
Регистрация: 21-12-10
Пользователь №: 61 770

|
Цитата(kovigor @ Dec 21 2010, 15:04)  А вас не смущает, что 265 = 0x109 = 0x009 с отброшенным девятым разрядом ? Может, вы неправильно длину определили ? И вообще, что будет, если вставить мышь, или клавиатуру ? Тоже 265 байт запросит ? И чем смотрите ? Попробуйте BusHound ... да меня это смущает. А смотрю я аппаратным трекером - у меня их два разных фирм производителей и оба показывают, что от хоста к моему устройству идет запрос на чтение дескриптора с длиной 0x109! очень странно... Но это только в WIndows7 в XP и UBUNTU читает 9 байт а вот когда вставляю другие устройства в Виндовс7 то читает 9 байт.
Сообщение отредактировал itester - Dec 21 2010, 09:20
|
|
|
|
Сообщений в этой теме
itester не работает USB-Serial в Windows 7 32bit Dec 21 2010, 08:08    kovigor Цитата(itester @ Dec 21 2010, 16:18) а во... Dec 21 2010, 09:31 itester хм..
вроде бы заработало, но как-то все очень стра... Dec 21 2010, 15:42 kovigor Цитата(itester @ Dec 21 2010, 22:42) Что ... Dec 22 2010, 06:13  nckkm Цитата(kovigor @ Dec 22 2010, 12:13) А чт... Dec 22 2010, 08:17   kovigor Цитата(nckkm @ Dec 22 2010, 15:17) Причем... Dec 22 2010, 08:22 Mty Информация к размышлению.
В w7 есть заморочка с не... Dec 23 2010, 11:47
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|