uboot之u盤枚舉

              UBOOT U盤枚舉

簡單的說下U盤的枚舉過程,一下是我的U盤的枚舉截圖

 

 

在接口描述符,09 04 00 00 03 08 06 50 00,其後爲三個端點描述符

030端點的數目 兩個批量傳輸 一個interrupt

08 接口所使用的類爲mass storage

06 子類爲SCSI命令集

50 協議爲批量傳輸

接着與U盤有關的就是從GET MAX LUN開始,返回長度爲0001

a1 fe 00 00 00 00 01 00返回的00表示有1塊邏輯塊

接下來顯示的是批量傳輸協議的數據流模型(封裝UFI

需要明白CBWCSW結構,這裏就不詳細介紹,簡單說明

0x43425355 CBWCSW的標誌

0x85ca3cd8爲主機分配的CBW簽名,CSW返回也需要此值

0x00000024爲請求的長度,36字節

80 D7表示傳輸數據方向 1IN 0OUT

00 低四位表示使用LUN

06 低五位表示返回的CBWCB長度 不足16字節補0

後面的16字節根據選擇的子類(這裏是SCSI命令集,實際上使用UFI

CSW就不分析了,總體而言,就是UFI命令被CBW封裝,解析UFI之後,返回對應數據,最後以CSW(最後一個字節00表示傳輸成功)結束一次批量數據傳輸。

UFIUSB Floppy Interface)命令集介紹

(1)    INQUIRY 查詢U盤信息

發送:

12 00 00 00 24 00 00 00 00 …

12 UFI INQUIRY操作碼

00 D7~D5 邏輯單元號,0

24 爲返回的數據分配的存儲空間長度 36字節(前面請求的最大長度也不能超過36字節)

返回的數據具體看文檔

內容包括外設類型,存儲介質是否可移除,廠商信息,產品信息,產品版本信息(1.00 信息均爲ACSII

(2)    READ FORMAT CAPACITIES 讀取可格式化容量

發送: 23 00 00 …00 fc 00…

23 read format capacities 主機讀取可能的格式化容量的列表

00fc  分配的緩衝區長度252

返回的數據:

00 00 00 08 00 1e bf fe 02 00 02 00

08 表示容量列表的長度

001ebffe 高字節在前 表示塊數

02 描述符代碼

000200 高字節在前 每塊字節數512字節

容量=塊數*每塊字節數

(3)    READ CAPACITY 讀取可用的最大容量

發送:25 00 …

25 操作碼 讀取可用容量

返回: 00 1e bf fe 00 00 02 00

001ebffe 最後邏輯塊地址

(與可格式化容量一樣表示沒有其他塊用作他用)

00000200 塊大小 512字節

(4)    READ(10)

28 00 …01.

28 READ(10)操作碼 邏輯塊的地址爲00000000 01爲傳輸長度

就是讀取以邏輯地址爲起始地址,長度爲1的塊的內容

返回: 對應塊的內容

(5)    WRITE(10)

命令和(4)類似,略,操作碼爲0x2A

(6)    REQUEST SENSE 用於探測上一個命令執行失敗的原因

(7)    TEST UNIT READY 用來檢測設備的某個邏輯單元是否準備好

對於U盤的操作,就是基於這些UFI來進行的。

 

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