2

我正在尝试使用复合 USB 框架修改大容量存储驱动程序,以允许嵌入式大容量存储设备在我的 Xbox 360 上可见。我已确认这不是简单的 VendorID/ProductID 块。

我想了解是什么特别阻止了某些设备(例如 Xbox 360)看到某些大容量存储设备。尽管我的问题是针对 Xbox 的,但解释为什么设备无法看到某些类型的大容量存储的通用答案也是可以接受的。

我观察到,在我拥有的闪存设备中,那些只定义了 2 个端点(批量输入、批量输出)的闪存设备不起作用。而所有包含 3 个端点(批量输入、批量输出、中断输入)的大容量存储设备都可以正常工作。这是相关的观察还是巧合?

4

1 回答 1

3

大容量存储设备可能无法在给定主机上工作的原因有两个。

最简单的原因是供应商和产品 ID 块。某些软件(例如 iTunes)会根据提供的供应商和产品 ID 阻止设备同步。这是一个非常基本的预防措施,很容易通过欺骗供应商/产品 ID 绕过。

特别是对于 Xbox 360,原因是 Xbox 360 SCSI 实现和 USB 设备驱动程序实现的组合。USB 大容量存储规范包含一个称为命令块包装器的结构,该结构包含一个成员 bCBWCBLength,它声明要执行的命令块的长度。根据规范,这可以合法地包含从 1 到 16 的值。

虽然命令块的长度可以合法地从 1 到 16,但 CDB 的传统长度是 6、10、12 或 16 字节 - 长度因命令而异。例如,TEST UNIT READY 命令是 6 字节,而 MODE SENSE 有 6 字节和 10 字节版本。

Xbox 360 碰巧以 10 个字节而不是 6 个字节发送某些命令,例如 TEST UNIT READY。对于具有较旧驱动程序的 USB 设备(如 Palm Pre 和 Android),这可能会导致问题,因为驱动程序不知道如何处理这些奇怪大小的 CDB。

最终问题是设备端驱动程序处理不佳和主机端奇怪的 SCSI 实现的混合。除非您是 Microsoft,否则解决方法是修改您的大容量存储驱动程序以处理奇怪大小的 CBW 长度字段。

关于仅批量与批量中断端点的观察只是一个巧合,与问题、解决方案或介于两者之间的任何事情无关。

于 2010-09-21T07:03:13.413 回答