在进行单片机模拟设备,进行PC和键鼠设备之间的数据处理和转发的设计。单片机类型:CH552,传输流程:PC请求-单片机向设备请求-设备回复-单片机回复
过程中,所有控制传输都是通过端口0进行传输,而按键或其他中断响应数据都是通过端口1端口2等其他中断端点进行接受和转发。在使用逻辑分析仪抓取数据分析的过程中,发现在程序内添加延时,使得部分应答在较大延时后再响应,这种情况下,PC还是可以按正确顺序处理数据包,完成通信。
推测是PC按时间顺序处理数据包。故进行了乱序测试,在描述符获取请求中添加了10ms的延时,而对于类命令,直接进行回复,这时发现虽然回复顺序并不正确,如:设备描述符请求-类命令-类命令应答回复-设备描述符回复,依然可以分辨出数据包的内容,完成通信。甚至对于描述符也乱序,如一些会需要额外描述符响应来确认设备状态的键鼠,配置描述符请求-设备描述符请求-设备描述符请求-配置描述符请求,这样也可以完成通信。(其实还想测试一下只有8位传输端口大小的情况下,一次无法传输完成完整的描述符数据,穿插回复设备描述符和配置描述符数据包的情况下的效果,一直没能找到测试出这种情况的方法)
那么问题就来了,硬件处理了URB部分报文,我在单片机上进行编程,只进行了setup令牌包和IN/OUT数据包的处理,这种情况下,PC主机是如何分辨乱序的数据是有效的数据还是无效的错误数据,以及有效的数据是对应哪一条数据的应答呢?