基于STM32的USB枚舉過(guò)程學(xué)習(xí)筆記(三)
設(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.htmCopyRoutine(),并在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è)置地址的階段。
評(píng)論