使用某个双向端点来通讯,比如端点2,我们记为EP2_OUT和EP2_IN,分别处理主机的OUT和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实际通讯速率不高的问题,极少出现,大流量的通讯的时候会出现,概率几十万分之一吧,没有什么规律,所以定位起来十分困难。
离线
现在这种知名度稍高的单片机基本是供货、价格双不稳,搞它干嘛呢。
用SOC,如ESP32-S2,BL702啥的。
因为它有USB和两路CAN
离线