原帖:
https://www.wch.cn/bbs/thread-113014-1.html
微软的RNDIS USB虚拟网卡协议和微软一样臃肿,用到4个端点,恨不得把device累死,nnd
1:SETUP 端点0 OUT 0x21 00 00 00 00 00 xx xx 发送数据到device,device通过SETUP 0xA1 01 ..... 返回到host
windows每隔 3秒 就会poll一次,交换一次数据,保持网络连接,就是这个3秒的保持连接造成的USB卡死,但真正原因是OUT3大批量数据占的时间过长,SETUP无法响应造成的
2:IN1中断传输,一有变化就需要发1次8byte消息,既然用到中断上传消息,为什么还用SETUP 发消息保持连接,多此一举,nnd,微软家有钱,就这样豪横,左手一个洛基亚,右手一个摩托罗拉,爱怎么玩就怎么玩
3:IN2 bulk传输,device网络数据加RNDIS头 批量上传到windows
4:OUT3 bulk传输,host网络数据加RNDIS头 批量下发到device
这样一套组合拳下来,device的OUT3最忙,频繁中断,有可能没有退出中断,Windows下发SETUP OUT 0x21 00 ...,得不到响应,造成USB卡死
以上原因只是猜测,因为测试过,如果OUT3只是copy数据,出错的机会大大减小,如果多加几行判断代码,出错机会增加。数据量小,基本不会出错,比如ping,ping几小时都正常
CH579的RB_UC_INT_BUSY初始化已加入,在中断期间中断标志未清除前自动返回NAK,搞不懂SETUP 0x21会暂停几秒钟,再怎么样OUT3中断里面也达不到秒级别,OUT3中断里面最多26ms,一般1.2ms左右
帮忙分析分析原因
有什么思路可以解决OUT3怎样和SETUP OUT冲突问题