基于STM32的USB枚舉過程學(xué)習(xí)筆記(三)
設(shè)備在收到該請求以后,首先進行解析,根據(jù)請求中的0x40表示該控制傳輸有數(shù)據(jù)過程,因此進入到Data_Setup0()函數(shù)。該函數(shù)根據(jù)請求的不同描述符,執(zhí)行不同的回調(diào)函數(shù)
本文引用地址:http://2s4d.com/article/201611/318463.htmCopyRoutine(),并在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è)置地址的階段。
評論