我正在尝试使用复合usb框架修改一个大容量存储驱动程序,以便在我的Xbox360上可以看到嵌入式大容量存储设备。我已经确认这不是一个简单的VendorID/ProductID块。
我想知道是什么具体阻止了某些设备,比如Xbox360,看不到某些大容量存储设备。虽然我的问题是针对Xbox的,但解释为什么设备无法看到特定类型的海量存储的通用答案也是可以接受的。
我观察到,在我拥有的闪存设备中,不起作用的是那些只定义了2个端点的设备(Bulk IN,Bulk OUT)。而包含3个端点(Bulk IN、Bulk OUT、Interrupt IN)的所有大容量存储设备都已经工作。这是相关的观察结果还是巧合?
发布于 2010-09-21 15:03:13
大容量存储设备可能无法在给定主机上运行的原因有两个。
最简单的原因是Vendor和Product ID块。某些软件,如iTunes,将根据显示的供应商和产品ID阻止设备同步。这是一种非常基本的预防措施,很容易被欺骗供应商/产品ID绕过。
具体到Xbox 360,原因是Xbox 360 SCSI实现和USB设备驱动程序实现的组合。通用串行总线大容量存储器规范包含一个称为命令块包装器的结构,该结构包含一个成员bCBWCBLength,该成员声明要执行的命令块的长度。根据规范,这可以合法地包含从1到16的值。
虽然命令块的长度在法律上可以从1到16,但CDB的传统长度是6、10、12或16字节-长度因命令而异。例如,测试单元就绪命令是6字节,而模式检测具有6字节和10字节版本。
Xbox 360恰好以10字节而不是6字节发送某些命令,例如TEST UNIT READY。对于使用较旧驱动程序的USB设备(如Palm Pre和Android),这可能会导致问题,因为驱动程序不知道如何处理这些大小奇怪的CDB。
归根结底,问题是设备端糟糕的驱动程序处理和主机端奇怪的SCSI实现。除非您是Microsoft,否则修复方法是修改您的大容量存储驱动程序,以处理大小奇怪的CBW长度字段。
关于批量中断端点和批量中断端点的观察只是一个巧合,与问题、解决方案或两者之间的任何事情无关。
https://stackoverflow.com/questions/3624711
复制相似问题