На главную Наши проекты:
Журнал   ·   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) « Первая ... 27 28 [29] 30 31 ...  50 51  ( Перейти к последнему сообщению )  
> Желающим USB под ДОС , Welcome!!!
    Да, тогда найти универсальное решение для разных компов вряд ли получится. Наверное, придется обойтись без названий. А так, моя программа определяет кол-во накопителей в системе, выводит для каждого абсолютный размер (в мегах, гигах, терах) и тип интерфейса.
      Подскажите как настраивать qTD для чтения секторов с флешки?
      Сообщение отредактировано: StasNewOs -
        Цитата StasNewOs @
        Подскажите как настраивать qTD для чтения секторов с флешки?

        Сектора передаются посредством обычной передачи блоков данных, qTD настраивается соответствующим образом, т.е. если ты хоть что-то читал, например хотя бы дескриптор устройства, то тут точно также, только конечная точка не нулевая. Запрос на чтения посылается out пакетом, прием и подтверждение - in. По поводу того, чего конкретно передавать см. Universal Serial Bus Mass Storage Class Bulk-Only Transport. На нижнем уровне у всех флешек, USB HDD, USB CR-ROM'ов... пользуется SCSI протокол.
        Сообщение отредактировано: shm -
          Ну да, чтобы прочитать сектор, надо сделать массу подготовительных действий. Из дескриптора конфигурации убедиться, что устройство поддерживает Bulk-Only Mass Storage Transport и систему команд SCSI или ATAPI (были у меня флешки с ATAPI, к счастью, он отличается от SCSI только в мелочах), вытащить адреса конечных точек для Bulk-In и Bulk-Out транзакций. Выдать Mass-Storage Reset. Все дальнейшие команды - это протокол SCSI, "обернутый" в Bulk-Only Transport.
          Для начала надо несколько раз поверить готовность - TEST UNIT READY (команда SCSI), потому что некоторые флешки не сразу готовы выполнять команды чтения, а выставляют сигналы ATTENTION типа "включено питание", "прошел сброс" и т.д. После каждой проверки в случае неготовности уточнять причину (REQUEST SENSE - тоже команда SCSI) - это сбрасывает сигнал ATTENTION. Проверять надо до тех пор, пока устройство не выставить четкую готовность или неготовность по какой-либо причине. И только потом можно дать команду READ, в ответ на которую устройство и выдаст требуемый сектор.
          А еще мне попадалась флешка со встроенным хабом на один порт. Зачем они так сделали - мне непонятно. Возможно, просто взяли какой-нибудь готовый контроллер. Соответственно, без реализации команд управления хабом там ничего не работало.
          Так что тут не про qTD говорить надо, а внимательно изучать Bulk-Only Transport и SCSI.
            Я только смог пронумеровать и вывести в своей системе как готовые устройства, но ещё кстати не определил их тип, т.к. не понимаю, что значит принять, читал сектора только с диска а там просто указываеш адрес куда копировать n секторов

            Добавлено
            Куда записывается сам номер сектора и адрес куда читать, в qTD?
              Цитата StasNewOs @
              Куда записывается сам номер сектора и адрес куда читать, в qTD?

              Ты Bulk-Only Transport открывал? Судя по вопросу - нет.

              Добавлено
              Цитата zakharo @
              Выдать Mass-Storage Reset

              Зачем? Винда, насколько мне известно, reset не посылает. Более того, после reset'а некоторые девайсы начинают дуреть.
                Читал только здесь http://wiki.osdev.org/Universal_Serial_Bus
                Но недопонял
                  Цитата zakharo @
                  А еще мне попадалась флешка со встроенным хабом на один порт.

                  Таких много.
                  Цитата zakharo @
                  Зачем они так сделали - мне непонятно.

                  Видал планшет к которому если подключить USB девайс через внешний порт на USB клавиатуре, то он не работал. Через хаб все работало, почему так - :-?.
                    Цитата StasNewOs @
                    Читал только здесь http://wiki.osdev.org/Universal_Serial_Bus
                    Но недопонял

                    Этого крайне мало..
                    Непонятно, как ты сумел с CD сектора считать. Там же тоже идет либо SCSI, либо MMC (Multimedia Command Set). И тоже все команды через Bulk-Only транспорт передаются.
                    Адрес памяти, куда читать, задается как адрес для BulkIn транзакции, а номер сектора задается в команде READ - это уже уровень SCSI.
                    Если с английским проблем нет, то можно почитать Jan Axelson - USB Mass Storage. Или же искать отдельно спецификации Bulk-Only transport (это есть на usb.org) и SCSI.
                      Я считывал сектора с винта через AHCI там пакеты, писал драйвер для нескольких сетевух, APIC, саму систему настраивал долго(сам объектный движок у меня готов). Вообще у меня объекты с данными это диски, флешки, сеть настроены одинаково и проводнику не важно какое это устройство, функции дают ему сектора функцией с одинаковыми пораметирами и в объекто они по одному и тому же смещению. Файловым системам фат и нтфс тоже не важно.

                      Добавлено
                      http://osdev.grindars.org/viewforum.php?f=...c3951004d0cf68e
                        Цитата StasNewOs @
                        Я считывал сектора с винта через AHCI

                        Это принципиально другое. ACHI (как и IDE) заточен под винты.
                        А USB - это же универсальный транспорт, через который можно подключать самые разные устройства. Универсальность требует жертв..
                          Книжку посмотрел, там есть форматы команд, той же read10, я впринципи понял как забить адрес LBA, поставить номер командя, но как потом её передать qTDшке и сколько их делать?
                            Читай Bulk-Only transport. Там команды SCSI оборачиваются в т.н. CBW (Command Block Wrapper) фиксированной длины - 31 байт. Этот блок подается на Bulk-Out endpoint. Вот тут уже можно говорить о qTD - для передачи 31 байта достаточно одного qTD. Адрес этой самой Bulk-Out endpoint надо брать из дескриптора конфигурации - они легко могут быть разные у разных устройств. Устройство распознает и выполняет команду. Если задано чтение, то потом с Bulk-In endpoint надо прочитать данные (1 сектор - 512 байт, тоже достаточно одного qTD) и потом еще CSW (Command Status Wrapper) 13 байт - там код завершения и т.д. (еще один qTD). Если все нормально, то выполнение команды на этом заканчивается. В случае ошибок нужны дополнительные действия. Все ситуации описаны в спецификации Bulk-Only.

                            Прикреплённый файлПрикреплённый файлusbmassbulk_10.zip (83,63 Кбайт, скачиваний: 94)
                            Сообщение отредактировано: zakharo -
                              Без получения дескриптора конфигураций сектор не прочитать.
                                Цитата StasNewOs @
                                Без получения дескриптора конфигураций сектор не прочитать.

                                Да, никак. И без конфигурирования устройства - частенько тоже. У меня есть флешки, у которых есть две конфигурации. И которые в дефолтной конфигурации вообще не читаются. Чтобы их читать, надо установить конфигурацию 1.
                                Вообще этап конфигурирования USB устройства - адресация, чтение дескрипторов и установка конфигурации - обязателен. Иначе как ты поймешь, что к порту подключена именно флешка, а не клавиатура, принтер, мышь или, скажем, вебкамера? Устройств с разъемами USB очень много.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (51) « Первая ... 27 28 [29] 30 31 ...  50 51


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0586 ]   [ 16 queries used ]   [ Generated: 21.07.25, 19:33 GMT ]