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

 
 
> не работает USB-Serial в Windows 7 32bit
itester
сообщение Dec 21 2010, 08:08
Сообщение #1





Группа: Новичок
Сообщений: 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 байт?




Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kovigor
сообщение Dec 21 2010, 08:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(itester @ Dec 21 2010, 15:08) *
Может кто сталкивался почему виндовс 7 хочет прочитать 265 байт?


Думаю, дело вообще не в этом. У меня XP тоже может попросить заведомо больше данных, чем есть в дескрипторе, однако же все работает правильно. Как вариант - в примере счетчик этих самых данных восьмиразрядный, поэтому попросту переполняется и отбрасывает девятый разряд. Кстати, а что у вас за МК ? Чей пример ? А если взять другой пример (не CDC), то он заработает, или нет ? USB - штука тонкая, примеров разных я в свое время перебрал кучу. И далеко не все из них работают ...
Go to the top of the page
 
+Quote Post
itester
сообщение Dec 21 2010, 08:51
Сообщение #3





Группа: Новичок
Сообщений: 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 (хотя уже точно знает сколько длина дескриптора) - этого никогда не случается ни с какими другими устройствами.



Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 21 2010, 09:04
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(itester @ Dec 21 2010, 15:51) *
А второй раз запрашивает почему-то 265 (хотя уже точно знает сколько длина дескриптора) - этого никогда не случается ни с какими другими устройствами.


А вас не смущает, что 265 = 0x109 = 0x009 с отброшенным девятым разрядом ? Может, вы неправильно длину определили ? И вообще, что будет, если вставить мышь, или клавиатуру ? Тоже 265 байт запросит ? И чем смотрите ? Попробуйте BusHound ...
Go to the top of the page
 
+Quote Post
itester
сообщение Dec 21 2010, 09:18
Сообщение #5





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post



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

 


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


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