新聞中心

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

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

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

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

本文引用地址:http://2s4d.com/article/201611/318463.htm

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

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

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

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

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

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



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

評論


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

關(guān)閉