
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.207] |
![]() |
|
Страницы: (14) « Первая ... 4 5 [6] 7 8 ... 13 14 все ( Перейти к последнему сообщению ) |
Сообщ.
#76
,
|
|
|
Насчёт того что при PortReset устанавливается PortEnable - верю
![]() Вот из спецификации: ![]() ![]() This bit is also set, if not already, at the completion of a port reset when ResetStatusChange is set or port suspend when SuspendStatusChange is set. Завершения ресета можно ждать по биту PRSC, но я тоже просто задержку вставил. В общем попробуй это - тут с ресетом порта, и из предыдущего поста. Должны вроди обе работать. И ещё один вопрос. В общем у меня на машине UHCI. Я с флэшки читаю дескрипторы - в конфигурации MaxPower=100mA. Потом у друга юзал её под XP. Потом у него же с OHCI получаю дескриптор - MaxPower=300mA. Ну думаю - х.з. - может специфика OHCI. Прихожу домой - 300mA показывает. Я думал может меня глючит ![]() Но есть старые логи - там 100mA, я проверил. Так собственно вопрос. Есть такая штука - SET_DESCRIPTOR. Так вот - она дескриптор записывает только до отключения устройства, или типа перепрошивает его. Я вообще думал, что установка дескриптора до первого ресета устройства действует. По спецификации так и есть. Но я другого объяснения изменения параметров придумать не могу. Может есть какие мысли по этому поводу. XP вообще странные вещи мочит. Вставляю флэшку USB2.0 в UHCI контроллер, а она мне мол Быстрое устройство подключено к медленному порту. Откуда она вообще это знает, устройство ведь в FullSpeed работает. Единственное может по версии USB в дескрипторе устройства. Но с изменением питания мне вообще не понятно. Прикреплённый файл ![]() |
Сообщ.
#77
,
|
|
|
ОН ЖИВОЙ!!! ЖИВОЙ!!!
![]() ![]() Вот лог: ![]() ![]() Detecting OHCI USB Controllers... 1 OHCI USB Controller(s) detected OHCI USB Controller 0: VENDOR ID = 1039h, DEVICE ID = 7001h PCI BUS = 0, PCI DEV = 1, PCI FN = 2 MM BASE = DFFFB000h, IRQ = 5 Detecting USB Devices... 1 USB Device(s) detected ======================================================================== DEVICE DESCRIPTOR ======================================================================== USB version : 2.0 Device Class : 00h Device SubClass : 00h Device Protocol : 00h Endpoint Zero Max Packet Size : 40h VendorID : 08ECh ProductID : 0008h Device version : 1.0 iManufacturer : 01h iProduct : 02h iSerialNumber : 03h NumConfigurations: : 01h Supported LangID(s) : 0409h Manufacturer : Kingston Product : DataTraveler 2.0 Serial Number : 09319450C2A0A9C4 ======================================================================== CONFIGURATION DESCRIPTOR ======================================================================== NumInterfaces : 01h ConfigurationValue : 01h iConfiguration : 00h Remote Wakeup : NO Self Powered : NO MaxPower : 200 mA ======================================================================== INTERFACE DESCRIPTOR ======================================================================== Interface Number : 00h Alternate Settings : 00h NumEndpoints : 03h Interface Class : 08h Interface SubClass : 06h Interface Protocol : 50h iInterface : 00h ======================================================================== ENDPOINT DESCRIPTOR ======================================================================== EndpointAddress : 81h (01h, IN) Attributes : 02h (Bulk pipe) MaxPacketSize : 40h Interval : 0 ms ======================================================================== ENDPOINT DESCRIPTOR ======================================================================== EndpointAddress : 02h (02h, OUT) Attributes : 02h (Bulk pipe) MaxPacketSize : 40h Interval : 0 ms ======================================================================== ENDPOINT DESCRIPTOR ======================================================================== EndpointAddress : 83h (03h, IN) Attributes : 03h (Interrupt pipe) MaxPacketSize : 40h Interval : 1 ms Цитата cppasm @ Быстрое устройство подключено к медленному порту. Откуда она вообще это знает, устройство ведь в FullSpeed работает Блин, у меня кто-то книжку упер, я пока не могу посмотреть, но по моему там есть какая-то разница в подтягивающих резисторах при подключении... когда я ее найду, смогу точнее расказать. А насчет изменения значений в дескрипторе не знаю, никогда не эксперементировал ![]() |
Сообщ.
#78
,
|
|
|
Новости меня радуют
![]() Ты один пост пропустил - попробуй ещё прогу оттуда. Тоже должна работать - мне просто интересно, будет или нет. Короче выяснилась одна вещ: когда контроллер ресетиш, если у него уже HCFS=UsbReset, он ничего не делает. Я с этим парился - после SMM такая фигня была. Надо выйти в UsbSuspend на 10мс, а потом в UsbReset. Если та прога заработает - это будет тому подтверждением. И ещё - если есть возможность попробуй пожалуйста рабочий вариант с каким нибудь LowSpeed устройством. Огромное спасибо за помощ. ![]() Насчёт изменения дескрипторов - я сегодня сам попробую, результат сообщу. А насчёт резисторов - есть такое дело. Но USB 1.1 HC нифига ведь не знает про HiSpeed... Не очень в общем понятно. |
Сообщ.
#79
,
|
|
|
Та что я пропустил, не работает! Так что предположения не подтвердилось
![]() Цитата cppasm @ Огромное спасибо за помощ. Пожалуйста! ![]() Добавлено Цитата Gerret @ А насчёт резисторов - есть такое дело. Но USB 1.1 HC нифига ведь не знает про HiSpeed... Там наверное есть отличие, которое не влияет на 1.1 но для 2.0 это Hi Speed Добавлено а с Low-speed не выходит... прога виснет! |
Сообщ.
#80
,
|
|
|
Не подтвердилась и ладно.
Но там где я тестировал без выхода в UsbSuspend после SMM устройство не отвечало. А с суспендом всё ок было. Но я думаю с ресетом порта и без суспенда всё ок будет. На следующей неделе проверю. А у LowSpeed есть какая-то специфика, или отличается только установленным битом в ED. |
Сообщ.
#81
,
|
|
|
Я с Low-speed не работал, т.к. флешки Low-spped не бывают
![]() ![]() |
Сообщ.
#82
,
|
|
|
Вот кое-то раскопал в спецификации:
![]() ![]() The HcLSThreshold register contains an 11-bit value used by the Host Controller to determine whether to commit to the transfer of a maximum of 8-byte LS packet before EOF. Neither the Host Controller nor the Host Controller Driver are allowed to change this value. Т.е. для LowSpeed максимальный размер блока, описываемого в TD=8 байтам. А я по 4Кб блоки сделал. Думаю к понедельнику сделаю новый вариант. А насчёт того, что ты в соседнем топике написал, что ты в регистр LegacySupport HceControl записываешь 0, оно конечно не вредит но можно не делать. Это для управления эмуляцией, используется в основном самим BIOS и SMM. Если ты вызвал OwnershipChange и получил управление - BIOS вмешиваться больше не будет до возврата ему управления. Вот сделал - попробуй и на FULLSPEED и на LOWSPEED устройствах. Надеюсь теперь всё ок. А насчёт изменения дескрипторов - если можешь тоже поэкспериментируй. У меня результаты странные какие-то. Запускаю запрос SET_DESCRIPTOR и всё - система намертво виснет. Ни NumLock не работает, ничего. Сразу скажу, что пробовал на UHCI и с остальными запросами программа отлично работает. Так что вот такие дела. Прикреплённый файл ![]() |
Сообщ.
#83
,
|
|
|
Что-то у меня сомнения появились что прога заработает.
Если нет - попробуй эту. Тут отличий никаких нет, но она на экран пишет номер дескриптора на котором произошла ошибка, код ошибки и кое-какие параметры кадра. Если повиснет - перепиши куда-нибудь пару строк и закинь сюда. При зависании думаю в файле ничего не будет - выход по Ctrl-Alt-Del буфера на диск не сбрасывает... А может и будет. В общем попробуй. Неужели опять устройство не отвечает. ![]() Насчёт SET DESCRIPTOR так ничего и не выяснил. Одни устройства возвращают NoError, но при этом дескриптор не меняют вообще. Другие возвращают STALL и при любом последующем обращении лочат всю систему. Так что как изменились параметры флэшки я так и не понял. При работе с UHCI я данные разбивал на блоки размером wMaxPacketSize для каждого TD. Но меня всегда интересовало, зачем под размер выделено 11 бит если wMaxPacketSize<=64. Сегодня попробовал указать больший размер - 1024. Два устройства с wMaxPacketSize=64 схавали нормально и данные вернули правильные. А устройство с wMaxPacketSize=8 залочилось вместе с системой. Хотя я вот понять не могу как оно вообще работает. Там ведь вроди кроме как в дескрипторе нигде размер блока не указывается. А некоторые устройства всё равно работают. Как? Не понятно... Прикреплённый файл ![]() |
Сообщ.
#84
,
|
|
|
Слушай, я сейчас перешел на освоение UHC и машину с OHC разобрал (все сразу на стол не вмещается
![]() ![]() Цитата cppasm @ А насчёт того, что ты в соседнем топике написал Это я делал, когда еще только начинал освоение OHC, а потом не стал удалаять ![]() Цитата cppasm @ Но меня всегда интересовало, зачем под размер выделено 11 Это, наверно, запас для USB 2.0 где размер блока может быть сильно больше 64 байт (для конечных точек, которые не SETUP). А дескрипторы передачи, ведь, для всех одинаковые. Как я понял, ты пишешь не просто драйвер для флешек под ДОС, а универсальное что-то, да? Цитата cppasm @ При работе с UHCI... С этим контроллером вообще надо нежно обращатся ![]() |
Сообщ.
#85
,
|
|
|
Жаль конечно что потестировать не сможешь, я тогда во вторник-среду сам проверю.
Цитата Gerret @ Как я понял, ты пишешь не просто драйвер для флешек под ДОС, а универсальное что-то, да? Да, я хочу написать USB стек под DOS. Возможно и с поддержкой EHCI. Это если меня лень не замучает ![]() Просто если писать драйвер отдельного устройства то возникают некоторые проблеммы. Например нельзя одновременно использовать драйвер флэшки и USB мыши - они конфликтовать будут. Цитата Gerret @ Слушай, я сейчас перешел на освоение UHC Я с ним уже разобрался - раньше это было. Будут вопросы - спрашивай. И потестить что-нибудь могу... PS: насчёт 11 бит я уже разобрался. В USB 1.1 это только для Isohronous посылок - максимум 1024 байта. Но с ними я вообще не работал, ну нет у меня таких устройств ![]() А в USB 2.0 (но это уже и другой контроллер) максимальные размеры пакетов: Interrupt - 1024, Bulk - 512. |
Сообщ.
#86
,
|
|
|
Цитата cppasm @ Да, я хочу написать USB стек под ДОС. Возможно и с поддержкой EHCI. Это если меня лень не замучает Это грамотный подход ![]() ![]() ![]() Цитата cppasm @ Я с ним уже разобрался - раньше это было. Будут вопросы - спрашивай. И потестить что-нибудь могу... А как ты в UHC определял окнчание транзакции? Я правда еще транзакции не делал, но спрашиваю заранее. Еще вопрос про OHC, ты с прерываниями не разобрался? Мне, в драйвере, они без надобности оказались, но на будущее хотелось бы узнать, как, все-таки, они работают ![]() Потому, как стек мне скорее всего тоже придется писать ![]() А с прерваниями он получится гораздо изящнее ![]() |
Сообщ.
#87
,
|
|
|
Цитата Gerret @ А это ты для себя или по работе? Да нет, это я для себя пишу. Хобби так сказать. ![]() В OHCI с прерываниями не разбирался - это ещё предстоит. В UHCI конец транзакции определяю так (почти также как и в OHCI): - Пока в QH не установлен бит T - цикл. - В цикле смотрю TD -- Если TD активен - переход в начало цикла. -- Если не активен --- Если есть ошибка - выход --- Если нет - переход на следующий TD Короче в цикле просматриваю список TD на наличие ошибки. И ещё - когда будешь писать - TD можно делать размером 16б а не 32. Всё равно пользовательские эти данные использовать скорее всего не будешь. А производительность возрастает и выравнивание тоже соблюдается. Прерывания там точно не сильно помогут. Насчёт принтера и сканера под DOS. С принтером проблем не будет - особенно если печатать только текст. А вот со сканером... На них стандарта нет. Я со своим разобрался (Mustek BearPaw 2448TA Plus). Делается так. Есть шпион USB - пишет все транзакции в лог. Т.е. ставишь дрова под Win и в шпионе выбираешь нужное устройство. Ну и потом смотришь какие там команды + ещё SANE есть (дрова под Linux), кое-что там посмотрел. Только муторно это всё и очень не универсально. PS: а где это ещё DOS используют - просто интересно. |
Сообщ.
#88
,
|
|
|
Цитата cppasm @ В UHCI конец транзакции определяю так Понятно. Спасибо ![]() Цитата cppasm @ Прерывания там точно не сильно помогут. Меня прерывания, в основном, интересуют на подключение/отключение уст-ва, но в UHC такого, по ходу, не предусмотрено... Цитата cppasm @ И ещё - когда будешь писать - TD можно делать размером 16б а не 32. Точно, в документации на UHCI так и написано. Не понятно, почему господин Кулаков решил, что там 32б... А на QH там вообще 8 байт всего надо ![]() Цитата cppasm @ Есть шпион USB - пишет все транзакции в лог. Ага, знаю! (USB Sniffer) У меня такой тоже есть ![]() ![]() Цитата cppasm @ а где это ещё DOS используют - просто интересно. Да вот нашлись тут какие-то... Нафига им это надо - без понятия ![]() Шеф мой как-то ко мне подошел и говорит: "Можешь написать драйвер, чтобы USB флешки под ДОСом читались?". Я сказал, что могу... и вот теперь занимаюсь этим гемороем ![]() Для кого все это, я не интересовался ![]() Ладно, если про прерывания, что-нибудь выяснишь, сообщи плиз, а то у меня так и не получилось с ними работать ![]() |
Сообщ.
#89
,
|
|
|
Привет мужики! А тема, то благостно растет и Ваши успехи радуют! Сожалею, что у меня лично USB сейчас совсем заняться не получается даже теоретически, хотя PCI доступ уже прозрачен и поюзан. Правда железяки у меня другие. А как в будующем исходники рабочие да путящие народу будут ли хоть где то понюхать?
![]() Посмотрел вот мельком на USB Sniffer исходники то есть, если это тот самый: http://sourceforge.net/projects/usbsnoop/ но там похоже мутняк еще тот + виртуальное устройство... А вот еще надыбал один в плане мониторинга: http://www.hhdsoftware.com/usbmon.html никто не пробовал как с ним работается, хотя бы сравнительно? |
Сообщ.
#90
,
|
|
|
Ух ты!!! usbmon это просто супер
![]() VaStaNi большое спасибо! Единственное, она при установке мне перекоробила дрова от хостов ![]() cppasm очень советую попробовать! Цитата VaStaNi @ ...как с ним работается, хотя бы сравнительно? Мне очень понравилось! Горздо прикольнее и удобнее сделано чем usbsnoop! Цитата VaStaNi @ ...USB Sniffer исходники... А там ничего особенно интересного не найдешь (применительно к ДОСу ИМХО). Эта прога работает с виндовыми дровами, а не с хостами... |