
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Страницы: (51) « Первая ... 27 28 [29] 30 31 ... 50 51 ( Перейти к последнему сообщению ) |
Сообщ.
#421
,
|
|
|
Да, тогда найти универсальное решение для разных компов вряд ли получится. Наверное, придется обойтись без названий. А так, моя программа определяет кол-во накопителей в системе, выводит для каждого абсолютный размер (в мегах, гигах, терах) и тип интерфейса.
|
Сообщ.
#422
,
|
|
|
Подскажите как настраивать qTD для чтения секторов с флешки?
|
Сообщ.
#423
,
|
|
|
Цитата StasNewOs @ Подскажите как настраивать qTD для чтения секторов с флешки? Сектора передаются посредством обычной передачи блоков данных, qTD настраивается соответствующим образом, т.е. если ты хоть что-то читал, например хотя бы дескриптор устройства, то тут точно также, только конечная точка не нулевая. Запрос на чтения посылается out пакетом, прием и подтверждение - in. По поводу того, чего конкретно передавать см. Universal Serial Bus Mass Storage Class Bulk-Only Transport. На нижнем уровне у всех флешек, USB HDD, USB CR-ROM'ов... пользуется SCSI протокол. |
Сообщ.
#424
,
|
|
|
Ну да, чтобы прочитать сектор, надо сделать массу подготовительных действий. Из дескриптора конфигурации убедиться, что устройство поддерживает 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. |
Сообщ.
#425
,
|
|
|
Я только смог пронумеровать и вывести в своей системе как готовые устройства, но ещё кстати не определил их тип, т.к. не понимаю, что значит принять, читал сектора только с диска а там просто указываеш адрес куда копировать n секторов
Добавлено Куда записывается сам номер сектора и адрес куда читать, в qTD? |
Сообщ.
#426
,
|
|
|
Цитата StasNewOs @ Куда записывается сам номер сектора и адрес куда читать, в qTD? Ты Bulk-Only Transport открывал? Судя по вопросу - нет. Добавлено Цитата zakharo @ Выдать Mass-Storage Reset Зачем? Винда, насколько мне известно, reset не посылает. Более того, после reset'а некоторые девайсы начинают дуреть. |
Сообщ.
#427
,
|
|
|
Читал только здесь http://wiki.osdev.org/Universal_Serial_Bus
Но недопонял |
Сообщ.
#428
,
|
|
|
Цитата zakharo @ А еще мне попадалась флешка со встроенным хабом на один порт. Таких много. Цитата zakharo @ Зачем они так сделали - мне непонятно. Видал планшет к которому если подключить USB девайс через внешний порт на USB клавиатуре, то он не работал. Через хаб все работало, почему так - ![]() |
Сообщ.
#429
,
|
|
|
Этого крайне мало.. Непонятно, как ты сумел с CD сектора считать. Там же тоже идет либо SCSI, либо MMC (Multimedia Command Set). И тоже все команды через Bulk-Only транспорт передаются. Адрес памяти, куда читать, задается как адрес для BulkIn транзакции, а номер сектора задается в команде READ - это уже уровень SCSI. Если с английским проблем нет, то можно почитать Jan Axelson - USB Mass Storage. Или же искать отдельно спецификации Bulk-Only transport (это есть на usb.org) и SCSI. |
Сообщ.
#430
,
|
|
|
Я считывал сектора с винта через AHCI там пакеты, писал драйвер для нескольких сетевух, APIC, саму систему настраивал долго(сам объектный движок у меня готов). Вообще у меня объекты с данными это диски, флешки, сеть настроены одинаково и проводнику не важно какое это устройство, функции дают ему сектора функцией с одинаковыми пораметирами и в объекто они по одному и тому же смещению. Файловым системам фат и нтфс тоже не важно.
Добавлено http://osdev.grindars.org/viewforum.php?f=...c3951004d0cf68e |
Сообщ.
#431
,
|
|
|
Цитата StasNewOs @ Я считывал сектора с винта через AHCI Это принципиально другое. ACHI (как и IDE) заточен под винты. А USB - это же универсальный транспорт, через который можно подключать самые разные устройства. Универсальность требует жертв.. |
Сообщ.
#432
,
|
|
|
Книжку посмотрел, там есть форматы команд, той же read10, я впринципи понял как забить адрес LBA, поставить номер командя, но как потом её передать qTDшке и сколько их делать?
|
Сообщ.
#433
,
|
|
|
Читай 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.
Прикреплённый файл ![]() |
Сообщ.
#434
,
|
|
|
Без получения дескриптора конфигураций сектор не прочитать.
|
Сообщ.
#435
,
|
|
|
Цитата StasNewOs @ Без получения дескриптора конфигураций сектор не прочитать. Да, никак. И без конфигурирования устройства - частенько тоже. У меня есть флешки, у которых есть две конфигурации. И которые в дефолтной конфигурации вообще не читаются. Чтобы их читать, надо установить конфигурацию 1. Вообще этап конфигурирования USB устройства - адресация, чтение дескрипторов и установка конфигурации - обязателен. Иначе как ты поймешь, что к порту подключена именно флешка, а не клавиатура, принтер, мышь или, скажем, вебкамера? Устройств с разъемами USB очень много. |