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

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

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

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (51) « Первая ... 40 41 [42] 43 44 ...  50 51  ( Перейти к последнему сообщению )  
> Желающим USB под ДОС , Welcome!!!
    Проблема сделать?

    Добавлено
    Цитата StasNewOs @
    из пустой QH дамп какой должен быть

    Такой же как и для всех других. И да, желательно один перед добавлением QH в очередь, другой после.
    Сообщение отредактировано: shm -
      попробую сделать, вообще думал методом тыка поотлаживать.
        Ты так говоришь, как будто я тебя прошу что-то мегасложное сделать. Запись нескольких байт на рабочий (вроде как ATA то у тебя работает) носитель реализуется за минуты. Ну на худой конец на экран выводи и снимок приаттачишь сюда.
        Цитата StasNewOs @
        вообще думал методом тыка поотлаживать

        Есть риск таким методом всю жизнь "отлаживать". Как показывает практика, "отлаженный" таким методом код редко работает на другом железе, даже если оно следует той же спецификации.
        Сообщение отредактировано: shm -
          Цитата
          код редко работает на другом железе

          А почаму собственно, я же спрашиваю общий алгоритм для всех, а не для своего.
          Нужен общий, достаточный и необходимый алгоритм добавления QH в кольцо.
          При старте номерация, запросы дескрипторов и конфигурации в первом QH с выключенным Н и включенным Т.
          После чего добавляется ещё одна QH и Т убирается и что происходит с Н, она всегда стоит на первом, или начинает указывать на текущий.
          Дальше нумеруется следующее устройство в первом QH и добавляется ещё QH другой конечной точки, а после установки всех устройств они будут работать в своих QH.
          Опять же как будет опрос кольца и что происходит после прохождения всего цикла? Если знаешь то расскажи.
          В спеках, в алгоритме удаления QH из кольца была проверка этого бита.
          Сообщение отредактировано: StasNewOs -
            Предлагаю просто перевести на русский язык п.4.8.3 из спецификации EHCI (v 1.0) и заодно разобраться, что означают слова reclaim и reclamation в данном контексте.
            Скрытый текст
            The Enhanced Host Controller Interface uses two bits to detect when the asynchronous schedule is empty. The queue head data structure (see Figure 3-7) defines an H-bit in the queue head, which allows software to mark a queue head as being the head of the reclaim list. The Enhanced Host Controller Interface also keeps a 1-bit flag in the USBSTS register (Reclamation) that is set to a zero when the Enhanced Interface Host Controller observes a queue head with the H-bit set to a one. The reclamation flag in the status register is set to one when any USB transaction from the asynchronous schedule is executed (or whenever the asynchronous schedule starts, see Section 4.8.5).
            If the Enhanced Host Controller Interface ever encounters an H-bit of one and a Reclamation bit of zero, the EHCI controller simply stops traversal of the asynchronous schedule.
            Смотрим словарь - из многих значений слов reclaim и reclamation нам наиболее подходит значение "повторное использование", то есть повторный проход по очереди QH. Получается так:
            Скрытый текст
            EHCI использует два бита для определения факта, когда асинхронное расписание пусто. Структура QH определяет бит H в заголовке очереди, который позволяет софту отметить данный QH как начало списка повторного выполнения. EHCI также имеет 1-битный флажок в регистре USBSTS (Reclamation), который сбрасывается в 0, когда EHC обслуживает QH с установленным битом H. Этот флажок Reclamation устанавливается в 1, когда выполняется любая операция из асинхронного расписания (или когда начинается обработка асинхронного расписания, см. раздел 4.8.5). Если EHCI встречает бит H, установленный в 1, когда флажок Reclamation (в USBSTS) сброшен в 0, то он просто останавливает обработку асинхронного расписания.
            Как это все понимать? Вообще говоря, QH можно замыкать в кольцо или не замыкать - во втором случае последний QH в списке имеет установленный бит T, и контроллер, дойдя до него, закончит обработку очереди QH, а бит H тут вообще ни при чем.
            Допустим, QH замкнуты в кольцо. Бит H можно не устанавливать вообще - тогда по логике контроллер должен просто тупо ходить по циклу. Если же в одном из QH установить бит H, то контроллер будет считать его началом списка повторного обхода. Обойдя весь список и наткнувшись снова на бит H, контроллер прекратит обработку этой очереди.
            Я сам такую процедуру не делал никогда - я уже говорил, что ограничивался вообще одним QH на все. Попробуй, сделай, потом расскажешь.
              Я начинаю понимать, когда я создаю кольцо, то контроллер проходит по нему и останавливается, а чтобы пустить его по кольцу нужно либо ещё что то сделать, либо настроить на прохождение кольца без остановок.
              Получается нам не нужно использовать ни Н ни Т биты, т.е. у нас ни будет ни первого ни последнего.
              Кстати используя одну QH я нумеровл, и читал дескрипторы и конфигурации, даже инквири тесты, я запускал его с несколькими qtd а потом выключал дождавшись изменения статуса qtdшек.
              Кстати эта одна QH работает и с битом Т и без него, ис H и без неё.
              Даже когда я включил контроллер на постоянку у меня эта одна QH тоже работала нормально и qtdшки обрабатываются постоянно, я их активировал начиная с последней, после подготовки всего QH c qtdшками.
              Но когда я добавляю вторую QH он походу начинает останавливаться, и здесь ещё USBSTS (Reclamation) подвязан, говорящий о том, что контроллер обрабатывает или нет очередь, он даже перестаёт её обрабатывать без него встретив H.
              А если не использовать Н, то он бит Reclamation не будет обнулять.

              Бит Reclamation нам не активировать, он RO, а вообще, что значит останавливается, он что бит Asynchronous Schedule Enable обнуляет, надо поставить включение перед каждой QH. Попробую все варианты, хотя вариант с постоянным проходом мне больше нравиться.

              Добавлено
              Дополнительное включение Asynchronous Schedule Enable и убрал Н и Т, но не помогло.

              Добавлено
              Дополнительные QH мне полюбому нужны, потому, что некоторые КТ вообще должны на пастоянку работать, как вебкамера, или мыш, а флешки не должны друг от друга зависеть.
              Сообщение отредактировано: StasNewOs -
                Кстати Asynchronous Schedule Park Capability включает какую то функцию
                Сообщение отредактировано: StasNewOs -
                  Вебкамера работает с изохронными транзакциями.
                  А мышь и клава - это устройства low-speed, с ними должны работать компаньоны. Или же их можно подцепить через хаб. Опрос их делается по КТ типа interrupt, в дескрипторах этих КТ указана периодичность их опроса (минимальное время между опросами). Если опрашивать чаще, то там могут быть непредсказуемые дела. Я, например, сталкивался с зависанием девайса.
                  И изохронные, и interrupt транзакции делаются через Periodic Schedule.

                  Про Park Mode - п. 4.10.3.2.
                  Сообщение отредактировано: zakharo -
                    Понятно
                    а про Reclamation вычитал, что при остановке его обнуляют, а после микрокадра опять начинается обход
                    Сообщение отредактировано: StasNewOs -
                      Времени печатать многобукв сейчас у меня нет, но судя по всему все уже и так разобрались. Чтобы не создавать лишего гимора с добавлением/удалением QH можно изначально создать однин головной (пустой) QH замкнутый на себя, а дальше уже по необходисмости подцеплять/отдцеплять остальные QH в кольцо. Головной QH можно не трогать вообще. По логике вещей подход не самый правильный, но простой.
                        Головной QH для настройки, номерации, а остальные для КТ, это я с самого начала и пытаюсь делать.
                        Но после добавления второй у меня перестаёт работать, вернусь к теме, когда будут отчёты о формироваться.
                        Сообщение отредактировано: StasNewOs -
                          Цитата StasNewOs @
                          Головной QH для настройки, номерации, а остальные для КТ, это я с самого начала и пытаюсь делать.

                          Нет, я не это имел ввиду. Читай внимательнее.
                          Цитата shm @
                          однин головной (пустой) QH

                          Цитата shm @
                          Головной QH можно не трогать вообще

                          По поводу всего остального жду твоих дампов, ну или продолжай отлаживаться "методом тыка" еще неопределенное время.
                            Т.е. настройку делать в своём, и его потом переделывать в КТи.
                            Зачем первый держать именно пустым?
                              Цитата StasNewOs @
                              Т.е. настройку делать в своём, и его потом переделывать в КТи.

                              Не понял смысл фразы. Нулевая конечная точка для контроллера точно такая же как и все остальные и работа с ней должна вестись точно таким же образом.
                              Цитата StasNewOs @
                              Зачем первый держать именно пустым?

                              Ну я предложил - так проще на мой взгляд, можешь придумать свою модель. В случае чего не придется изымать головной QH, к тому же м.б ситуация, когда у контроллеру вообще не подключены HS девайсы.
                                Ну, вот и на моей улице праздник наступил.. Наши идеологи на фирме наконец-то сподобились - решили перепереть всю систему под 32-битный расширитель DOS32A. А там линейная память 4 гига и физ. адреса соответствуют линейным. Вот уж счастье для темы USB! Все регистры контроллера EHCI вижу, просто как массив uint32_t. Теперь попрограммируем.. Можно все по уму сделать - с очередями и пр.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (51) « Первая ... 40 41 [42] 43 44 ...  50 51


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0709 ]   [ 15 queries used ]   [ Generated: 20.07.25, 04:45 GMT ]