USB枚举
標準請求
標準USB設備請求命令共有11個,大小都是8個字節,具有相同的結構
| 0 | GET_STATUS | 用來返回特定接收者的狀態 |
| 1 | CLEAR_FEATURE | 用來清除或禁止接收者的某些特性 |
| 3 | SET_FEATURE | 用來啟用或激活命令接收者的某些特性 |
| 5 | SET_ADDRESS | 用來給設備分配地址 |
| 6 | GET_DESCRIPTOR | 用于主機獲取設備的特定描述符 |
| 7 | SET_DESCRIPTOR | 修改設備中有關的描述符,或者增加新的描述符 |
| 8 | GET_CONFIGURATION | 用于主機獲取設備當前設備的配置值(注同上面的不同) |
| 9 | SET_CONFIGURATION | 用于主機指示設備采用的要求的配置 |
| 10 | GET_INTERFACE | 用于獲取當前某個接口描述符編號 |
| 11 | SET_INTERFACE | 用于主機要求設備用某個描述符來描述接口 |
| 12 | SYNCH_FRAME | 用于設備設置和報告一個端點的同步幀 |
?
?
枚舉過程
USB設備枚舉一般會經過插入、供電、初始化、分配地址,配置,獲取設備描述符、獲取配置描述符、獲取字符串描述符和配去置設備這么幾個過程。
?
從下圖可以看出,兩次復位的過程。
?
在兩次復位中間,紅圈畫出的是多個同步幀。藍圈內有密集的數據交互,可以推斷出這里是獲取設備描述符前8字節階段,是一次控制傳輸。
先看該控制傳輸的建立過程,這是一次獲取設備描述符的請求,由于不知道設備描述符長度,請求長度為0x40。
該控制傳輸的數據過程,返回設備描述符的內容。
?
第二次復位之后,首先設置地址:0x0C
?
由于已經設置完地址,所以開始使用新地址,再次獲取設備描述符。第一次獲取設備描述之后已經得知設備描述符長度,可以發現本次獲取長度變為0x12。
?
獲取配置描述符
?
獲取字符串描述符
?
獲取設備限定描述符
同時支持全速與高速的設備,必須有一個設備限定描述符。我的設備不支持高速模式,對該指令響應掛起。
?
然后又重新獲取了設備描述符和配置描述符
?
設置配置號
?
我的設備是虛擬串口,下面開始CDC類相關操作
?
緊接著又重新獲取了字符串描述符
?
總結
- 上一篇: 51单片机如何用c语言位定义,嵌入式编程
- 下一篇: 开关电源之EMI设计