Существует две причины, по которым запоминающее устройство может не работать на данном хосте.
Самая простая причина - это блок 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 странного размера.
Наблюдение, касающееся только объемных и конечных точек массовых прерываний, было лишь совпадением и не имело ничего общего с проблемой, решением или чем-то промежуточным.