oleshii
Участник
Offline
|
|
« Ответ #30 : 08-06-2012 12:33 » |
|
Если тема еще актуальная, а бы предположил, что "забивается" interrupt pipe устройства (ну, и пайпы данных вместе с нми). MS ВООБЩЕ не документирует работу с этими примитивами, оставляя ее на откуп USBD kernel mode библиотечному драйверу, используемому для реализации взаимодействия цепочки хост-контроллер => хаб => USBD => клиентский драйвер. Лечится это "мягким передргиванием" устройства из UI. Для этого служат функции семейства SetupDi... Если нужна конкретика, отпишитесь.
|
|
|
Записан
|
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #31 : 18-07-2012 03:58 » |
|
Конкретика нужна. Дело в том, что в самом устройстве я ничего изменить не смогу, т.к. это встроенный в микроконтроллер USB бутлоадер. Если у Вас есть методы "передергивания" устройства, очень хотелось бы увидеть.
|
|
|
Записан
|
|
|
|
oleshii
Участник
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
Участник
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
Участник
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
Участник
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
Участник
Offline
|
|
« Ответ #36 : 08-08-2012 04:43 » |
|
Тогда прочтите дескрипторы устройства. Или запустите USBVIEW (из последнего WDK), он все должен показть- где какие конечные точки, и какие типы они имеют.
|
|
|
Записан
|
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #37 : 08-08-2012 05:02 » |
|
К сожалению сейчас у меня нет под рукой платформы AMD. Проверял дома и на работе на Intel - показывает что контрольная точка типа INTERRUPT.
|
|
|
Записан
|
|
|
|
oleshii
Участник
Offline
|
|
« Ответ #38 : 09-08-2012 10:05 » |
|
Может быть, дело не в платформе, а в конкретной модели (или их семействе) матери ?
|
|
|
Записан
|
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #39 : 09-08-2012 10:29 » |
|
Нет. Я почти уверен, что дело в производителе чипсета. Потому что несколько человек, кто пытался прошить плату с РС с неинтеловским чипсетом, написали мне письмо об ошибке. И я сам пробовал на случайном РС. Эффект один и тот же. Постараюсь осенью найти проблемную платформу и изучить проблему плотнее.
|
|
|
Записан
|
|
|
|
oleshii
Участник
Offline
|
|
« Ответ #40 : 09-08-2012 10:34 » |
|
Что ж это за производитель такой загадочный ? Запустите UsbView (если нет у Вас, напишите разрядность OS на рабочем компе, саму OS, и Ваш e-mail - соберу-пришлю, мне не жалко. А рисунки получившиеся сделайте screenshots, и выложите сюда - посмотрим.
|
|
|
Записан
|
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #41 : 09-08-2012 10:38 » |
|
Производитель чипсета - имелось ввиду INTEL или не-INTEL , т.е nVidia или AMD. USBView у меня есть. Скриншоты вышлю.
|
|
|
Записан
|
|
|
|
oleshii
Участник
Offline
|
|
« Ответ #42 : 09-08-2012 11:33 » |
|
Он нужен последний (там есть по отдельному запросу вывод дескрипторов).
Добавлено через 12 минут и 14 секунд: Кстати, производитель USB контроллера НЕ ВСЕГДА совпадает с производителем чипсета motherboard. Вот почему я и спросил...
|
|
« Последнее редактирование: 09-08-2012 11:45 от oleshii »
|
Записан
|
|
|
|
prottoss
Участник
Offline
|
|
« Ответ #43 : 09-08-2012 12:34 » |
|
Да. Согласен. Тем не менее закономерность именно по чипсетам. дело то не в железе контроллера передового края, а дело скорее всего в драйвере самого нижнего уровня, который стоит ниже usbser.sys
Добавлено через 42 секунды: Для разных чипсетов он однозначно разный
|
|
« Последнее редактирование: 09-08-2012 12:35 от prottoss »
|
Записан
|
|
|
|
oleshii
Участник
Offline
|
|
« Ответ #44 : 10-08-2012 04:37 » |
|
Тогда Вы говорите о драйвере хаба. Он на всей линейке OS не изменяется. А вот дескрипторы устройства почитать = это тема !
|
|
|
Записан
|
|
|
|
|
prottoss
Участник
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 »
|
Записан
|
|
|
|
|