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