基于STM32的USB枚舉過程學習筆記(三)
設備在收到該請求以后,首先進行解析,根據請求中的0x40表示該控制傳輸有數據過程,因此進入到Data_Setup0()函數。該函數根據請求的不同描述符,執行不同的回調函數
本文引用地址:http://www.104case.com/article/201611/318463.htmCopyRoutine(),并在DataStageIn()函數中把要發送給主機的描述符填入USB緩沖區,等待USB主機發送IN令牌包。
主機在建立過程最后收到ACK以后,發送IN令牌包,從而進入到數據過程。在CTR_LP()函數中判斷是IN0中斷后,進入In0_Process()函數。在數據過程將之前填在USB緩沖器的設備描述符發給主機,并等待主機的應答。
主機在確認接收到的設備描述符沒有出錯后,就會返回一個0數據長度的確認包,即控制傳輸的狀態過程。在CTR_LP()函數中判斷是OUT0中斷,進入Out0_Process()函數,由于在狀態過程,所以調用回調函數Process_Status_OUT()。
下面和上篇一樣,對照著USB分析儀捕捉的數據分析獲取設備描述符這次控制傳輸的數據過程和狀態過程。
下面通過串口打印信息查看獲取設備描述符控制傳輸過程中的數據包的數據。打印信息如下
至此,USB主機成功獲取到設備描述符。打印信息最后可以看到,主機再次復位USB,將進入到設置地址的階段。
評論