最近使用CH552遇到一個(gè)枚舉失敗的問題。大概過程如下:
枚舉過程中,主機(jī)請求了一個(gè)設(shè)備不存在的描述符。
實(shí)際為:`80 06 00 06 00 00 0A 00`請求描述符`USB_DESCR_TYP_QUALIF`
SETUP事務(wù)觸發(fā)中斷,大約22us以后,將EP0設(shè)置為STALL
SETUP事務(wù)在設(shè)備ACK以后大約2us,主機(jī)又發(fā)起了一個(gè)IN事務(wù),由于此時(shí)EP0還沒有設(shè)置為STALL,設(shè)備應(yīng)答NAK
ISR中將EP0設(shè)置為STALL以后,主機(jī)再發(fā)起IN事務(wù),設(shè)備應(yīng)答STALL,然后主機(jī)重新請求設(shè)備描述符。過程如下圖所示:
主機(jī)發(fā)起SETUP事務(wù)請求設(shè)備描述符,設(shè)備應(yīng)答ACK并觸發(fā)中斷,在中斷設(shè)置EP0之前,主機(jī)又發(fā)起來了一個(gè)IN事務(wù),由于EP0還是STALL沒有改變,設(shè)備應(yīng)答STALL,枚舉就失敗了。
主要是主機(jī)的IN請求發(fā)送的太快,而MCU響應(yīng)中斷又太慢,有沒有比較好的解決方法呢?
如果需要可以提供完整的邏輯分析儀抓包數(shù)據(jù)。