На главную Наши проекты:
Журнал   ·   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) « Первая ... 9 10 [11] 12 13 ... Последняя » все  ( Перейти к последнему сообщению )  
> OHCI USB
    Бинарников сегодня больше не будет...
    Зато будет две просьбы :D
    Но всё по порядку.
    Я тут пару экспериментов поставил :)
    Дела такие: если устройству послать неправильный запрос
    (на несуществующую конечную точку или просто запрос не поддерживаемый устройством) -
    оно лочится, причём намертво. Не помагает даже перезагрузка машины.
    Помогает только переподключить устройство.
    Это халтится нулевая конечная точка.
    А Clear Halt Feature для Endpoint0 сделать по понятным причинам нельзя - запрос
    через эту же конечную точку и пересылается.
    Так что скорее всего здесь я сделать ничего не смогу - SMM лочит
    устройство и прийдётся его переподключать.
    А теперь просьбы.
    Ну первая - не мог бы ты привести дамп дескрипторов с которыми работает SMM
    и сам USB Request. Интересно взглянуть - может что прояснится.
    А вторая наверное даже слишком наглая, но всё же...
    Ты сказал, что на машине Windows нет, и я понимаю что ради эксперимента
    её инсталить - это ну его нафиг :)
    Но в природе существует Live CD WindowsXP (~200Mb).
    Если у тебя есть возможность его слить, то можно было бы загрузиться с CD.
    Просто если Windows с мышью работать не сможет, то я окончательно успокоюсь :)
    Хотя я понимаю что это уже полный наглёж...
      Видать просьба действительно наглая получилась :lol:
        да нет, дело не в просьбе :D
        Просто я в отпуск ушел, а комп тот на работе :)
        так что все это может случится только через 2 недели еще :)
          Я вернулся :)

          С Live CD WinXP не получилось :( не нашел я его...

          А вот дамп, который удалось вытянуть из SMM

          Дескриптор конечной точки
          ExpandedWrap disabled
            000EC220: 00 60 40 50 00 00 00 00 C1 C4 0E 00 00 00 00 00

          Дескрипторы передачи
          ExpandedWrap disabled
            000EC4A0: 00 00 E4 5E B8 C4 0E 00 00 00 00 00 BF C4 0E 00
            000EC4C0: 00 00 14 F3 FB CA 0E 00 E0 C4 0E 00 02 CB 0E 00

          USB Request
          ExpandedWrap disabled
            000EC4B8: 80 06 00 01 00 00 08 00

          Вот правда не удалось узнать, сколько всего запросов он произвел...
          но он, тоже не смог достучатся до мыши :)
            С возвращением :)
            Хотя это может и грустно, как-никак отпуск закончился...
            Спасибо за логи, буду смотреть.
            Но скорее всего дело не в проге.
            Насчёт WinXP - ну и ладно. :)
            А какая там вообще ОС стоит, или кроме DOS нет ничего?
            Ну в смысле можно и с Linux или FreeBSD попробовать. ;)
              Кроме доса, там больше ничего нет :)
                Я вроди глюк нашёл :)
                Вот лог от той мыши но на UHCI:
                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                    : 1.0
                   Device Class                   : 00h
                   Device SubClass                : 00h
                   Device Protocol                : 00h
                   Endpoint Zero Max Packet Size  : 08h
                   VendorID                       : 1241h
                   ProductID                      : 1122h
                   Device version                 : 1.0
                   iManufacturer                  : 00h
                   iProduct                       : 00h
                   iSerialNumber                  : 00h
                   NumConfigurations              : 01h
                  ========================================================================
                  CONFIGURATION DESCRIPTOR
                  ========================================================================
                   NumInterfaces                  : 01h
                   ConfigurationValue             : 01h
                   iConfiguration                 : 00h
                   Remote Wakeup                  : YES
                   Self Powered                   : NO
                   MaxPower                       : 100 mA
                  ========================================================================
                  INTERFACE DESCRIPTOR
                  ========================================================================
                   Interface Number               : 00h
                   Alternate Setting              : 00h
                   NumEndpoints                   : 01h
                   Interface Class                : 03h
                   Interface SubClass             : 01h
                   Interface Protocol             : 02h
                   iInterface                     : 00h
                  ========================================================================
                  ENDPOINT DESCRIPTOR
                  ========================================================================
                   EndpointAddress                : 81h (01h, IN)
                   Attributes                     : 03h (Interrupt pipe)
                   MaxPacketSize                  : 08h
                   Interval                       : 8 ms

                А вот разбор Endpoint Descriptor:
                ExpandedWrap disabled
                  Endpoint Descriptor
                   
                  0: 50406000
                  1: 00000000
                  2: 000EC4C1
                  3: 00000000
                   
                  RES = 0Ah=10    Ok: From Spec: Fields containing '--' are not interpreted or modified
                              by the Host Controller and are available for use by the
                              Host Controller Driver for any purpose.
                  MPS = 64    ERROR: This Mouse and all LS devices have MPS=8
                  F   = 0     OK: General TD
                  K   = 1     ??: Skip this ED
                  S   = 1     OK: Speed=LS
                  D   = 00    OK: Get direction from TD
                  EN  = 0     OK: Endpoint0
                  FA  = 0     OK: Device0

                Там размер пакета устанавливается равным 64 байта, а у мыши и у всех LS устройств размер пакета равен 8 байт.
                Вот мышь и лочится.
                WinXP я тоже найти не смог, может попозже на ftp выложу, а может просто ну его нафиг :)
                Если есть возможность слить, попробуй Linux: BLinux (~183Mb)
                Тоже LiveCD :)
                Сообщение отредактировано: cppasm -
                  Цитата Supervisor @
                  cppasm, рекомендую тебе купить ohci-usb контроллер. Стоит всего 200-300руб, зато тестить драйвер будешь на своей машине...

                  Облазил половину магазинов в городе, в и-нете смотрел, никак не получается найти PCI-USB с OHCI.
                  Уже пару плат расширения вернул в магазины, на них были UHCI компаньоны :(
                  Могли бы вы подсказать, как можно купить плату расширения с ohci ?

                  Добавлено
                  И ещё. Что значит: (обратная) совместимость с OHCI 1.0a ?
                  На той плате расширения, которую я покупал, было так написано. Но там был в кач-ве компаньона UHCI...покрайней мере, Windows именно так определила.
                    OHCI чаще в embedded-процессорах встречается. Например в Atmel-овских ARM-ах, вроде AT91SAM9260.
                    Для него существует linux и winCE.
                    http://atmel.com/dyn/products/product_card.asp?part_id=3870
                      Цитата whoIS @
                      Могли бы вы подсказать, как можно купить плату расширения с ohci ?

                      NEC ищи, он работает стабильно даже с относительно старыми материнками и у них OHCI компаньоны.
                      Будеш покупать смотри внимательно, есть контроллеры которые требуют PCI 2.2 и на старых материнках с PCI 2.1 не работают (в частности VIA, но у VIA UHCI компаньоны).
                      Цитата whoIS @
                      И ещё. Что значит: (обратная) совместимость с OHCI 1.0a ?

                      Значит что должен быть OHCI... Они может хотели написать что совместимость с USB1.1
                      Сообщение отредактировано: cppasm -
                        Купил плату расширения PCI USB Maxxtro с чипсетом Nec на 5 портов.
                        Так вот там OHCI контроллер в кач-ве компаньона к EHCI. (купил за 14 у.е.)

                        Плата расширения на VIA чипсете (10 у.е.) на 2 порта (на коробке от неё тоже было написано "совместимость с ohci 1.0a"), там в качестве компаньона к ehci стоит uhci.
                          Помогите :wall:
                          Что-то я запутался с этими регистрами %)
                          Сделал сброс контроллера, ресет порта, задетектил девайс (HcRhPortStatus = 0x110103)
                          Теперь пишу Control транзакцию, и уже голова кругом от количества этих регистров.

                          HCCA фактически нужен только для Interrupt Transaction?

                          Каша в голове :yes-sad: ... зачем так усложнять интерфейс было >:( :wacko:

                          Схему с ED0 -> TD(Set_Address) -> TD(acknowledge)
                          это я понял. всмысле расставил указатели, заполнил поля структур.
                          А как собственно запустить транзакцию?

                          Вообщем ... :wacko:
                            Здравствуйте :)

                            С Control транзакциями я разобрался. Но вот как я думал у меня не получилось...
                            Вообщем, у меня возник вопрос.

                            Схема таже. Устройство, имеет одну конечную точку с типом передачи по прерываниям.
                            Необходимо реализовать HID протокол.

                            Я пытался повторить схему с UHCI в лоб. Не получилось :(

                            Сейчас я пытаюсь делать следующее, но пока не получается получить ответа от устройства:

                            Посылаю на нулевую конечную точку запрос устройству, т.е. обрабатываю очередь TD присоединенных к HcEndpointDescriptor0 (ED_FullSpeed,FunctionAddress,ED_Direction_TD,EP_NUM_ZERO):
                            Set_Report (bufferRounding = 1, TD_SETUP,DelayInterrupt=111b,DataToggle = 10, buffersize = 8 bytes)
                            Report (bufferRounding = 1, TD_OUT,DelayInterrupt=111b,DataToggle = 11, buffersize = 64 bytes)
                            HandShake (bufferRounding = 1, TD_IN,DelayInterrupt=111b,DataToggle = 11, buffersize = 0 bytes)

                            вроде бы проходит без ошибок, сверяя ED0.HeadP = ED0.TailP.
                            Алгоритм правильный?

                            А как реализовать приём ответа с конечной точки? Я пробовал прикрепить такие дескрипторы передачи в EndpointDescr1:
                            GetResponse (bufferRounding = 1, TD_IN,DelayInterrupt=111b,DataToggle = 10, buffersize = 64 bytes)
                            HandShake (bufferRounding = 1, TD_OUT,DelayInterrupt=111b,DataToggle = 11, buffersize = 0 bytes)

                            А куда собственно записывать адрес этой конечной точки?
                            Сейчас пробую через HCCA. Для этого заполняю все 32 указателя на конечную точку 1.
                            Устанавливаю Master Interrupt Enable, WDH enable. Но почему-то WD в InterruptStatus не устанавливается.

                            Подскажите, плиз, алгоритм.
                              Неужели ни у кого нет никаких идей? :huh:
                              или я слишком глупые вопросы задаю? :blink:

                              вообщем ещё такую вещь заметил... при SetReport-e возникает ошибка 0xB. В спецификации на ohci reserved. И Status Interrupt Register устанавливается в 0.

                              Ещё один момент. Если я пишу еденицу в бит WritebackDoneHead в InterruptStatus перед приёмом данных с устройства - то бит WDH не устанавливается. Имею ввиду, что по окончании обработки очереди из HCCA устанавливается бит WDH, так?! Хотя при чтении регистра InterruptStatus бит не установлен.
                              Однако, если же я не делаю этого, то вроде бы как транзакция проходит и в HccaDoneHead содержится указатель на первый TD.
                              Вообщем я уже не совсем понимаю чего делать уж...
                              Попробую через Bulk Транзакции...но не уверен что получится...ведь конечная точка то по прерываниям... :wall:

                              Неужели ни у кого ни каких идей, соображений? :(
                              Сообщение отредактировано: whoIS -
                                У меня есть код работы с OHCI т.е виды транзакций: controll и bulk но они только для изхронного режима. В том числе запуск транзакции. Если нужно могу дать.

                                Добавлено
                                Вообще схема control-транзакции такая:
                                1. Подготовка дескиптора EP
                                2. Формирование дескриптора передачи для SETUP-пакета
                                3. Подготовка дескрипторов передачи данных и формирование очереди
                                4. Устанавливаем заголовок очереди в HCCONTROLHEAD_ED
                                5. Запус контроллера на обработку: 2 в OHCI_HCCOMMANDSTATUS
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0471 ]   [ 14 queries used ]   [ Generated: 18.05.24, 22:11 GMT ]