没什么发现,还是看协议吧。
于是在看SetAddress部分,过程:
Host : Setup packet : 00 05 xx 00 00 00 00 00(Out Request Standard : Set_Address : xx)
Device: Send Zero Packet
Host: ACK
Device: SetAddress
(此后 启用新地址)
Host: Setup packet : 80 06 00 01 00 00 12 00(In Request Standard: Get_Descriptor: DEVICE)
... ...
为了调试方便,在中断,读数据,写数据都通过串口返回信息,收到Device收到ACK时大把的时间都在串口返回信息,而把SetAddress操作滞后,就无法接收启用新地址后的数据,也就无法返回Host请求的信息,Host只好复位总线,重新枚举……3遍之后枚举失败……
修改程序,在Device接收到ACK后,不打印任何信息,直接设置新地址
终于枚举过去了