給一個USB設備發送一條READ命令,設備一直沒有返回值。
用bus hound抓了下協議一看,READ命令被抓到了,說明是有被髮送出去的,但一直沒有響應返回,很有可能是這條READ命令格式有問題,導致設備無法識別。
細細一看,,還真是。
命令塊封包CBW的長度爲00 00 00 00 (紅框),即爲0字節;而READ命令的傳輸長度爲00 01(籃框),即一個邏輯塊,就是512個字節。
正確情況下,READ/WRITE命令傳輸數據的長度,要與CBW結構包的數據長度相對應。
因此在代碼中修改一下CBW包的數據長度,再試一下。
結果成功了接收到了設備的返回數據。
要注意的是,READ/WRITE的傳輸長度是指邏輯塊的數量,而一個邏輯塊是512個字節;CBW的傳輸數據指的就是字節數了。
因此呢,藍框中顯示00 01,高位先發,即有一個邏輯塊,爲512字節;紅框中顯示字節數爲00 02 00 00 ,低位先發,所以說0x200,也是512字節,兩者相對應,就沒毛病。