新聞中心

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

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

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

2.在USB設備的枚舉過程中使用了控制傳輸,這種傳輸保證數(shù)據(jù)傳輸?shù)恼_性。控制傳輸分為:建立過程(主機發(fā)起)、可選的數(shù)據(jù)過程和狀態(tài)過程。

本文引用地址:http://2s4d.com/article/201612/330045.htm

3.控制傳輸解析:

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

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

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

4.枚舉過程的解析:

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

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

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

(2)地址設置

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

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

(3)獲取設備描述符

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

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

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

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

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



關鍵詞: USB學習USB設備枚

評論


技術專區(qū)

關閉