На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (14) « Первая ... 4 5 [6] 7 8 ...  13 14 все  ( Перейти к последнему сообщению )  
> OHCI USB
    Насчёт того что при PortReset устанавливается PortEnable - верю :)
    Вот из спецификации:
    ExpandedWrap disabled
      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 в дескрипторе устройства.
    Но с изменением питания мне вообще не понятно.
    Сообщение отредактировано: cppasm -

    Прикреплённый файлПрикреплённый файлOhci.rar (9.05 Кбайт, скачиваний: 199)
      ОН ЖИВОЙ!!! ЖИВОЙ!!! :) Ну заработало оно в общем :)
      Вот лог:
      ExpandedWrap disabled
        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 работает

      Блин, у меня кто-то книжку упер, я пока не могу посмотреть, но по моему там есть какая-то разница в подтягивающих резисторах при подключении... когда я ее найду, смогу точнее расказать.

      А насчет изменения значений в дескрипторе не знаю, никогда не эксперементировал :)
        Новости меня радуют :)
        Ты один пост пропустил - попробуй ещё прогу оттуда.
        Тоже должна работать - мне просто интересно, будет или нет.
        Короче выяснилась одна вещ: когда контроллер ресетиш, если у него уже HCFS=UsbReset, он ничего не делает.
        Я с этим парился - после SMM такая фигня была.
        Надо выйти в UsbSuspend на 10мс, а потом в UsbReset.
        Если та прога заработает - это будет тому подтверждением.
        И ещё - если есть возможность попробуй пожалуйста рабочий вариант с каким нибудь LowSpeed устройством.
        Огромное спасибо за помощ. :D
        Насчёт изменения дескрипторов - я сегодня сам попробую, результат сообщу.
        А насчёт резисторов - есть такое дело.
        Но USB 1.1 HC нифига ведь не знает про HiSpeed...
        Не очень в общем понятно.
        Сообщение отредактировано: cppasm -
          Та что я пропустил, не работает! Так что предположения не подтвердилось :)

          Цитата cppasm @
          Огромное спасибо за помощ.

          Пожалуйста! ;)

          Добавлено
          Цитата Gerret @
          А насчёт резисторов - есть такое дело.
          Но USB 1.1 HC нифига ведь не знает про HiSpeed...

          Там наверное есть отличие, которое не влияет на 1.1 но для 2.0 это Hi Speed

          Добавлено
          а с Low-speed не выходит... прога виснет!
            Не подтвердилась и ладно.
            Но там где я тестировал без выхода в UsbSuspend после SMM устройство не отвечало.
            А с суспендом всё ок было. Но я думаю с ресетом порта и без суспенда всё ок будет.
            На следующей неделе проверю.
            А у LowSpeed есть какая-то специфика, или отличается только установленным битом в ED.
            Сообщение отредактировано: cppasm -
              Я с Low-speed не работал, т.к. флешки Low-spped не бывают :) по этому ничего вразумительного тут сказать не могу :)
                Вот кое-то раскопал в спецификации:
                ExpandedWrap disabled
                  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 и с остальными запросами программа отлично работает.
                Так что вот такие дела.
                Сообщение отредактировано: cppasm -

                Прикреплённый файлПрикреплённый файлOhci.rar (9.08 Кбайт, скачиваний: 187)
                  Что-то у меня сомнения появились что прога заработает.
                  Если нет - попробуй эту.
                  Тут отличий никаких нет, но она на экран пишет номер дескриптора на котором произошла ошибка, код ошибки и кое-какие параметры кадра. Если повиснет - перепиши куда-нибудь пару строк и закинь сюда.
                  При зависании думаю в файле ничего не будет - выход по Ctrl-Alt-Del буфера на диск не сбрасывает...
                  А может и будет. В общем попробуй.
                  Неужели опять устройство не отвечает. <_< Хотя думаю врядли.
                  Насчёт SET DESCRIPTOR так ничего и не выяснил.
                  Одни устройства возвращают NoError, но при этом дескриптор не меняют вообще.
                  Другие возвращают STALL и при любом последующем обращении лочат всю систему.
                  Так что как изменились параметры флэшки я так и не понял.
                  При работе с UHCI я данные разбивал на блоки размером wMaxPacketSize для каждого TD.
                  Но меня всегда интересовало, зачем под размер выделено 11 бит если wMaxPacketSize<=64.
                  Сегодня попробовал указать больший размер - 1024.
                  Два устройства с wMaxPacketSize=64 схавали нормально и данные вернули правильные.
                  А устройство с wMaxPacketSize=8 залочилось вместе с системой.
                  Хотя я вот понять не могу как оно вообще работает.
                  Там ведь вроди кроме как в дескрипторе нигде размер блока не указывается.
                  А некоторые устройства всё равно работают.
                  Как? Не понятно...
                  Сообщение отредактировано: cppasm -

                  Прикреплённый файлПрикреплённый файлOhci.rar (9.35 Кбайт, скачиваний: 197)
                    Слушай, я сейчас перешел на освоение UHC и машину с OHC разобрал (все сразу на стол не вмещается :) )... так, что потестить проги теперь не смогу :unsure:

                    Цитата cppasm @
                    А насчёт того, что ты в соседнем топике написал

                    Это я делал, когда еще только начинал освоение OHC, а потом не стал удалаять :)

                    Цитата cppasm @
                    Но меня всегда интересовало, зачем под размер выделено 11

                    Это, наверно, запас для USB 2.0 где размер блока может быть сильно больше 64 байт (для конечных точек, которые не SETUP). А дескрипторы передачи, ведь, для всех одинаковые.

                    Как я понял, ты пишешь не просто драйвер для флешек под ДОС, а универсальное что-то, да?

                    Цитата cppasm @
                    При работе с UHCI...

                    С этим контроллером вообще надо нежно обращатся :) он, в отличае от OHC, совсем не умный... Он требует от ОС драйвера, что бы он сам контролировал весь процесс передачи.
                      Жаль конечно что потестировать не сможешь, я тогда во вторник-среду сам проверю.
                      Цитата Gerret @
                      Как я понял, ты пишешь не просто драйвер для флешек под ДОС, а универсальное что-то, да?

                      Да, я хочу написать USB стек под DOS. Возможно и с поддержкой EHCI.
                      Это если меня лень не замучает :)
                      Просто если писать драйвер отдельного устройства то возникают некоторые проблеммы.
                      Например нельзя одновременно использовать драйвер флэшки и USB мыши - они конфликтовать будут.
                      Цитата Gerret @
                      Слушай, я сейчас перешел на освоение UHC

                      Я с ним уже разобрался - раньше это было.
                      Будут вопросы - спрашивай. И потестить что-нибудь могу...
                      PS: насчёт 11 бит я уже разобрался.
                      В USB 1.1 это только для Isohronous посылок - максимум 1024 байта.
                      Но с ними я вообще не работал, ну нет у меня таких устройств ;)
                      А в USB 2.0 (но это уже и другой контроллер) максимальные размеры пакетов: Interrupt - 1024, Bulk - 512.
                      Сообщение отредактировано: cppasm -
                        Цитата cppasm @
                        Да, я хочу написать USB стек под ДОС. Возможно и с поддержкой EHCI.
                        Это если меня лень не замучает

                        Это грамотный подход :) А это ты для себя или по работе? Мне, просто, это по работе надо (флешки под ДОС'ом), по этому я сильно не заморачиваюсь :) Самое главное - видимый, для работодателя, конечный результат! :D

                        Цитата cppasm @
                        Я с ним уже разобрался - раньше это было.
                        Будут вопросы - спрашивай. И потестить что-нибудь могу...

                        А как ты в UHC определял окнчание транзакции? Я правда еще транзакции не делал, но спрашиваю заранее.


                        Еще вопрос про OHC, ты с прерываниями не разобрался? Мне, в драйвере, они без надобности оказались, но на будущее хотелось бы узнать, как, все-таки, они работают :ph34r:
                        Потому, как стек мне скорее всего тоже придется писать :) там народу еще хочется USB принтер и сканер под ДОС запустить...
                        А с прерваниями он получится гораздо изящнее :)
                          Цитата Gerret @
                          А это ты для себя или по работе?

                          Да нет, это я для себя пишу. Хобби так сказать. :)
                          В OHCI с прерываниями не разбирался - это ещё предстоит.
                          В UHCI конец транзакции определяю так (почти также как и в OHCI):
                          - Пока в QH не установлен бит T - цикл.
                          - В цикле смотрю TD
                          -- Если TD активен - переход в начало цикла.
                          -- Если не активен
                          --- Если есть ошибка - выход
                          --- Если нет - переход на следующий TD
                          Короче в цикле просматриваю список TD на наличие ошибки.
                          И ещё - когда будешь писать - TD можно делать размером 16б а не 32.
                          Всё равно пользовательские эти данные использовать скорее всего не будешь.
                          А производительность возрастает и выравнивание тоже соблюдается.
                          Прерывания там точно не сильно помогут.
                          Насчёт принтера и сканера под DOS.
                          С принтером проблем не будет - особенно если печатать только текст.
                          А вот со сканером... На них стандарта нет.
                          Я со своим разобрался (Mustek BearPaw 2448TA Plus). Делается так.
                          Есть шпион USB - пишет все транзакции в лог.
                          Т.е. ставишь дрова под Win и в шпионе выбираешь нужное устройство.
                          Ну и потом смотришь какие там команды + ещё SANE есть (дрова под Linux), кое-что там посмотрел.
                          Только муторно это всё и очень не универсально.
                          PS: а где это ещё DOS используют - просто интересно.
                          Сообщение отредактировано: cppasm -
                            Цитата cppasm @
                            В UHCI конец транзакции определяю так

                            Понятно. Спасибо :) Я в общих чертах так себе это и представлял.

                            Цитата cppasm @
                            Прерывания там точно не сильно помогут.

                            Меня прерывания, в основном, интересуют на подключение/отключение уст-ва, но в UHC такого, по ходу, не предусмотрено...

                            Цитата cppasm @
                            И ещё - когда будешь писать - TD можно делать размером 16б а не 32.

                            Точно, в документации на UHCI так и написано. Не понятно, почему господин Кулаков решил, что там 32б... А на QH там вообще 8 байт всего надо :)

                            Цитата cppasm @
                            Есть шпион USB - пишет все транзакции в лог.

                            Ага, знаю! (USB Sniffer) У меня такой тоже есть :) очень помогает :)

                            Цитата cppasm @
                            а где это ещё DOS используют - просто интересно.

                            Да вот нашлись тут какие-то... Нафига им это надо - без понятия :)
                            Шеф мой как-то ко мне подошел и говорит: "Можешь написать драйвер, чтобы USB флешки под ДОСом читались?".
                            Я сказал, что могу... и вот теперь занимаюсь этим гемороем :)
                            Для кого все это, я не интересовался :)

                            Ладно, если про прерывания, что-нибудь выяснишь, сообщи плиз, а то у меня так и не получилось с ними работать :wall:
                              Привет мужики! А тема, то благостно растет и Ваши успехи радуют! Сожалею, что у меня лично USB сейчас совсем заняться не получается даже теоретически, хотя PCI доступ уже прозрачен и поюзан. Правда железяки у меня другие. А как в будующем исходники рабочие да путящие народу будут ли хоть где то понюхать? :) Сами знаете каково оно первые шаги одному топать. Решил спросить вот, хотя конечно все равно проблем и нюансов на такой ниве творчества выше крыши всегда, но все же?
                              Посмотрел вот мельком на USB Sniffer исходники то есть, если это тот самый:
                              http://sourceforge.net/projects/usbsnoop/
                              но там похоже мутняк еще тот + виртуальное устройство...
                              А вот еще надыбал один в плане мониторинга:
                              http://www.hhdsoftware.com/usbmon.html
                              никто не пробовал как с ним работается, хотя бы сравнительно?
                                Ух ты!!! usbmon это просто супер :) афигительная прога! Очень красивый лог делает!

                                VaStaNi большое спасибо! Единственное, она при установке мне перекоробила дрова от хостов :blink: , пришлось update driver сделать для каждого и все заработало!
                                cppasm очень советую попробовать!

                                Цитата VaStaNi @
                                ...как с ним работается, хотя бы сравнительно?

                                Мне очень понравилось! Горздо прикольнее и удобнее сделано чем usbsnoop!

                                Цитата VaStaNi @
                                ...USB Sniffer исходники...

                                А там ничего особенно интересного не найдешь (применительно к ДОСу ИМХО). Эта прога работает с виндовыми дровами, а не с хостами...
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (14) « Первая ... 4 5 [6] 7 8 ...  13 14 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0728 ]   [ 14 queries used ]   [ Generated: 18.07.25, 01:13 GMT ]