Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Таймаут ReadFile из USB-устройства на не-INTEL чипсетах  (Прочитано 53777 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
oleshii
Участник

ru
Offline Offline

« Ответ #30 : 08-06-2012 12:33 » 

Если тема еще актуальная, а бы предположил, что "забивается" interrupt pipe устройства (ну, и пайпы данных вместе с нми). MS ВООБЩЕ не документирует
работу с этими примитивами, оставляя ее на откуп USBD kernel mode библиотечному драйверу, используемому для реализации взаимодействия цепочки
хост-контроллер => хаб => USBD => клиентский драйвер. Лечится это "мягким передргиванием" устройства из UI. Для этого служат функции семейства
SetupDi... Если нужна конкретика, отпишитесь.
Записан
prottoss
Участник

ru
Offline Offline

« Ответ #31 : 18-07-2012 03:58 » 

Конкретика нужна. Дело в том, что в самом устройстве я ничего изменить не смогу, т.к. это встроенный в микроконтроллер USB бутлоадер.
Если у Вас есть методы "передергивания" устройства, очень хотелось бы увидеть.
Записан
oleshii
Участник

ru
Offline Offline

« Ответ #32 : 06-08-2012 06:09 » 

http://www.rsdn.ru/?forum/asm/1981779.flat.aspx
Это рекомендуется к прочтению. На сей концепции основан сам рестарт устройств. Но напрямую пользвать это
не очень здорово, хотя это самый быстрый путь. В чем "нездоровость" ?
1) В этих вызовах проверяется привилегиии пользователя SE_TCB_NAME, которая под Win 7 имеет трудности с установкой
2) Этой привилегий обладают NT сервисы, разработка и понятие концепции которых тоже может вызывать трудности
По поводу SetupDi... рекомендую скачать DDK (WDK), собрать пример USBView, там основная часть этого семейства функций
используется. Описание их - в MSDN. После того, как все это проделаете, отпишитесь - расскажу, как с помощью этих функций
сделать рестарт.
Записан
prottoss
Участник

ru
Offline Offline

« Ответ #33 : 06-08-2012 12:10 » 

Вообще пока для меня не совсем понятно, как я буду организовывать работу программы... Т.е. после таймаута выполнять какое то передергивание??? Далее пробовать снова общаться с устройством...

Добавлено через 5 часов, 9 минут и 26 секунд:
Вроде бы что то нарыл по теме на рекомендованном ранее at91.com
http://www.at91.com/forum/viewtopic.php/p,35542/#p35542
« Последнее редактирование: 06-08-2012 17:19 от prottoss » Записан
oleshii
Участник

ru
Offline Offline

« Ответ #34 : 07-08-2012 07:57 » 

Т.е. после таймаута выполнять какое то передергивание??? Далее пробовать снова общаться с устройством...

Да, примерно так. Хотя это не есть гуд. Найдите какие либо признаки того, что устройство "залипло", и оттолкнитесь от них.
В свое время я имел похожую проблему с Gemalto joined smart card reader. Там все "лечилось" "передергиванием" device.
Хотя потом удалось найти более дешевый способ.

Вроде бы что то нарыл по теме на рекомендованном ранее at91.com

Может, это и имеет отношение к вопросу. Трудно сказать. Вообще то (ИМХО !) данные протоколы являются достаточно
старыми. Сейчас во восю мазуту используется EHCI (более современный м совместимый с ними) и xHCI (USB 3.0 UAS - USB as SCSI)
« Последнее редактирование: 07-08-2012 08:01 от oleshii » Записан
prottoss
Участник

ru
Offline Offline

« Ответ #35 : 07-08-2012 12:46 » 

Может, это и имеет отношение к вопросу... Трудно сказать.
Я вот почему подумал...
1. У чела по ссылке выше абсолютно такая же проблема
2. Вот еще одна тема, где абсолютно аналогичная ситуация - работает на INTEL (EHCI), но не работает на других чипсетах (OHCI), но в программе на МК. Соответственно топикстартер ее решил, так как код поправить может.
http://electronix.ru/forum/index.php?showtopic=94496
При чем проблема в том, что конечная точка INTERRUPT выдавалась за ISOHRONOUS в классе CDC - и это в примерах от ATMEL. Соответственно и в заводском буте они могли так же накосячить. Но, нет, чтобы исправить проблему, даже в самых последних ревизиях МК та же проблема. Тем не менее, если использовать вместо usbser.sys, например, bulkusb.sys из WinDDK то проблема исчезает. Но, я принципиально хочу использовать usbser.sys
« Последнее редактирование: 07-08-2012 12:51 от prottoss » Записан
oleshii
Участник

ru
Offline Offline

« Ответ #36 : 08-08-2012 04:43 » 

Тогда прочтите дескрипторы устройства. Или запустите USBVIEW (из последнего WDK), он все должен показть-
где какие конечные точки, и какие типы они имеют.
Записан
prottoss
Участник

ru
Offline Offline

« Ответ #37 : 08-08-2012 05:02 » 

К сожалению сейчас у меня нет под рукой платформы AMD. Проверял дома и на работе на Intel - показывает что контрольная точка типа INTERRUPT.
Записан
oleshii
Участник

ru
Offline Offline

« Ответ #38 : 09-08-2012 10:05 » 

Может быть, дело не в платформе, а в конкретной модели (или их семействе) матери ?
Записан
prottoss
Участник

ru
Offline Offline

« Ответ #39 : 09-08-2012 10:29 » 

Нет. Я почти уверен, что дело в производителе чипсета. Потому что несколько человек, кто пытался прошить плату с РС с неинтеловским чипсетом, написали мне письмо об ошибке. И я сам пробовал на случайном РС. Эффект один и тот же.
Постараюсь осенью найти проблемную платформу и изучить проблему плотнее.
Записан
oleshii
Участник

ru
Offline Offline

« Ответ #40 : 09-08-2012 10:34 » 

Что ж это за производитель такой загадочный ? Запустите  UsbView (если нет у Вас, напишите разрядность
OS на рабочем компе, саму OS, и Ваш e-mail - соберу-пришлю, мне не жалко. А рисунки получившиеся сделайте
screenshots, и выложите сюда - посмотрим.
Записан
prottoss
Участник

ru
Offline Offline

« Ответ #41 : 09-08-2012 10:38 » 

Производитель чипсета - имелось ввиду INTEL или не-INTEL Улыбаюсь, т.е nVidia или AMD.
USBView у меня есть. Скриншоты вышлю.
Записан
oleshii
Участник

ru
Offline Offline

« Ответ #42 : 09-08-2012 11:33 » 

Он нужен последний (там есть по отдельному запросу вывод дескрипторов).

Добавлено через 12 минут и 14 секунд:
Кстати, производитель USB контроллера НЕ ВСЕГДА совпадает с производителем чипсета motherboard.
Вот почему я и спросил...
« Последнее редактирование: 09-08-2012 11:45 от oleshii » Записан
prottoss
Участник

ru
Offline Offline

« Ответ #43 : 09-08-2012 12:34 » 

Да. Согласен. Тем не менее закономерность именно по чипсетам. дело то не в железе контроллера передового края, а дело скорее всего в драйвере самого нижнего уровня, который стоит ниже usbser.sys

Добавлено через 42 секунды:
Для разных чипсетов он однозначно разный
« Последнее редактирование: 09-08-2012 12:35 от prottoss » Записан
oleshii
Участник

ru
Offline Offline

« Ответ #44 : 10-08-2012 04:37 » 

Тогда Вы говорите о драйвере хаба. Он на всей линейке OS не изменяется. А вот дескрипторы устройства почитать = это тема !
Записан
prottoss
Участник

ru
Offline Offline

« Ответ #45 : 12-08-2012 10:40 » 

На моем РС (INTEL) USBView показывает тип контрольной точки как Interrupt.

Сегодня купил платку для экспериментов - http://www.asrock.com/mb/overview.ru.asp?Model=E350M1
Надеюсь на этой плате не будет работать Улыбаюсь Иначе сделаю из нее HTPC
Записан
prottoss
Участник

ru
Offline Offline

« Ответ #46 : 19-08-2012 04:32 » 

Блин!!! На этой плате все работает!

Добавлено через 14 минут и 17 секунд:
Хотя я поторопился... Запрограммировать плату утилита таки не может. На передаче произвольного блока вылетает по Write Timeout.
Вот как показывает устройство утилита USBView:

Device Descriptor:
bcdUSB:             0x0110
bDeviceClass:         0x02
bDeviceSubClass:      0x00
bDeviceProtocol:      0x00
bMaxPacketSize0:      0x08 (8 )
idVendor:           0x03EB (Atmel Corporation)
idProduct:          0x6124
bcdDevice:          0x0110
iManufacturer:        0x00
iProduct:             0x00
iSerialNumber:        0x00
bNumConfigurations:   0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed:     Full
Device Address:       0x01
Open Pipes:              3

Endpoint Descriptor:
bEndpointAddress:     0x83
Transfer Type:   Interrupt
wMaxPacketSize:     0x0008 (8 )
bInterval:            0xFF

Endpoint Descriptor:
bEndpointAddress:     0x01
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x82
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Configuration Descriptor:
wTotalLength:       0x0043
bNumInterfaces:       0x02
bConfigurationValue:  0x01
iConfiguration:       0x00
bmAttributes:         0xC0 (Bus Powered Self Powered )
MaxPower:             0x00 (0 Ma)

Interface Descriptor:
bInterfaceNumber:     0x00
bAlternateSetting:    0x00
bNumEndpoints:        0x01
bInterfaceClass:      0x02
bInterfaceSubClass:   0x02
bInterfaceProtocol:   0x00
iInterface:           0x00

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 00 10 01

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x04
04 24 02 00

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 06 00 01

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 01 00 01

Endpoint Descriptor:
bEndpointAddress:     0x83
Transfer Type:   Interrupt
wMaxPacketSize:     0x0008 (8 )
bInterval:            0xFF

Interface Descriptor:
bInterfaceNumber:     0x01
bAlternateSetting:    0x00
bNumEndpoints:        0x02
bInterfaceClass:      0x0A
bInterfaceSubClass:   0x00
bInterfaceProtocol:   0x00
iInterface:           0x00

Endpoint Descriptor:
bEndpointAddress:     0x01
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x82
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00
« Последнее редактирование: 19-08-2012 04:47 от prottoss » Записан
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines