原帖:
http://www.findthetime.net/bbs/thread-113014-1.html
微軟的RNDIS USB虛擬網(wǎng)卡協(xié)議和微軟一樣臃腫,用到4個端點,恨不得把device累死,nnd
1:SETUP 端點0? OUT 0x21 00 00 00 00 00 xx xx 發(fā)送數(shù)據(jù)到device,device通過SETUP 0xA1 01 ..... 返回到host
windows每隔 3秒 就會poll一次,交換一次數(shù)據(jù),保持網(wǎng)絡連接,就是這個3秒的保持連接造成的USB卡死,但真正原因是OUT3大批量數(shù)據(jù)占的時間過長,SETUP無法響應造成的
2:IN1中斷傳輸,一有變化就需要發(fā)1次8byte消息,既然用到中斷上傳消息,為什么還用SETUP 發(fā)消息保持連接,多此一舉,nnd,微軟家有錢,就這樣豪橫,左手一個洛基亞,右手一個摩托羅拉,愛怎么玩就怎么玩
3:IN2 bulk傳輸,device網(wǎng)絡數(shù)據(jù)加RNDIS頭 批量上傳到windows
4:OUT3 bulk傳輸,host網(wǎng)絡數(shù)據(jù)加RNDIS頭 批量下發(fā)到device
這樣一套組合拳下來,device的OUT3最忙,頻繁中斷,有可能沒有退出中斷,Windows下發(fā)SETUP OUT 0x21 00 ...,得不到響應,造成USB卡死
以上原因只是猜測,因為測試過,如果OUT3只是copy數(shù)據(jù),出錯的機會大大減小,如果多加幾行判斷代碼,出錯機會增加。數(shù)據(jù)量小,基本不會出錯,比如ping,ping幾小時都正常
CH579的RB_UC_INT_BUSY初始化已加入,在中斷期間中斷標志未清除前自動返回NAK,搞不懂SETUP 0x21會暫停幾秒鐘,再怎么樣OUT3中斷里面也達不到秒級別,OUT3中斷里面最多26ms,一般1.2ms左右
幫忙分析分析原因
有什么思路可以解決OUT3怎樣和SETUP OUT沖突問題
?