На главную Наши проекты:
Журнал   ·   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) « Первая ... 33 34 [35] 36 37 ...  50 51  ( Перейти к последнему сообщению )  
> Желающим USB под ДОС , Welcome!!!
    Status Block Wrapper не приходит ко мне оказывается, а бит активности этого qTD обнуляется

    В первый qTD (out)статус стал 10000000000000000000000000000001, второй и третий (in) 00000010000000000000000101000000
    10000000000011010000000101000000 64(Halted)
    Сообщение отредактировано: StasNewOs -
      я так понял, что кроме статуса контроллер обнуляет ещё много чего, в том числе и размер передоваемых байт?

      Добавлено
      В первом qTD все мои данные обнулил и поставил 0 бит
        Похоже, это у тебя устройство выставляет STALL. Я говорил уже, что некоторые флешки не дают сразу же читать сектора, а сначала выставляют сигналы ATTENTION, которые надо снимать через REQUEST SENSE. В твоей ситуации, если STALL выставлен в ответ на READ, надо его снять через ClearFeature (см. описание Bulk-Only Mass Storage Protocol), а потом получить CSW. Там, скорее всего, в статусе будет 1, а причину этой 1 надо выяснять через REQUEST SENSE. Можно избежать этого, если начать работу с флешкой аккуратнее - первой командой дать TEST UNIT READY. Там нет фазы данных, сразу возвращается CSW. Смотришь там статус, и если он 1, даешь REQUEST SENSE. Повторяешь эту пару команд до тех пор, пока TEST UNIT READY не вернет 0 в статусе.
          Inquiry выдавала мне такие результаты
          10000000000000000000000000000001
          10000000000000000000000100000000
          00000000000000000000000100000000
          она рабочая.

          Добавлено
          TEST UNIT READY выдал 0, я просто взял мою read10 убрал Data Transport и обнулил поля в 31байтных данных Command Transport, прошло всё нормально.
          10000000000000000000000000000001
          10000000000000000000000100000000
          USBC
          tag
          0

          а может из за того, что флешка в кард ридере?

          Добавлено
          хотя нет, это 8-12байты 0, а 13байт выдаёт 1
          Сообщение отредактировано: StasNewOs -
            Сделал TEST UNIT потом REQUEST SENSE и TEST UNIT, и опяти результат 13байта=1
              Результаты REQUEST SENSE надо расшифровывать по таблице (она есть в док-ции по SCSI). Там три значащих байта. SK, ASC, ASCQ, сейчас точно не помню, какие они по счету в возвращаемом буфере. Есть безусловная неготовность - например, отсутствует карточка в картридере, а есть временная, для привлечения внимания хоста. Временная снимается уточнением причины.
              И, в принципе, флешки могут неоднократно выставлять сигнал ATTENTION - "только что включено питание", "прошел сигнал RESET", и т.д. Мне приходилось по 3 раза спрашивать у устройства, готово ли оно. Ничего страшного в этом нет.

              Добавлено
              Для картридеров GetMaxLUN выдаст значение, больше 0. Дальше надо опрашивать каждый LUN до тех пор, пока не найдется тот, в котором установлена карточка.
              Но это для картридера. Если же ты пользуешься портом, который рядом, то это - просто порт.
              Сообщение отредактировано: zakharo -
                Теперь кстать уже стал 13байта=0
                  Как только TEST UNIT READY вернет 0 в bCSWStatus, можно читать сектора.
                    Но сектора пока не вижу

                    Добавлено
                    Попробую с нормальной флешки загрузиться
                      Значит, надо смотреть причину. Снимай состояние STALL (все равно эту процедуру придется делать), получай CSW и выясняй причину отказа по REQUEST SENSE.
                        Ладно, завтра сделаю.
                          У тебя уже вырисовывается 3 независимых уровня, замечаешь? Уровень контроллера - это где ты заполняешь QH и qTD и выполняешь транзакции. Уровень Bulk-Only Mass-Storage - это где ты упаковываешь команды в CBW и получаешь CSW. И уровень SCSI - где ты выдаешь осмысленные команды и получаешь осмысленные ответы. Эти три уровня лучше сделать делать независимыми. Например, если в будущем придется работать с контроллером типа USB 3.0 (xHCI) или с 1.1 (UHCI, OHCI) - ты просто меняешь уровень контроллера, и все. Остальное остается нетронутым. А если придется работать с флоппиками - меняешь уровень Bulk-Only на Control-Bulk-Interrupt. Система команд у флоппика - UFI, очень и очень похожа на SCSI. Основные команды вообще те же самые, так что по минимуму можно ничего больше и не менять.
                          Уровень логических дисков (FAT, FAT32 и т.д.) у тебя уже есть, как я понял? Там же можно еще сделать ISO9660 (CDFS) - для компакт-дисков, нижние же уровни это опять же не затронет.

                          Когда будешь сделать снятие STALL (в серьезных системах это называется Clear Pipe) не забудь, что после него счет DT для этой конечной точки опять начнется с 0.
                          Сообщение отредактировано: zakharo -
                            Я сделал функции
                            INQUIRY
                            TEST UNIT READY
                            REQUEST SENSE
                            READ CAPACITY
                            READ(10)
                            Они работают, в начале у каждой заполнение Command Transport, потом его вызов, потом Data Transport и Status Transport.
                            Т.е. QH заполняет Command Transport Data Transport Status Transport, получилось выполнять всю работу тремя функциями для всех.
                            TEST UNIT READY вызывает только первую и третью.
                            На данный момент обнулилось 13 байтST после вызова TEST UNIT READY и если 1 то REQUEST SENSE и TEST UNIT READY потом уже 13бит=0.
                            Но вызывая READ CAPACITY и READ(10) если 13бит=0 они всё равно у меня ещё не очень рабочии.
                            Проверю результат вызова REQUEST SENSE.
                            Сообщение отредактировано: StasNewOs -
                              Цитата zakharo @
                              У тебя уже вырисовывается 3 независимых уровня, замечаешь? Уровень контроллера - это где ты заполняешь QH и qTD и выполняешь транзакции. Уровень Bulk-Only Mass-Storage - это где ты упаковываешь команды в CBW и получаешь CSW. И уровень SCSI - где ты выдаешь осмысленные команды и получаешь осмысленные ответы. Эти три уровня лучше сделать делать независимыми. Например, если в будущем придется работать с контроллером типа USB 3.0 (xHCI) или с 1.1 (UHCI, OHCI) - ты просто меняешь уровень контроллера, и все.

                              zakharo, я ему многократно пытался это объяснить, причем не только про USB, но он слушать не хочет. Я когда-то давно также начинал писать: лишь бы побольше было. В итоге сейчас на досуге потихоньку переписываю по-нормальному, но StasNewOs упорно повторяет мой путь.
                                Цитата shm @
                                zakharo, я ему многократно пытался это объяснить, причем не только про USB, но он слушать не хочет. Я когда-то давно также начинал писать: лишь бы побольше было. В итоге сейчас на досуге потихоньку переписываю по-нормальному, но StasNewOs упорно повторяет мой путь.

                                О таких вещах у меня с табой разговоров небыло. Ещё раз тебе говорю, у меня объектная система на которыю я нарабатываю функционал и объекты. Про 3 уровня я полностью согласен и это собственно и реализовываю.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (51) « Первая ... 33 34 [35] 36 37 ...  50 51


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