新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于STM32的USB枚舉過(guò)程學(xué)習(xí)筆記(三)

基于STM32的USB枚舉過(guò)程學(xué)習(xí)筆記(三)

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
上一篇介紹到了主機(jī)上電復(fù)位USB設(shè)備,在控制傳輸?shù)慕⑦^(guò)程,發(fā)送了8個(gè)字節(jié)的數(shù)據(jù)給設(shè)備,這8個(gè)字節(jié)為0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00,該請(qǐng)求為USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求中的GET_DESCRIPTOR請(qǐng)求。0x80表示標(biāo)準(zhǔn)設(shè)備請(qǐng)求,數(shù)據(jù)方向是設(shè)備到主機(jī)。0x60表示請(qǐng)求類型GET_DESCRIPTOR。0x01表示描述符類型是設(shè)備描述符。0x40表示描述符長(zhǎng)度。

設(shè)備在收到該請(qǐng)求以后,首先進(jìn)行解析,根據(jù)請(qǐng)求中的0x40表示該控制傳輸有數(shù)據(jù)過(guò)程,因此進(jìn)入到Data_Setup0()函數(shù)。該函數(shù)根據(jù)請(qǐng)求的不同描述符,執(zhí)行不同的回調(diào)函數(shù)

本文引用地址:http://m.butianyuan.cn/article/201611/318463.htm

CopyRoutine(),并在DataStageIn()函數(shù)中把要發(fā)送給主機(jī)的描述符填入U(xiǎn)SB緩沖區(qū),等待USB主機(jī)發(fā)送IN令牌包。

主機(jī)在建立過(guò)程最后收到ACK以后,發(fā)送IN令牌包,從而進(jìn)入到數(shù)據(jù)過(guò)程。在CTR_LP()函數(shù)中判斷是IN0中斷后,進(jìn)入In0_Process()函數(shù)。在數(shù)據(jù)過(guò)程將之前填在USB緩沖器的設(shè)備描述符發(fā)給主機(jī),并等待主機(jī)的應(yīng)答。

主機(jī)在確認(rèn)接收到的設(shè)備描述符沒(méi)有出錯(cuò)后,就會(huì)返回一個(gè)0數(shù)據(jù)長(zhǎng)度的確認(rèn)包,即控制傳輸?shù)臓顟B(tài)過(guò)程。在CTR_LP()函數(shù)中判斷是OUT0中斷,進(jìn)入Out0_Process()函數(shù),由于在狀態(tài)過(guò)程,所以調(diào)用回調(diào)函數(shù)Process_Status_OUT()。

下面和上篇一樣,對(duì)照著USB分析儀捕捉的數(shù)據(jù)分析獲取設(shè)備描述符這次控制傳輸?shù)臄?shù)據(jù)過(guò)程和狀態(tài)過(guò)程。

下面通過(guò)串口打印信息查看獲取設(shè)備描述符控制傳輸過(guò)程中的數(shù)據(jù)包的數(shù)據(jù)。打印信息如下

至此,USB主機(jī)成功獲取到設(shè)備描述符。打印信息最后可以看到,主機(jī)再次復(fù)位USB,將進(jìn)入到設(shè)置地址的階段。



關(guān)鍵詞: STM32USB枚舉過(guò)

評(píng)論


技術(shù)專區(qū)

關(guān)閉