新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > USB學習系列之三——USB設備的枚舉

        USB學習系列之三——USB設備的枚舉

        作者: 時間:2016-12-14 來源:網絡 收藏
        1.枚舉就是從設備讀取各種描述符信息,主機根據讀取的描述符信息來決定加載什么驅動,確定是什么樣的設備以及如何通信等。

        2.在USB設備的枚舉過程中使用了控制傳輸,這種傳輸保證數據傳輸的正確性。控制傳輸分為:建立過程(主機發起)、可選的數據過程和狀態過程。

        本文引用地址:http://www.104case.com/article/201612/330045.htm

        3.控制傳輸解析:

        (1)主機發起建立過程,建立過程開始于一個SETUP令牌包,后面緊跟一個DATA0數據包,接著就是數據過程。

        (2)如果是控制讀傳輸,那么數據過程就是輸入數據(相對于USB主機來說的);如果是控制寫傳輸,那么數據過程就是輸出數據。如果在建立過程中指定了數據長度為0,那么就沒有數據過程。數據過程之后是狀態過程。

        (3)狀態過程剛好與數據過程的數據傳輸方向相反:如果是控制讀傳輸,則狀態過程是一個輸出數據包(相對于USB主機來說的);如果是控制寫傳輸,則狀態過程是一個輸入數據包。狀態過程是用來確認所有的數據是否都已經正確傳輸完成。

        4.枚舉過程的解析:

        (1)復位并讀取端點0最大包長度:

        主機監測到設備插入后,首先對設備進行復位(也就是將差分數據線同時拉低一段時間,因為差分數據線正常狀態是一高一低)。USB設備復位之后地址為0,USB主機往地址為0的設備的端點0發送獲取設備描述符的標準請求(這是一個控制傳輸的建立過程)。設備收到請求后,在數據過程將設備描述符返回給主機。主機在成功獲取到一個數據包的設備描述符并且確認沒有錯誤后,就會返回一個0長度的確認數據包(狀態過程)。然后就會進入到設置地址的階段。

        注意:標準的設備描述符有18個字節,但是有些USB設備端點0大小不足18字節,理論上說USB主機只有通過多次讀取才能讀取到18字節的數據,但是在此階段USB主機仍然只讀取一次,這一次讀取的數據大小最小為8字節(USB協議規定端點0至少為8字節),在這8字節的數據中已經包含了USB主機在這個階段需要知道的信息,也就是端點0的最大包長度。端點0的最大包長度存放于設備描述符的第8字節處。

        (2)地址設置

        USB主機往地址為0的設備的端點0發送一個設置地址的請求(建立過程),新的設備地址包含在建立過程的數據包中。具體的地址由USB主機負責管理,主機會分配一個唯一的地址給剛接入的設備。USB設備在收到這個建立過程之后就直接進入到狀態過程,因為這里數據過程是不需要的。設備等待主機請求狀態返回(一個輸入令牌包),收到輸入令牌包后,設備就返回0長度的狀態數據包。如果主機成功接收到該狀態包,就會發送應答包ACK(確認字符)給設備,設備收到ACK之后,就要啟用新的地址,以后主機就通過這個地址來訪問該設備。

        注意:D12USB接口芯片會自動等待ACK之后才啟用新的地址,所以要在返回0長度的狀態包之前,將地址寫到D12芯片的地址寄存器中。

        (3)獲取設備描述符

        使用新的地址,獲取完整的18字節的設備描述符。如果端點0的最大包長小于18字節,那么就會有多多次請求數據輸入。

        (4)主機獲取配置描述符和配置集合

        配置描述符總共為9字節。主機在獲取到配置描述符之后就獲取配置集合。

        (5)獲取字符串描述符等其他的描述符。

        注意:設備返回的數據長度可以小于主機請求的長度。



        關鍵詞: USB學習USB設備枚

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 汽车| 铜陵市| 鄄城县| 浦北县| 醴陵市| 芮城县| 郯城县| 来凤县| 汨罗市| 泰州市| 柏乡县| 凤城市| 永春县| 泰安市| 收藏| 宣汉县| 大兴区| 天长市| 二手房| 宝鸡市| 崇礼县| 安阳市| 盐津县| 神木县| 平陆县| 广州市| 安宁市| 买车| 牙克石市| 塔城市| 庄浪县| 雷山县| 营口市| 昆山市| 张家港市| 鄢陵县| 宣化县| 安康市| 云浮市| 奉贤区| 新和县|