Почему некоторые USB-устройства хранения данных не могут быть обнаружены каким-либо оборудованием? - PullRequest
1 голос
/ 02 сентября 2010

Я пытаюсь изменить драйвер запоминающего устройства, используя составную структуру usb, чтобы встроенное запоминающее устройство было видно на моем Xbox 360. Я подтвердил, что это не простой блок VendorID / ProductID.1002 * Я хотел бы понять, что конкретно мешает некоторым устройствам, например, Xbox 360, видеть определенные устройства хранения данных.Хотя мой вопрос относится к Xbox, общий ответ, объясняющий, почему устройство не может видеть определенные типы запоминающих устройств, также будет приемлемым.

Я заметил, что из имеющихся у меня флеш-устройств не работают те, у которых определены только 2 конечные точки (Bulk IN, Bulk OUT).Принимая во внимание, что все устройства хранения данных, содержащие 3 конечных точки (Bulk IN, Bulk OUT, Interrupt IN), работали.Это уместное наблюдение или совпадение?

1 Ответ

2 голосов
/ 21 сентября 2010

Существует две причины, по которым запоминающее устройство может не работать на данном хосте.

Самая простая причина - это блок Vendor и Product ID. Некоторое программное обеспечение, такое как iTunes, будет препятствовать синхронизации устройств на основе представленного поставщика и идентификатора продукта. Это очень элементарная профилактика, которую легко обойти, подделав идентификатор поставщика / продукта.

В частности, для Xbox 360 причина заключается в сочетании реализации Xbox 360 SCSI и реализации драйвера USB-устройства. Спецификация для USB Mass Storage содержит структуру, называемую оболочкой командного блока, эта структура содержит член bCBWCBLength, который объявляет длину исполняемого командного блока. Согласно спецификации, это может юридически содержать значения от 1 до 16.

Хотя длина блоков команд по закону может быть от 1 до 16, традиционная длина CDB составляет 6, 10, 12 или 16 байт - длина варьируется в зависимости от команды. Например, команда TEST UNIT READY имеет длину 6 байт, а команда MODE SENSE имеет 6-байтовую и 10-байтовую версию.

Xbox 360 отправляет определенные команды, такие как TEST UNIT READY, в виде 10 байтов, а не 6. Для USB-устройств с более старыми драйверами (такими как Palm Pre и Android) это может вызвать проблему, поскольку драйвер не знает, что делать с этими странными по размеру CDB.

В конечном итоге проблема заключается в сочетании плохой обработки драйверов на стороне устройства и нечетной реализации SCSI на стороне хоста. Если вы не Microsoft, исправление состоит в том, чтобы модифицировать драйвер запоминающего устройства для обработки поля длины CBW странного размера.

Наблюдение, касающееся только объемных и конечных точек массовых прерываний, было лишь совпадением и не имело ничего общего с проблемой, решением или чем-то промежуточным.

...