На главную Наши проекты:
Журнал   ·   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) « Первая ... 5 6 [7] 8 9 ...  13 14 все  ( Перейти к последнему сообщению )  
> OHCI USB
    UsbMon сейчас попробую. Только по ходу он у меня наверное не пойдёт - я под Win98 вишу.
    Насчёт документации - да нет, там про 32 как раз написано.
    UHCI11d.pdf:
    ExpandedWrap disabled
      3.2.5 RESERVED FOR SOFTWARE (DWORDS [7:4])
      The last 4 DWords of the Transfer Descriptor are reserved for use by software.

    Но реально использовать можно и 16байт.
    А насчёт QH из восьми байт - не очень удобно.
    Она всё равно должна быть выровняна на границу 16 байт.
    Но в принципе можно и только 8 использовать.
    Сообщение отредактировано: cppasm -
      cppasm у меня возник вопрос на тему ресета порта UHC:
      как я понял из документации, надо сначала установить бит ресета, подождать какое-то время, а потом его снать, правильно?
      Так вот, если я это делаю, то у меня сбрасывается флаг подключения устройства...

      Как ты делал ресет порта контроллера?
      А вообще, можешь показать твою инициализацию контроллера? Как-то все в этом UHC странно после OHC :)
        Цитата Gerret @
        Как-то все в этом UHC странно после OHC

        Во-во, а мне наоборот странно было... ;)
        Там бит ресета лучше вообще не трогать.
        Как написано у Кулакова (я проверял - оно так и есть) бит ресета щас на большинстве контроллеров зарезервирован.
        Там ресет явно делать не надо - делаешь enable и толи автоматом ресет происходит толи чего, но устройство имеет адрес 0 чего и требовалось.
        Вот код:

        ExpandedWrap disabled
          void uhci_init(HC *hc,int hcn)
           {
            int i,k;
            dword FL=0x110000,QH=0x120000;
            for(i=0;i<hcn;i++)
             {
              // Disable legacy support.
              pci_write_cfg(&hc[i].pci,0xC0,0x02,0x2000);
              // Reset USB Controller.
              outportw(hc[i].base,0x04); delay(10);
              outportw(hc[i].base,0x00); delay(10);
              // Initialize Frame List.
              for(k=0;k<0x1000;k+=0x04) writed(FL+k,QH | Q);
              // Initialize Queue Head.
              writed(QH+0x00,T); writed(QH+0x04,T);
              // Set Frame List Address.
              outportd(hc[i].base+0x08,FL);
              FL+=0x1000; QH+=0x10;
              // Run UHCI USB Controller.
              outportw(hc[i].base,0x0081);
             }
           }

        А вот enable порта:
        ExpandedWrap disabled
          // Enable Port of USB Controller.
          outportw(hc[i].base+port,0x000E);


        Это точно работает.
        Я думал что это из-за ресета контроллера.
        Но потом просто вставил ожидание нажатия клавиши - всё равно работает.
        Т.е. проверял так:
        - делаю ресет HC
        - прога ждёт пока не нажму кнопку
        - я конекчу устройство
        - жму кнопку
        Устройство с HC 100% не ресетилось, но после port enable всё равно имеет адрес 0.
        Так что я думаю при горячем подключении тоже работать будет.
        В аттаче моя прога - попробуй.
        Если не заработает - буду разбираться.
        Но вроди должна работать.

        На счёт OHCI LowSpeed если тебе интересно - там просто задержки 20мс не хватало.
        Лучше ставить проверку - там у порта есть статус завершения ресета и определять по нему.
        А так всё Ок.
        Сообщение отредактировано: cppasm -

        Прикреплённый файлПрикреплённый файлuhci.rar (8.88 Кбайт, скачиваний: 195)
          Цитата cppasm @
          Вот код:

          Спасибо! Разобрался :)

          Да уж, с ресетом там муть какая-то...
          Прога твоя зараотала отлично!

          Цитата cppasm @
          там просто задержки 20мс не хватало

          задержки где?
            Задержки после ресета порта.
            Было что-то такое:
            ресет порта, задержка 20мс.
            А лучше:
            ресет порта, проверка по биту завершения ресета: если таймаут (50мс), то выход, если ресет завершён - выход; иначе цикл.
            Если не трудно кинь лог проги сюда.
              Вот смотри:
              ExpandedWrap disabled
                Detecting UHCI USB Controllers...
                1 UHCI USB Controller(s) detected
                 
                UHCI USB Controller 0:  VENDOR ID = 8086h, DEVICE ID = 7112h
                            PCI BUS = 0, PCI DEV = 7, PCI FN = 2
                            IO BASE = FFE0h, IRQ = 11
                 
                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               : 0EA0h
                 ProductID          : 2168h
                 Device version         : 2.0
                 iManufacturer          : 01h
                 iProduct               : 02h
                 iSerialNumber          : 00h
                 NumConfigurations:     : 01h
                 Supported LangID(s)        : 0409h
                 Manufacturer           : USB    
                 Product                : Flash Disk      
                ========================================================================
                CONFIGURATION DESCRIPTOR
                ========================================================================
                 NumInterfaces          : 01h
                 ConfigurationValue     : 01h
                 iConfiguration         : 00h
                 Remote Wakeup          : NO
                 Self Powered           : NO
                 MaxPower                    : 200 mA
                ========================================================================
                INTERFACE DESCRIPTOR
                ========================================================================
                 Interface Number           : 00h
                 Alternate Setting          : 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          : 02h
                 Interval               : 1 ms

              В ней есть какая-то странность: Этот лог от флешки Transcend 1GB, а когда я ее запускаю с флешкой Kingstone, она виснет на строке Detecting USB Devices намертво... Я попробовал ее запустить еще и с флешкой Seitec, так она повисла после вывода Device descriptor, но когда я ее вытащил из порта прога продолжила выполнятся... вот лог от Seitec:
              ExpandedWrap disabled
                Detecting UHCI USB Controllers...
                1 UHCI USB Controller(s) detected
                 
                UHCI USB Controller 0:  VENDOR ID = 8086h, DEVICE ID = 7112h
                            PCI BUS = 0, PCI DEV = 7, PCI FN = 2
                            IO BASE = FFE0h, IRQ = 11
                 
                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                    : 0457h
                 ProductID          : 0151h
                 Device version         : 1.0
                 iManufacturer          : 00h
                 iProduct                    : 00h
                 iSerialNumber          : 00h
                 NumConfigurations:     : 01h
                 Supported LangID(s)        : 21CDh 1173h 95E8h C7FBh 0506h 13A7h C6A1h FF06h 0197h 42E9h C708h 0506h 44A7h BAA2h 99C4h A2E8h E804h 3005h 1EC3h 1E8Eh A3E5h 3E80h 0373h 7400h 830Ah 763Eh FF03h 1274h 53E9h B8D8h 122Eh 05B2h 3E8Bh 038Bh 068Eh 038Dh 2FCDh E81Fh 031Bh 068Eh A3E5h A126h 030Fh A326h 0016h A126h 0311h A326h 000Ah A126h 0313h A326h 000Ch 8E06h F506h B4A3h CD49h 0721h 4CB4h A026h 036Bh 21CDh D233h 3689h A67Dh 98E8h 3C2Fh 74FFh 3D09h 0000h 0175h E840h 0015h 89C3h 7D36h E8A6h 2F83h FF3Ch 0874h 003Dh 7400h E803h 0001h C6C3h FB06h 0297h FDBAh C697h 0004h
                ========================================================================
                DEVICE DESCRIPTOR
                ========================================================================
                 USB version            : 2.0
                 Device Class           : 00h
                 Device SubClass                 : 00h
                 Device Protocol                 : 00h
                 Endpoint Zero Max Packet Size  : 40h
                 VendorID                    : 0457h
                 ProductID          : 0151h
                 Device version         : 1.0
                 iManufacturer          : 00h
                 iProduct                    : 00h
                 iSerialNumber          : 00h
                 NumConfigurations:     : 01h
                 Supported LangID(s)        : 2E89h 9F48h

              А с LG вообще непонятно, там лог вноль такой же как у Transcend'а...
              Так что вот!
                Gerret, я был не прав!
                Ресет порта делать надо - это крайне положительно сказывается на многих устройствах.
                У меня например с принтером и сканером нормально работало, а подключаю телефон - работает через раз.
                Т.е. или нормально работает, или намертво вешает всю систему.
                Сделал ресет порта и всё Ок.
                Вот код:
                ExpandedWrap disabled
                   for(port=0x10;port<0x14;port+=0x02)    // Цикл по портам
                    if(inportw(hc[i].base+port) & 1)  // Если устройство подключено
                     {
                      // Reset Port of USB Controller.
                      outportw(hc[i].base+port,0x200); delay(20);
                      outportw(hc[i].base+port,0x000);
                      // Wait for connection bit set.
                      // Ждём пока устройство завершит reset и установит бит своего подключения.
                      // Если за 20мс устройство не появилось - наверное его отключили.
                      for(k=0;k<20;k++)
                       { if(inportw(hc[i].base+port) & 0x01) break; delay(1); }
                      // Enable Port of USB Controller.
                      outportw(hc[i].base+port,0x000E);
                      // Wait for enable completition.
                      // Ждём пока действительно enable.
                      // Возможна задержка срабатывания!!!
                      for(k=0;k<50;k++)
                       { if(inportw(hc[i].base+port) & 0x04) break; delay(1); }
                      // Дальше инициализация устройства: SET_ADDRESS и т.д. ...
                     }

                Прога в архиве - поробуй.
                Ну и логи в студию :)

                Единственное - может ещё дескрипторы строк как-то не так получаются...
                Я для получения язык указываю английский, а вдруг он не поддерживается.
                Хотя очень мало вероятно.
                Прикреплённый файлПрикреплённый файлuhci.rar (8.99 Кбайт, скачиваний: 198)
                  Да уж, ресет порта помог, проблемы с разными флешками ушли.
                  Только у Seitec осталось как раньше... У этой флешки нет дескрипторов строк. Если индекс строки = 0, это значит его нет вообще и запрашивать его нельзя.

                  Я архив закину с логами для разных устройств (что под рукой были).
                  Прикреплённый файлПрикреплённый файлuhci_log.zip (3.14 Кбайт, скачиваний: 182)
                    Проблем меньше - это хорошо :)
                    Насчёт индекса строки - я это проверяю.
                    Здаётся мне она виснет при запросе строки с индексом 0 - т.е. строки с кодами поддерживаемых устройством языков.
                    А как проверить оно поддерживает её или нет - не знаю, вроди по стандарту все должны поддерживать.
                    В следующей версии это убиру наверное и отладочных записей больше добавлю, чтоб видно было точнее где виснет.
                    PS: как я понял виснет не наглухо? Может оно NAK возвращает всё время, а он за ошибку не считается. Таймаута у меня там нет.
                    Сообщение отредактировано: cppasm -
                      Я понял! ;)
                      Если у устройства не определена ни одна строка, то может быть не определена и строка с кодами поддерживаемых языков.
                      Вот из спецификации USB 1.1:
                      ExpandedWrap disabled
                        A USB device may omit all string descriptors.
                        USB devices that omit all string descriptors shall not return an array of LANGID codes.

                      Она просто не нужна. А я в любом случае её получаю.
                      Хотя Мышь например абсолютно нормально вернула пустой дескриптор - типа никаких я языков не поддерживаю.
                      Но чтение LanguageID я убрал - я всё-равно его не использую, а так стабильнее.
                      И ещё такой вопрос - ты случайно лог для LG не после Transcend создавал?
                      Смущает меня что они одинаковые... У этих флэшек хоть объём одинаковый?
                      В принципе вполне возможно - LG на чипах Transcend'a сделала флэшку и потому там VID и PID Transcend'a.
                      Вроди и глюка быть не должно: перед получением дескриптора память очищается - старый дескриптор там остаться не мог.
                      Но для чистоты эксперимента попробуй создать лог для LG не подключая до этого Transcend.
                      Прога как всегда прикреплена.
                      Вроди всё теперь исправил.
                      А у тебя как дела с разработкой?
                      Ну просто ты мне очень помог - ОГРОМНОЕ СПАСИБО.
                      У меня под рукой столько устройств нет.
                      Сообщение отредактировано: cppasm -

                      Прикреплённый файлПрикреплённый файлuhci.rar (8.91 Кбайт, скачиваний: 179)
                        Я, когда дескрепторы строк получал, проверял значение индекса и если он - 0, то не запрашивал дескриптор.

                        Цитата cppasm @
                        Смущает меня что они одинаковые... У этих флэшек хоть объём одинаковый?

                        Нет размер у них разный, у LG - 512, а у Transcend - 1GB. У них есть одна общая особенность, после каких-то моих экспериментов, они обе стали защащенными от записи... при том, что у LG вообще нет ползунка защиты, а у Transcend'а он стоит в положении "открыто". Снять эту защиты пока не удалось...
                        Отсюда можно сделать вывод, что контроллеры у них одинаковые.



                        Цитата cppasm @
                        А у тебя как дела с разработкой?

                        В общем-то не плохо :) драйвер для OHC уже работает, правда только для одного порта перого контроллера, но принцип получился как с CD-ROM'ом под ДОС. При загрузке появляется дополнительный логический диск, потом втыкаешь флешку, открываешь этот диск и работаешь с ним как обычно :D
                        Сейчас занимаюсь повторением этого же, но для UHC.

                        Цитата cppasm @
                        У меня под рукой столько устройств нет.

                        Да уж, я убедил своего начальника, что нам надо их по больше после небольшой лажи с заказчиком... Я сначала сделал демонстрационную прогу, что бы показать заказчику, что мы это можем, и отлаживал ее только на одной флешке :) приехали заказчики, посмотреть, и говорят: "ух ты, прикольно, а воткни-ка вот эту...". Я воткнул и прога повисла :) вместе с системой (намертво). Ну я так и сказал, что поскольку была только одна флешка, с ней и работаем... На следующий день шеф дал денег, чтобы я закупил по больше разных флешек :D

                        В понедельник на работу приеду и потестирую твою прогу :)
                          Цитата Gerret @
                          Я, когда дескрепторы строк получал, проверял значение индекса и если он - 0, то не запрашивал дескриптор

                          Я тоже так делаю. Суть проблеммы была не в этом.
                          Есть просто дескриптор с индексом 0.
                          Он содержит коды поддерживаемых языков.
                          В других дескрипторах указатель на него не фигурирует.
                          И вот этот дескриптор я получал.
                          А как позже оказалось (см. цитату из спецификации выше) если у устройства нет дескрипторов строк - может не быть и дескриптора с кодами языков.
                          А я этого не учитывал и всё равно его получал. Отсюда и проблеммы...
                            Теперь все ОК!
                            Логи в архиве.
                            Прикреплённый файлПрикреплённый файлuhci_log.zip (1.33 Кбайт, скачиваний: 174)
                              В который раз ОГРОМНОЕ спасибо за помощ. :)
                              Теперь вроди проблеммы закончились.
                              Кстати - ты не пробовал флэшки разблокировать родной прогой Transcend'a?
                              Я не уверен что поможет, но а вдруг.
                              У меня с флэшкой на CD вместе с дровами шла.
                              Если надо - могу выслать.
                              Называется RecoverDisk.
                              Но она при этом флэшку форматирует - так что данным скорее всего будет конец.
                                Цитата cppasm @
                                В который раз ОГРОМНОЕ спасибо за помощ.

                                Пожалуйста :)

                                Пробовал, не помогает :( Она пишет "Can't recover disk"... Весь прикол в том, что эти флешки читаются... но пе пишутся и не форматируются.

                                К стати, а в каком виде ты хочешь потом сделать свой USB стек? (драйвер, резидент, ???)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (14) « Первая ... 5 6 [7] 8 9 ...  13 14 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,2572 ]   [ 14 queries used ]   [ Generated: 8.07.25, 08:54 GMT ]