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

 
 
 
Reply to this topicStart new topic
> не работает 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
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
kovigor
сообщение Dec 21 2010, 09:31
Сообщение #6


Гуру
******

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



Цитата(itester @ Dec 21 2010, 16:18) *
а вот когда вставляю другие устройства в Виндовс7 то читает 9 байт.


Посмотрел лог энумерации в одном из своих HID - проектов. Просто для интереса. Обратите внимание вот на эту строку: "//80 06 00 02 00 00 FF 01 05". Т.е., XP запросила 511 (!) байт дескриптора конфигурации. И вот на эту строку: "80 06 00 02 00 00 FF 01 0A". Здесь то же самое сделал BIOS, хотя настоящий размер был ему известен. Т.е., я говорю, что это "вариант нормы", а ОС здесь вообще не при чем. Просто поищите другой пример, если не хочется вникать в этот.
А вот и весь лог:

//Процесс энумерации моего HID - устройства с момента
//включения машины до окончания загрузки Windows XP
//(маленький хост на процессоре ATOM):

//Windows XP is shutting down
21 09 00 02 00 00 01 00 02

//Enumeration by BIOS
80 06 00 01 00 00 08 00 07
00 05 01 00 00 00 00 00 0A
80 06 00 01 00 00 12 00 01
80 06 00 02 00 00 0A 00 04
80 06 00 02 00 00 6D 00 07
00 09 01 00 00 00 00 00 00
81 06 00 22 00 00 3E 00 03
21 09 00 02 00 00 01 00 06
81 06 00 22 01 00 32 00 02
80 06 00 01 00 00 08 00 08
80 06 00 01 00 00 12 00 02
80 06 00 02 00 00 FF 01 0A
00 05 02 00 00 00 00 00 07
00 09 01 00 00 00 00 00 0A
21 0A 00 00 00 00 00 00 03
21 0B 00 00 00 00 00 00 07
00 03 01 00 00 00 00 00 00
21 09 00 02 00 00 01 00 04
00 09 01 00 00 00 00 00 0A
21 0B 00 00 01 00 00 00 03
00 03 01 00 00 00 00 00 07
21 09 00 02 00 00 01 00 09
21 09 00 02 00 00 01 00 09

//Exitting from BIOS SETUP and then Windows XP loading
80 06 00 01 00 00 08 00 03
80 06 00 01 00 00 12 00 08
80 06 00 02 00 00 FF 01 05
00 05 02 00 00 00 00 00 02
00 09 01 00 00 00 00 00 05
21 0A 00 00 00 00 00 00 09
21 0B 00 00 00 00 00 00 02
00 03 01 00 00 00 00 00 06
21 09 00 02 00 00 01 00 0A
00 09 01 00 00 00 00 00 05
21 0B 00 00 01 00 00 00 09
00 03 01 00 00 00 00 00 02
21 09 00 02 00 00 01 00 04
80 06 00 01 00 00 40 00 01
00 05 01 00 00 00 00 00 09
80 06 00 01 00 00 12 00 05
80 06 00 02 00 00 09 00 09
80 06 00 03 00 00 FF 00 02
80 06 03 03 09 04 FF 00 07
80 06 00 02 00 00 FF 00 01
80 06 00 03 00 00 FF 00 02
80 06 02 03 09 04 FF 00 07
80 06 00 03 00 00 FF 00 02
80 06 02 03 09 04 FF 00 07
80 06 00 01 00 00 12 00 00
80 06 00 02 00 00 09 00 04
80 06 00 02 00 00 6D 00 08
00 09 01 00 00 00 00 00 02
80 06 00 03 00 00 FF 00 03
80 06 02 03 09 04 FF 00 08
80 06 00 03 00 00 FF 00 03
80 06 02 03 09 04 FF 00 08
80 06 00 03 00 00 FF 00 06
80 06 02 03 09 04 FF 00 00
80 06 00 03 00 00 FF 00 06
80 06 02 03 09 04 FF 00 00
80 06 00 03 00 00 FF 00 07
80 06 02 03 09 04 FF 00 01
80 06 00 03 00 00 FF 00 07
80 06 02 03 09 04 FF 00 01
80 06 00 03 00 00 FF 00 08
80 06 02 03 09 04 FF 00 02
80 06 00 03 00 00 FF 00 08
80 06 02 03 09 04 FF 00 02
21 0A 00 00 00 00 00 00 06
81 06 00 22 00 00 7E 00 09
21 0A 00 00 01 00 00 00 06
81 06 00 22 01 00 72 00 08
21 0A 00 00 02 00 00 00 06
81 06 00 22 02 00 A5 00 09
21 0A 00 00 03 00 00 00 07
81 06 00 22 03 00 66 00 0A
21 09 00 02 00 00 01 00 07
21 09 00 02 00 00 01 00 09
21 09 00 02 00 00 01 00 03

Сообщение отредактировал kovigor - Dec 21 2010, 09:37
Go to the top of the page
 
+Quote Post
itester
сообщение Dec 21 2010, 15:42
Сообщение #7





Группа: Новичок
Сообщений: 4
Регистрация: 21-12-10
Пользователь №: 61 770



хм..
вроде бы заработало, но как-то все очень странно.
Что бы начало работать в Windows 7 32бит пришлось ставить драйвер lowcdc.sys вот отсюда http://www.recursion.jp/avrcdc/driver.html
Как такое может быть? А как же стандартный драйвер виндовс и стандартный класс CDC?

Там же на сайте есть такое разъяснение:

Windows system has a CDC protocol driver (usbser.sys) to generate virtual COM port. However, it requires a "Setting Information" file at the first connection. At this time, the patch driver (lowcdc.sys) is installed together.
The low-speed bulk transfer mostly works on Windows XP, but it sometimes stalls the transfer on some host controller or hub. Furthermore, this transfer is not allowed on Windows Vista. This patch disables the interrupt pipe that is used for status report, and switches the bulk and the interrupt pipe configuration at the initial configuration process.

Здесь он пишет что lowspeed bulk не работает в Vista (а может и в Windows7)?
Возможно это зависит от хост контроллера ПК или его драйвера?

Так все таки у кого нибудь работало оно в Windows 7 32bit без дополнительных шаманств????
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 22 2010, 06:13
Сообщение #8


Гуру
******

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



Цитата(itester @ Dec 21 2010, 22:42) *
Что бы начало работать в Windows 7 32бит пришлось ставить драйвер lowcdc.sys
Как такое может быть? А как же стандартный драйвер виндовс и стандартный класс CDC?


А что мешает просто вставить в машину фабричный переходник USB-COM и все увидеть своими глазами ? Я убежден, почти наверняка, что дело не в ОС, а в глючном примере. Поверьте, глючных и откровенно плохих примеров я перевидал заметно больше, чем негодных ОС ...

P.S. Bulk не работает (!!!!!) на Low Speed. Вот строка из спецификации Universal Serial Bus Specification 2.0, п. 5.8.3.:
"A low-speed device must not have bulk endpoints"

Сообщение отредактировал kovigor - Dec 22 2010, 06:15
Go to the top of the page
 
+Quote Post
nckkm
сообщение Dec 22 2010, 08:17
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 13-04-10
Пользователь №: 56 623



Цитата(kovigor @ Dec 22 2010, 12:13) *
А что мешает просто вставить в машину фабричный переходник USB-COM и все увидеть своими глазами ? Я убежден, почти наверняка, что дело не в ОС, а в глючном примере. Поверьте, глючных и откровенно плохих примеров я перевидал заметно больше, чем негодных ОС ...

P.S. Bulk не работает (!!!!!) на Low Speed. Вот строка из спецификации Universal Serial Bus Specification 2.0, п. 5.8.3.:
"A low-speed device must not have bulk endpoints"


фабричных устройств переходник UBS-COM класса CDC не встречал вообще.
Обычно USB-COM например Profilic 2303 - class defined at interface level.
Поэтому сравнить с ним не могу. Кроме того, нужное мне устройство грубо говоря на МК, то есть низко скоростное. По видимому из-за этого и проблемы. Причем проблема в Win7 видимо искусственная - ведь в XP и UBUNTU bulk на low speed таки работает



Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 22 2010, 08:22
Сообщение #10


Гуру
******

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



Цитата(nckkm @ Dec 22 2010, 15:17) *
Причем проблема в Win7 видимо искусственная - ведь в XP и UBUNTU bulk на low speed таки работает


Ну, тут как вам больше нравится. Я лично предпочитаю верить спецификации и от нее не отступать. если вы мне не верите, то посмотрите сами. Где именно - я уже говорил ...
Go to the top of the page
 
+Quote Post
Mty
сообщение Dec 23 2010, 11:47
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 19-12-04
Из: Москва
Пользователь №: 1 560



Информация к размышлению.
В w7 есть заморочка с неподписанными драйверами.
Попробуйте перегрузится, нажать F8 при загрузке и выбрать в boot menu "Отключить подпись драйверов"

Не могу гарантировать что дело в этом, но у меня на 64бит W7 были заморочки с этим. Как раз в в dev manager была желтая иконка.
Go to the top of the page
 
+Quote Post

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

 


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


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