
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.218] |
![]() |
|
Страницы: (51) « Первая ... 38 39 [40] 41 42 ... 50 51 ( Перейти к последнему сообщению ) |
Сообщ.
#586
,
|
|
|
Цитата StasNewOs @ Ну не знаю, а если например при работающих QH добавить ещё QH, то куда её лучше ставить в перёд или назад Эмм.. где у кольцевого списка перед и зад? Можно ставить ставить куда угодно, главное придерживаться рекомендованного алгоритма вставки (insert), все есть в даташите. Если следовать алгоритмам, приведенным в даташите, то нишего не случится - инфа 100%. |
Сообщ.
#587
,
|
|
|
Ну да, он же кольцевой, т.е. у последнего есть адрес на первый, но в контроллере есть адрес на первый, т.е. первый всё таки есть.
|
Сообщ.
#588
,
|
|
|
Цитата StasNewOs @ но в контроллере есть адрес на первый В контроллере есть адрес текущего QH и не более. Есть т.н. головной QH с установленным битом H ( но это не позволяет его называть "передом, а до него все "задом" т.к. смысл несколько иной), ЕМНИП, то контроллер проходит по всей очереди и если не находит активного QH, то останавливает перед ним на фрейм (правда тут могу ошибаться т.к. нету даташита под рукой). |
Сообщ.
#589
,
|
|
|
Впринципи удалив QH из кольца остальные QH не меняются, но в этот момент нужно, чтобы контроллер стоял или не обязательно.
|
Сообщ.
#590
,
|
|
|
Цитата StasNewOs @ не обязательно. Не обязательно, загляни в даташит. |
Сообщ.
#591
,
|
|
|
Ну ты б тогда хоть параграф или главу подсказал бы где смотреть, если жалко такую инфу выдавать.
|
Сообщ.
#592
,
|
|
|
Раздел 4 я бы рекомендовал вдумчиво прочесть целиком. Главы 4.8 и 4.10 рекомендую прочесть особенно внимательно.
|
Сообщ.
#593
,
|
|
|
Понял спасибо.
|
Сообщ.
#594
,
|
|
|
Цитата shm @ Кстати, вот по поводу "автоматического" разбиения всех данных по размеру КТ передаваемых через TD, тут есть интересный нюанс с контролем триггера данных, я по привычке (UHCI) после каждого TD инвертировал его и, когда стал передавать нечто большее размера конечно точки сталкнулся игнорированием конроллемром некоторых моих DT (причем меня удивил тот факт, что контроллер в такой ситуации не выставлял STALL и не стимал бит активности). Тепрь при формировании TD я просчитываю сколько раз конроллер инвертирует триггер. полностью аппаратный конроль DT смоя нынешняя архитекрура не позвляет, зато если все таки сделаю отдельный QH для каждой КТ, то будет самый идеальный вариант на мой взгляд. Не надо ничего просчитывать. В QH есть бит Data Toggle Control - DTC, бит 14 из DWord1. Если он стоит в 1, то биты DT берутся из qTD, а если в 0, то - из самого QH (бит 31 из Dword6), и там же контроллер его меняет по мере выполнения транзакций. После выполнения всей очереди этот бит надо сохранить - для последующих операций. Я так и делаю, и проблем никаких нет. То, что при неправильном DT не снимается бит активности и не выставляется STALL - норма. Контроллер-то этот пакет посылает - он и знать не желает, правильный там DT или нет. А устройство просто игнорирует пакет с неправильным DT и никак не отвечает, считая, что этот пакет ошибочный. Тут спасает только таймаут. |
Сообщ.
#595
,
|
|
|
Цитата zakharo @ В QH есть бит Data Toggle Control - DTC, бит 14 из DWord1. Я знаю, но тут есть проблема связанная с многозадачностью. Может быть ситуация, что одна задача поставила свою QH, а в это время другая задача то же хочет посладь команду этой же КТ и она должна знать какое значение DT нужно записиывать в QH. Вот как раз в модели одна QH на КТ такой проблемы нету, я ксати уже раз писал уже об этом, видимо ты не заметил. Добавлено Цитата zakharo @ Тут спасает только таймаут. ![]() Добавлено Цитата shm @ полностью аппаратный конроль DT смоя нынешняя архитекрура не позвляет, зато если все таки сделаю отдельный QH для каждой КТ, то будет самый идеальный вариант на мой взгляд. |
Сообщ.
#596
,
|
|
|
Цитата shm @ Вот как раз в модели одна QH на КТ такой проблемы нету, я ксати уже раз писал уже об этом, видимо ты не заметил. Ну да. Так и надо делать. Одна очередь к одной КТ. И дальше работать внутри этой очереди - по мере необходимости добавлять в нее новые QTD и удалять старые. Не зря же предусмотрена установка параметров КТ именно в QH. Установил раз и навсегда - и вперед. |
Сообщ.
#597
,
|
|
|
У флешки например две контрольные точки с двумя QH соответственно, для чтения сектора нужно выполнить bulc out и 2 bulc in.
Получается, что считать сектор или кластер можно только за как минимум два запроса, а поставить следующий сектор можно только дождавшись готовности первого? Или я опять всё перепутал. |
Сообщ.
#598
,
|
|
|
Ну да. Сама флешка не является многозадачной, она не может принять сразу кучу SCSI-команд, а потом их выполнять. Поэтому обращаться к ней надо в строго определенной последовательности: выдать CBW, потом прочитать (или записать, если делаем запись) данные, и потом прочитать и проверить CSW. И только потом можно выдавать следующую команду.
|
Сообщ.
#599
,
|
|
|
самое большое ускорение которое мы можем придать флешке, это поставить две её QH на каждую КТ в кольцо и хоть не придётся их заполнять постоянно.
Добавлено выполнять вторую, пока не выполниться первая не получается |
Сообщ.
#600
,
|
|
|
Это да, приходится применять критические секции. Можно также разработать алгоритм отложенного выполнения команд, но для этого потребуется еще одна очередь, зато появится возможность асинхронной работы внутри потока, хотя последнее особого смысла не имеет.
|