На главную Наши проекты:
Журнал   ·   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) « Первая ... 6 7 [8] 9 10 ...  13 14 все  ( Перейти к последнему сообщению )  
> OHCI USB
    Слушай, у меня тут страннось образовалась... с твоей прогой от "от 13.10.05 все работает отлично, а с прогой от 14.10.05 Kingstone опять виснет на Detecting Devices... в чем у них разница???
    Я, просто, нарвался на странный глюк: мой драйвер со всеми флешками работает нормально, а с Kingstone не хочет!
    При SET_ADDRESS говорит, что устройство не отвечает :'( никак не могу понять, в чем дело :wall:
    Ресет порта делаю точно, как ты писал! Вот он на асме:
    ExpandedWrap disabled
      ;в AX - номер порта для ресета
      UHC_PortReset         PROC
           push   EAX
           push   EDX
          
           mov    USB_TransErr, 0
           mov    DX, UHC_Address
           add    DX, UHC_Port0Reg
           shl    AX, 1            ;AX = AX*2 - смещение на регистр порта
           add    DX, AX
           mov    AX, 200h         ;устанавливаем ресет
           out    DX, AX
           mov    AX, 20
           call   PTDelay          ;за PTDelay спасибо Jin X'у
           mov    AX, 0
           out    DX, AX           ;снимаем ресет
           mov    CX, 50           ;ждем установки флага подключенного устройства
         wait_res_end:            
           mov    AX, 1
           call   PTDelay          ;1ms delay
           in     AX, DX
           and    AX, 1
           cmp    AX, 1            ;флаг установился, выходми
           je     res_done
           loop   wait_res_end
           jmp    res_err
         res_done:
           mov    AX, 0Eh          ;включаем порт
           out    DX, AX           ;ждем 20ms для уверенности, что порт включился
           mov    AX, 20
           call   PTDelay
           in     AX, DX
           and    AX, 4        
           cmp    AX, 0            ;точно включился?
           je     res_err          ;нет - выходим с ошибкой
           jmp    res_finish       ;да - выходим без ошибки
         res_err:
           mov    USB_TransErr, 1
         res_finish:
           pop    EDX
           pop    EAX
           ret
      UHC_PortReset         ENDP

    может быть я совсем уже глючу...?
    Сообщение отредактировано: Gerret -
      А разницы там никакой...
      Только во второй дескриптор 0 строки не получается.
      Ресет у тебя вроди нормальный...
      Странно это всё как-то.
      Я сейчас буду разбираться - новый вариант часа через полтора думаю выложу.
      Вот покопался немного...
      В архиве три варианта. Если какой вдруг заработает, проверь на всех устройствах.
      Если обнаружится рабочий - потом сообщу в чём косяк был.
      Ну а если нет - буду искать дальше.
      Да, по поводу твоего вопроса - если дело всё-же дойдёт до стека, то скорее всего буду делать резидентом.
      Сообщение отредактировано: cppasm -

      Прикреплённый файлПрикреплённый файлuhci.rar (9.06 Кбайт, скачиваний: 180)
        Мдя..... все 3 варианта работают на всех флешках! Что бы это значило?
          Ну это мне вообще не понятно...
          Я ради прикола в ohci_v1 оставил всё как было - только откомпилировал заново.
          Видать прикол получился... :blink:
          В остальных двух поувеличивал время ожидания кругом с 20мс до 50мс.
          Скорее всего проблеммы у тебя с транзакцией.
          Я создаю транзакцию с0 счётчиком ошибок = 3, и выхожу из цикла ожидания либо если всё Ок, либо при STALL.
          Плюс при конфигурировании устройства все транзакции повторяю по три раза.
          Т.е. например делаю SET_ADDRESS, если ошибка - попробовать ещё раз. И так три раза.
          Может устройство тормозит немного...
            cppasm спасай!!!
            Я уже запарился с этим контроллером (на сколько все было проще с OHC)!
            Сейчас у меня 2-е глобальные проблемы:
            1. SETUP посылки для Kingston'а не проходят (устройство не отвечает). SET_ADDRESS пробовал делать 10(!) раз подряд с проверкой на ошибки... нифига! Каждый раз устройство не отвечает.

            2. Работаем с той флешкой от которой получили все нужные дескрипторы. Надо на Bulk OUT точку послать структуру CBW (Bulk Only Transport) с командой Inquie (опишу дальше). За тем с Bulk IN точки первым TD принимаем 36 байт информации, а следующим TD принимаем структуру CSW (см. Bulk Only Transport). Так у меня работало при OHC контроллере... В этом же получается какая-то фигня, в ответ на первый TD для Bulk IN точки мне приходит сразу CSW!!! Хотя должно быть 36 байт данных... :wall:

            Так вот, по поводу первой траблы, можешь поделится исходником функции, которая транзакцию осуществляет?

            А по поводу второго, если не влом, попробуй ты проделать выше описаные действия
            вот в hex'е вид CBW, который надо послать на Bulk OUT точку (длина CBW - 31 байт):
            ExpandedWrap disabled
              00000000: 55 53 42 43 01 00 00 00 24 00 00 00 80 00 06 12
              00000001: 01 00 00 24 00 00 00 00 00 00 00 00 00 00 00

            а ответный CSW выглядит вот так (его длина 13 байт):
            ExpandedWrap disabled
              00000000: 55 53 42 53 01 00 00 00 00 00 00 00 00


            Попробуй плиз, а то я совсем уже потерялся...
              Исходники мылом.
              Насчёт второй проблеммы - я такое делал, всё было Ок.
              Проверь код возврата после транзакции, может проясниться чего.
              По-моему OHCI NAK не так обрабатывает.
              Т.е. его в UHCI тоже ошибкой считать не надо - это достаточно легко достигается установкой счётчика ошибок в 3.
              При NAK он не уменьшается и транзакция остаётся активной, а при других ошибках уменьшается.
              Когда он падает в ноль - устанавливается STALL. Вот по нему и надо делать выход.
              Короче почитай исходники. Может что прояснится.
              Я может потом код чтения инфы с флэшки выложу.
              Просто после модификации дров я его не пробовал.
              А насчёт команд флэшки - можешь не описывать, у меня дока есть :)
                За исходник, еще раз спасибо!

                А с чтением флешки, я нашел в чем трабла, но пока не понял как ее исправить ;) После посылки CBW он почему-то пропускает первый входящий пакет! Я читал сектор с флешки, 512 байт - 8 дескрипторов на 64 байта + 9-й дескриптор - запрос CSW. Так он исполнял 7 дескрипторов и на 8-м получал CSW. Когда я посмотрел, что считалось, там не хватало первых 64 байтов...

                Цитата cppasm @
                А насчёт команд флэшки - можешь не описывать, у меня дока есть

                А у тебя какая дока? Случайно не описание SCSI 2 протокола? Если нет, то кинь ссылочку ПЛЗ.
                  Цитата Gerret @
                  Случайно не описание SCSI 2 протокола?

                  Случайно именно она :)
                  Насчёт пропуска пакета - ты делаешь ресет флэшки перед использованием?
                  Надо сделать общий ресет, а потом CLEAR_FEATURE для bulk in и bulk out.
                  И тригер данных при первом использовании должен быть 0, а потом меняется.
                  Причём сохраняется между транзакциями.
                  Т.е. если ты скажем считал n байт и последний дескриптор имел тригер 0, то при следующей транзакции он должен быть 1.
                    Цитата cppasm @
                    Причём сохраняется между транзакциями.
                    Т.е. если ты скажем считал n байт и последний дескриптор имел тригер 0, то при следующей транзакции он должен быть 1.

                    АААА!!! Спасибо!!! :lol: А где сие написано? Первый раз слышу. :ph34r:
                    А то, даже в OHC драйвере мне приходилось перед каждой транзакцией делать CLEAR_FEATURE для обоих точек. Я еще думал, почему так получается?..
                      Цитата Gerret @
                      А где сие написано?

                      Ну в стандарте где гаписано я не скажу... :huh: потому что сам не знаю :lol:
                      Лично я это видел в книге Кулакова.
                      Ну и по личному опыту - просто так работает, а если не сохранять тригер то нет.
                      Но первоисточник в принципе книга Кулакова.
                        Тоесть, надо сохранять триггеры для каждой точки? Для Bulk IN свой и для Bulk OUT сыой, правилбно я понял?

                        В понедельник на работу приеду, попробую... если с этой штукой у меня заработает кардридер, с меня бутылка :D

                        Как у тебя дела с OHCI?
                          Цитата Gerret @
                          Тоесть, надо сохранять триггеры для каждой точки? Для Bulk IN свой и для Bulk OUT сыой, правилбно я понял?

                          Да, именно так.
                          Цитата Gerret @
                          Как у тебя дела с OHCI?

                          Да нормально всё... ;)
                          Я потестировал на USB мыши и на флэшке - всё работает.
                          Сейчас занимаюсь написанием bulk_read и bulk_write запросов.
                          Ну и с флэшкой хочу немного пообщаться. :P
                          На UHCI уже Inquiry попробовал - всё работает.
                          У меня только прога не универсальная пока - без автодетекта.
                          Ну типа параметры конечных точек руками забиваю в коде.
                          Но это пока.
                          А так всё Ок.
                          И такой ещё вопрос: ты не знаешь где можно найти документацию на SCSI transparent command set.
                          А то я команды беру из спецификации ATAPI и usbmass-ufi10 спецификации.
                          А хотелось бы документа по чистому SCSI так сказать :)
                          Сообщение отредактировано: cppasm -
                            SCSI могу выслать на мыло, но там pdf'ка на 6 мегов и она без закладок по темам :wacko: Работать с ней одно мучение... а вообще документы по любым сакзям можно найти тут: T10.

                            Если надо, я опять вернулся к OHCI (буду проверять сохранение траггера), так что могу потестить тебе, если что надо :)
                              :D :D :D
                              ОГРОМНОЕ ТЕБЕ СПАСИБО!!!
                              За подсказку про триггер!!!
                              Кардридер заработал :D
                                Цитата Gerret @
                                Кардридер заработал

                                Прикольно :P
                                Цитата Gerret @
                                SCSI могу выслать на мыло, но там pdf'ка на 6 мегов и она без закладок по темам

                                Та не, 6 метров не надо.
                                На T10 я был, документов там дофига, но мне ничего не понравилось :)
                                Прога в архиве.
                                Приду домой может чего ещё по флэшкам доделаю...
                                Прикреплённый файлПрикреплённый файлOHCI.rar (9.56 Кбайт, скачиваний: 215)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (14) « Первая ... 6 7 [8] 9 10 ...  13 14 все


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