在用WR_USB_DATA7命令向ch372寫數(shù)據(jù)時,數(shù)據(jù)塊長度的有效值是0至64,如果長度不為0,則單片機(jī)必須將后續(xù)數(shù)據(jù)逐個寫入CH372。但當(dāng)用計算機(jī)讀取ch372上的數(shù)據(jù)時, CH372被動地等待USB主機(jī)在需要時取走數(shù)據(jù);當(dāng)計算機(jī)執(zhí)行讀取數(shù)據(jù)函數(shù)時,如果單片機(jī)正在向ch372寫數(shù)據(jù)時,是等數(shù)據(jù)達(dá)到數(shù)據(jù)塊長度再讀取,還是可以立即讀?。?/p>
在USB主機(jī)讀取數(shù)據(jù)時,只要372上傳端點(diǎn)內(nèi)有數(shù)據(jù),就會取走,即使不滿64. 流程是這樣: 上位機(jī)先設(shè)定讀長度,然后主機(jī)去讀372的數(shù)據(jù), 1.如果沒有數(shù)據(jù),主機(jī)會不停去要,直到超時退出; 2.如果372有數(shù)據(jù),會立即取走; 2.如果中途收到未滿64字節(jié)的包,即使沒讀到讀長度指定的數(shù)據(jù),讀函數(shù)會退出;
有什么辦法可以保證每次MCU向372把數(shù)據(jù)寫完了,PC機(jī)才取數(shù)據(jù)。
ls的回復(fù)中“2.如果中途收到未滿64字節(jié)的包,即使沒讀到讀長度指定的數(shù)據(jù),讀函數(shù)會退出;” 的意思是先設(shè)定的讀長度為64,但收到的包的長度未滿64字節(jié),即使讀到的數(shù)據(jù)長度沒有64字節(jié),讀函數(shù)也會退出嗎?
ls回復(fù)中“如果372有數(shù)據(jù),會立即取走;”此時CH375ReadData函數(shù)的返回值是什么? 如果立即取走,那么返回值豈不是總在變化?
主機(jī)取走不意味著CH375READDATA函數(shù)會立即返回; 如果函數(shù)返回時,會是讀取到指定長度的數(shù)據(jù),或者超時時間已到,或者是遇到一個小于64字節(jié)的包時函數(shù)會返回,長度值會是在函數(shù)返回時已收到的數(shù)據(jù)長度,返回值會是TRUE.