使用某个双向端点来通讯,比如端点2,我们记为EP2_OUT和EP2_IN,分别处理主机的OU
T和IN请求。设备收到主机OUT请求以后,应答ACK,然后设置EP2_OUT的TF中断标志,中
断延迟大约6us或者更少一些。
如果在6us中断延迟时间内没有EP2_IN的IN请求,或者即使有IN请求,设备EP2_IN没有准
备好,应答NAK,那一切正常。我的应用中实际测试EP2_OUT响应ACK以后,大约0.6us以
后主机就会发送IN请求,刚好落在6us的中断延迟时间内。这时候如果设备EP2_IN端点准
备好,那么就开始响应EP2_IN请求,给主机发送数据,发送完成主机应答ACK,触发EP2
_IN的TF中断标志,正常触发中断,这个中断会把它前面EP2_OUT的中断标志冲掉,导致
丢失前面的EP2_OUT传输完成中断。
usb的固件库代码我看过是可以同时处理同一个端点OUT和IN两个TF中断标志的,所以问
题大概率在USB硬件。目前该问题还未得到官方确认。这个问题在USB实际通讯速率不高
的问题,极少出现,大流量的通讯的时候会出现,概率几十万分之一吧,没有什么规律
,所以定位起来十分困难。
--
FROM 222.90.31.*