1.26.2007

USB Mass Storage MDD.PDD

Pdd 收到SETUP0 -- 通知(Notify) Mdd。

Mdd 負責 Usb 2.0 的enumeration 動作。

Mdd 進入 " Configured "狀態 -- 通知 BOT

BOT 呼叫 STORE_Init( )。
  • STORE_Init 讀取registry ,轉換成內部變數。
BOT接著呼叫 BOT_OpenInterface( )。
很奇怪的是,static variable declairation 竟然宣告在c header ..
  • OpenInterface( ) 開啟兩個 Bulk Endpoint (In.Out)
接下來就是BOT的執行BOT (Bulk Only Transfer)的state..
ref: Usb Mass Storage Class, Bulk-Only Transfer
利用in. out兩個endpoint完成device 與host的溝通。

通訊的 data parsing 是用每次傳送的size 決定。
依序是:
  1. Command (CBW - Host to Device)
  2. In/Out (Data In/Out)
  3. Status (CSW - Device to Host)
Device 收到packet後,先由size, signature, checksum 確認該packet使否為 CBW。
接著執行CBW內容。
BOT_HandleCBW( )內部就是state machine,分成
  1. COMMAND TRANSFER
  2. DATA IN TRANSFER
  3. DATA OUT TRANSFER
  4. STATUS TRANSFER
這個state machine由BOT_TransferThread 呼叫。

BOT_TransferThread, 這個Thread的calling graph..

Init --
BOT_InternalInit=CreateThread --
BOT_TransferThread --
ProcessBIPipeTransfer/ProcessBOPipeTransfer --
BOT_HandleCBW --
BOT_ExecuteCB --
STORE_ExecuteCommand --

2 則留言:

  1. 在網路上找有關wince usb device driver的文章..
    結果發現了這裡..
    小弟現在也在作wince5.0的usb device function的相關工作..
    但市才剛接觸很多東西不懂..想請教一下..
    我在platform builder有把usb client driver跟function driver加入..
    MDD PDD的dllentry會進入..但是bot好像不會進去說..
    要怎樣才能把client driver跟function driver連起來..??
    是要用設定的方式嗎..??

    回覆刪除
  2. registry 要設定 usb 的client driver 使用 mass_storage。
    一般default 會是 serial (activesync),所以mass_storage 不會起來..

    回覆刪除