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