最近使用CH552遇到一个枚举失败的问题。大概过程如下:
枚举过程中,主机请求了一个设备不存在的描述符。
实际为:`80 06 00 06 00 00 0A 00`请求描述符`USB_DESCR_TYP_QUALIF`
SETUP事务触发中断,大约22us以后,将EP0设置为STALL
SETUP事务在设备ACK以后大约2us,主机又发起了一个IN事务,由于此时EP0还没有设置为STALL,设备应答NAK
ISR中将EP0设置为STALL以后,主机再发起IN事务,设备应答STALL,然后主机重新请求设备描述符。过程如下图所示:
主机发起SETUP事务请求设备描述符,设备应答ACK并触发中断,在中断设置EP0之前,主机又发起来了一个IN事务,由于EP0还是STALL没有改变,设备应答STALL,枚举就失败了。
主要是主机的IN请求发送的太快,而MCU响应中断又太慢,有没有比较好的解决方法呢?
如果需要可以提供完整的逻辑分析仪抓包数据。
是这个问题,原作者给出了解决方案,但是感觉并不是太好。