2010-09-02 68 views
1

我正在嘗試使用複合usb框架來修改大容量存儲驅動程序,以允許嵌入式大容量存儲設備在我的Xbox 360上可見。我已經確認這不是一個簡單的VendorID/ProductID塊。爲什麼某些硬件無法檢測某些USB海量存儲設備?

我想了解什麼特別是阻止某些設備,比如說Xbox 360,看到某些大容量存儲設備。儘管我的問題是針對Xbox的,但一個通用的答案解釋了爲什麼設備無法看到某些類型的大容量存儲,也是可以接受的。

我從我自己的閃存設備中發現,那些不工作的只有那些只有2個終端定義的(Bulk IN,Bulk OUT)。而包含3個端點(Bulk IN,Bulk OUT,Interrupt IN)的所有大容量存儲設備都已運行。這是相關的觀察還是巧合?

回答

2

大容量存儲設備可能無法在給定主機上工作有兩個原因。

最簡單的原因是供應商和產品ID塊。某些軟件(如iTunes)會阻止設備根據所提供的供應商和產品ID進行同步。這是一種非常基本的預防措施,很容易被欺騙的供應商/產品ID繞過。

對於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長度字段。

關於僅批量與批量中斷端點的觀察僅僅是巧合,與問題,解決方案或其中任何內容無關。