[USB波形分析] 全速USB波形數據分析(三)


前面的兩篇文章介紹和分析了USB的一些基本知識,結合前面的介紹,今天用實例介紹USB的枚舉過程。

 

1 | 概況

硬件基於EK-TMC123GXL開發板,軟件是TI提供的USB批量傳輸的簡單例子,在PC端用命令行通過USB發送字符串,開發板通過USB返回應對的字符串(發送的是大寫字母,返回小寫字母,反之亦然)

 

2 | 枚舉過程

 由於整個枚舉過程很長,現有示波器沒法捕獲這個枚舉過程,改用邏輯分析儀來分析:

2.1 | 獲取描述符(GET_DEVICE_DESCRIPTOR)

主機發起控制傳輸的SETUP階段,地址為0,端點為0

 

 

 

 

主機發起控制傳輸的DATA階段,設備返回設備描述符

 

 

對應的解析如下

 

主機發起控制傳輸的STATUS階段

 

2.2 | 復位(RESET)

獲取完設備描述符以后,支持對設備進行了復位操作

 

2.3 | 設置地址(SET_ADDRESS)

主機發起控制傳輸的SETUP階段,地址為0,端點為0,設置設備的新地址為1

 

 

主機發起控制傳輸的STATUS階段,地址為0,端點為0(這里沒有DATA階段)

 

 

 

 

 

 

 2.4 | 獲取設備描述符(GET_DEVICE_DESCRIPTOR)

主機用新設置的地址(下同),發起獲取設備描述符傳輸,傳輸過程和返回值和2.1相同

 

2.5 | 獲取配置描述符(GET_CONFIGURATION_DESCRIPTOR)

主機發起控制傳輸的SETUP階段,地址為1,端點為0

 

 

主機發起控制傳輸的DATA階段,設備返回配置描述符

 

 

解析如下

 

 

主機發起控制傳輸的STATUS階段,地址為1,端點為0

 

2.6 | 獲取字符串描述符(GET_STRING_DESCRIPTOR)

主機發起控制傳輸的SETUP階段,地址為1,端點為0, 字符串索引為3

 

 

 

 

 

主機發起控制傳輸的DATA階段,設備返回索引為3的字符串描述符

 

 

主機發起控制傳輸的STATUS階段,地址為1,端點為0

 

 

2.7 | 獲取字符串描述符(GET_STRING_DESCRIPTOR)

主機發起控制傳輸的SETUP階段,地址為1,端點為0, 字符串索引為0

 

 

 

 

主機發起控制傳輸的DATA階段,設備返回索引為0的字符串描述符

 

 

 

 

主機發起控制傳輸的STATUS階段,地址為1,端點為0

 

 2.8 | 獲取字符串描述符(GET_STRING_DESCRIPTOR)

主機發起控制傳輸的SETUP階段,地址為1,端點為0, 字符串索引為2,傳輸過程2.6相同。

 

2.9 | 再次獲取描述符

主機再次獲取設備描述符,配置描述符。發生這種情況的原因可能多種多樣,例如堆棧中的不同驅動程序各自出於自身目的詢問相同的問題。

 

2.10 | 獲取狀態(GET_STATUS)

 主機發起控制傳輸的SETUP階段,地址為1,端點為0

 

 

主機發起控制傳輸的DATA階段,設備返回狀態值

 

 

主機發起控制傳輸的STATUS階段,地址為1,端點為0

 

2.11 | 設置配置(SET_CONFIGURATION)

主機發起控制傳輸的SETUP階段,地址為1,端點為0

 

 

 

 

主機發起控制傳輸的STATUS階段,地址為1,端點為0

 

3 | 數據過程

PC端軟件發送字符串"HELLO,USB!",將返回字符串"hello,usb!"

 

 

 

 3.1 | 發送(OUT)

主機發起OUT事務,地址為1,端點為1

 

3.2 | 接收(IN)

主機發起IN事務,地址為1,端點為1,設備返回數據

 

 

4 | 總結

枚舉是主機用端點0,通過控制傳輸(Control Transfer),獲取設備信息的過程。設備將信息以描述符的形式返回給主機。USB設備都有一個描述符層次結構如下圖,

 

 

-----------------------------------------------------------------------------------END

[參考資料]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM