
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.218] |
![]() |
|
Страницы: (51) « Первая ... 40 41 [42] 43 44 ... 50 51 ( Перейти к последнему сообщению ) |
Сообщ.
#616
,
|
|
|
Проблема сделать?
Добавлено Такой же как и для всех других. И да, желательно один перед добавлением QH в очередь, другой после. |
Сообщ.
#617
,
|
|
|
попробую сделать, вообще думал методом тыка поотлаживать.
|
Сообщ.
#618
,
|
|
|
Ты так говоришь, как будто я тебя прошу что-то мегасложное сделать. Запись нескольких байт на рабочий (вроде как ATA то у тебя работает) носитель реализуется за минуты. Ну на худой конец на экран выводи и снимок приаттачишь сюда.
Цитата StasNewOs @ вообще думал методом тыка поотлаживать Есть риск таким методом всю жизнь "отлаживать". Как показывает практика, "отлаженный" таким методом код редко работает на другом железе, даже если оно следует той же спецификации. |
Сообщ.
#619
,
|
|
|
Цитата код редко работает на другом железе А почаму собственно, я же спрашиваю общий алгоритм для всех, а не для своего. Нужен общий, достаточный и необходимый алгоритм добавления QH в кольцо. При старте номерация, запросы дескрипторов и конфигурации в первом QH с выключенным Н и включенным Т. После чего добавляется ещё одна QH и Т убирается и что происходит с Н, она всегда стоит на первом, или начинает указывать на текущий. Дальше нумеруется следующее устройство в первом QH и добавляется ещё QH другой конечной точки, а после установки всех устройств они будут работать в своих QH. Опять же как будет опрос кольца и что происходит после прохождения всего цикла? Если знаешь то расскажи. В спеках, в алгоритме удаления QH из кольца была проверка этого бита. |
Сообщ.
#620
,
|
|
|
Предлагаю просто перевести на русский язык п.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. Скрытый текст EHCI использует два бита для определения факта, когда асинхронное расписание пусто. Структура QH определяет бит H в заголовке очереди, который позволяет софту отметить данный QH как начало списка повторного выполнения. EHCI также имеет 1-битный флажок в регистре USBSTS (Reclamation), который сбрасывается в 0, когда EHC обслуживает QH с установленным битом H. Этот флажок Reclamation устанавливается в 1, когда выполняется любая операция из асинхронного расписания (или когда начинается обработка асинхронного расписания, см. раздел 4.8.5). Если EHCI встречает бит H, установленный в 1, когда флажок Reclamation (в USBSTS) сброшен в 0, то он просто останавливает обработку асинхронного расписания. Допустим, QH замкнуты в кольцо. Бит H можно не устанавливать вообще - тогда по логике контроллер должен просто тупо ходить по циклу. Если же в одном из QH установить бит H, то контроллер будет считать его началом списка повторного обхода. Обойдя весь список и наткнувшись снова на бит H, контроллер прекратит обработку этой очереди. Я сам такую процедуру не делал никогда - я уже говорил, что ограничивался вообще одним QH на все. Попробуй, сделай, потом расскажешь. |
Сообщ.
#621
,
|
|
|
Я начинаю понимать, когда я создаю кольцо, то контроллер проходит по нему и останавливается, а чтобы пустить его по кольцу нужно либо ещё что то сделать, либо настроить на прохождение кольца без остановок.
Получается нам не нужно использовать ни Н ни Т биты, т.е. у нас ни будет ни первого ни последнего. Кстати используя одну 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 мне полюбому нужны, потому, что некоторые КТ вообще должны на пастоянку работать, как вебкамера, или мыш, а флешки не должны друг от друга зависеть. |
Сообщ.
#622
,
|
|
|
Кстати Asynchronous Schedule Park Capability включает какую то функцию
|
Сообщ.
#623
,
|
|
|
Вебкамера работает с изохронными транзакциями.
А мышь и клава - это устройства low-speed, с ними должны работать компаньоны. Или же их можно подцепить через хаб. Опрос их делается по КТ типа interrupt, в дескрипторах этих КТ указана периодичность их опроса (минимальное время между опросами). Если опрашивать чаще, то там могут быть непредсказуемые дела. Я, например, сталкивался с зависанием девайса. И изохронные, и interrupt транзакции делаются через Periodic Schedule. Про Park Mode - п. 4.10.3.2. |
Сообщ.
#624
,
|
|
|
Понятно
а про Reclamation вычитал, что при остановке его обнуляют, а после микрокадра опять начинается обход |
Сообщ.
#625
,
|
|
|
Времени печатать многобукв сейчас у меня нет, но судя по всему все уже и так разобрались. Чтобы не создавать лишего гимора с добавлением/удалением QH можно изначально создать однин головной (пустой) QH замкнутый на себя, а дальше уже по необходисмости подцеплять/отдцеплять остальные QH в кольцо. Головной QH можно не трогать вообще. По логике вещей подход не самый правильный, но простой.
|
Сообщ.
#626
,
|
|
|
Головной QH для настройки, номерации, а остальные для КТ, это я с самого начала и пытаюсь делать.
Но после добавления второй у меня перестаёт работать, вернусь к теме, когда будут отчёты о формироваться. |
Сообщ.
#627
,
|
|
|
Цитата StasNewOs @ Головной QH для настройки, номерации, а остальные для КТ, это я с самого начала и пытаюсь делать. Нет, я не это имел ввиду. Читай внимательнее. Цитата shm @ однин головной (пустой) QH Цитата shm @ Головной QH можно не трогать вообще По поводу всего остального жду твоих дампов, ну или продолжай отлаживаться "методом тыка" еще неопределенное время. |
Сообщ.
#628
,
|
|
|
Т.е. настройку делать в своём, и его потом переделывать в КТи.
Зачем первый держать именно пустым? |
Сообщ.
#629
,
|
|
|
Цитата StasNewOs @ Т.е. настройку делать в своём, и его потом переделывать в КТи. Не понял смысл фразы. Нулевая конечная точка для контроллера точно такая же как и все остальные и работа с ней должна вестись точно таким же образом. Цитата StasNewOs @ Зачем первый держать именно пустым? Ну я предложил - так проще на мой взгляд, можешь придумать свою модель. В случае чего не придется изымать головной QH, к тому же м.б ситуация, когда у контроллеру вообще не подключены HS девайсы. |
Сообщ.
#630
,
|
|
|
Ну, вот и на моей улице праздник наступил.. Наши идеологи на фирме наконец-то сподобились - решили перепереть всю систему под 32-битный расширитель DOS32A. А там линейная память 4 гига и физ. адреса соответствуют линейным. Вот уж счастье для темы USB! Все регистры контроллера EHCI вижу, просто как массив uint32_t. Теперь попрограммируем.. Можно все по уму сделать - с очередями и пр.
|