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 則留言:

匿名 提到...

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

checko 提到...

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