簡單說說USB協議(四)發送READ/WRITE命令接收不到設備響應

給一個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字節,兩者相對應,就沒毛病。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章