天天看點

USB協定之一 枚舉過程

一、總線複位及向預設位址0發送GET_DESCRIPTOR指令包,請求設 備描述。如(圖一)所示:

USB協定之一 枚舉過程

                                   (圖一)

1)Index[4 - 5]:表示USB插入總線複位

2)Index[7 - 8]:表示主機向預設位址發送GET_DESCRIPTOR指令包,詳細資訊也抓出來了,如(圖二)所示:

USB協定之一 枚舉過程

       (圖二)

3)Index[15 - 17]:表示裝置向主機發送裝置描述資料Index[16]

4)Index[18 - 19]:表示主機完成GET_DESCRIPTOR指令後,給裝置發送一個空應答;

-----------------------------------------------------------------

二、再次複位總線及向裝置發送SET_ADDRESS指令包,設定裝置位址。如(圖三)所示:

USB協定之一 枚舉過程

                                    (圖三)

1)Index[22 - 23]:表示再次總線複位,該複位自動完成,不是手工插拔USB完成

2)Index[25 - 27]:表示主機向預設位址發送SET_ADDRESS指令包,詳細資訊如(圖四)所示:

USB協定之一 枚舉過程

              (圖四)

3)Index[29 - 31]:表示裝置完成SET_ADDRESS指令後,給主機發送一個空應答;

-----------------------------------------------------------------

三、向第二步設定的裝置位址發送GET_DESCRIPTOR指令包,請求裝置描述。如(圖 五)所示:

USB協定之一 枚舉過程

                                        (圖五)

1)Index[33 - 35]:表示主機向位址01發送GET_DESCRIPTOR指令包,詳細資訊見(圖六)

USB協定之一 枚舉過程

           (圖六)

2)Index[41 - 43]:表示裝置向主機發送裝置描述資料Index[42]

3)Index[45 - 47]:表示裝置向主機發送裝置描述資料Index[46]

4)Index[48 - 50]:表示主機完成GET_DESCRIPTOR指令後,給裝置發送一個空應答;

-----------------------------------------------------------------

四、向第二步設定的裝置位址發送GET_DESCRIPTOR指令包,請求配置描述。如(圖 七)所示:

USB協定之一 枚舉過程

                                   (圖七)

1)Index[52 - 54]:表示主機向位址01發送GET_DESCRIPTOR指令包,詳細資訊見(圖八)

USB協定之一 枚舉過程

          (圖八)

2)Index[57 - 59]:表示裝置向主機發送配置描述資料Index[58]

3)Index[60 - 62]:表示主機完成GET_DESCRIPTOR指令後,給裝置發送一個空應答;

-----------------------------------------------------------------

五、重複向第二步設定的裝置位址發送GET_DESCRIPTOR指令包,取完所有裝置描述及 配置描述;

-----------------------------------------------------------------

六、向第二步設定的裝置位址發送SET_CONFIGURATION指令包,設定配置描述。如 (圖九)所示:

USB協定之一 枚舉過程

                                  (圖九)

1)Index[139 - 141]:表示主機向位址01發送SET_CONFIGURATION指令包,詳細資訊見(圖十)

USB協定之一 枚舉過程

               (圖十)

2)Index[143 - 145]:表示裝置完成SET_CONFIGURATION指令後,給主機發送一個空應答

至此,枚舉過程結束,裝置可通過驅動與主機通信了。

    以上的USB枚舉過程是根據現有特定裝置捕獲得到,并不完整涉及到USB協定的所有指令包,如GET_STATUS指令包、CLEAR_FEATURE指 令包、SET_FEATURE指令包、SET_DESCRIPTOR指令包、GET_CONFIGURATION指令包、GET_INTERFACE指令 包、SET_INTERFACE指令包、SYNCH_FRAME指令包等。