CH375在進(jìn)行128個(gè)字節(jié)的數(shù)據(jù)上傳時(shí),在PC機(jī)端的buffer中只保存在前64個(gè)mReadBuf[]里,而且是覆蓋式的保存。是下位機(jī)的問題嗎?還是說PC機(jī)需要對mReadBuf[]進(jìn)行什么配置。在下傳超過64字節(jié)的時(shí)候,PC機(jī)就是自動將大數(shù)據(jù)分成小數(shù)據(jù)包的啊。
有找到資料上說“下位機(jī)每次發(fā)過一組數(shù)據(jù)后,沒有查看上位機(jī)是否接收就發(fā)第2組。假如第一次還沒被上傳就寫入了第二組,數(shù)據(jù)被覆蓋掉。”也就是說上位機(jī)的程序在執(zhí)行完第一個(gè)數(shù)據(jù)包的數(shù)據(jù)后還應(yīng)該可以繼續(xù)接收到下位機(jī)上傳過來的數(shù)據(jù)是這個(gè)意思吧。
這句話的意思是如果你上傳的第一包數(shù)據(jù)沒有被主機(jī)取走的話就傳輸?shù)诙?,那肯定第一包的?shù)據(jù)就被覆蓋掉。你這個(gè)問題我建議用bushound軟件抓一下USB數(shù)據(jù)包,是到底是下位機(jī)還是軟件的問題。
CH375端點(diǎn)上傳完成后后會產(chǎn)生端點(diǎn)上傳中斷,128字節(jié)分2次上傳理論上會產(chǎn)生2次上傳中斷,你看中斷狀態(tài)是否正確。
在下位機(jī)可以看到有兩個(gè)中斷標(biāo)志,但是這是在第一包數(shù)據(jù)送到數(shù)據(jù)口時(shí)運(yùn)行VC6.0程序才能看到的??墒堑诙鼣?shù)據(jù)讀不到上位機(jī)里。
下位機(jī)是每次上傳數(shù)據(jù)的最大程序是64個(gè)字節(jié),但是PC端的使用CH375ReadData一次可最大存儲4096個(gè)字節(jié)。有什么辦法可以將所有數(shù)據(jù)都上傳結(jié)束后PC端再讀數(shù)據(jù)
上位機(jī)端你可以把數(shù)據(jù)存儲到緩沖區(qū),然后后面有數(shù)據(jù)的時(shí)候繼續(xù)從后面插入,一包完整的數(shù)據(jù)上傳結(jié)束后,你可以在自定義一個(gè)結(jié)束字節(jié),然后上位機(jī)把緩沖區(qū)里的數(shù)據(jù)讀走處理就行了,當(dāng)然這只是我給的一個(gè)建議,你可以自己看看有么有更好的方法。
我在使用debug372測試自己編寫的下位機(jī)數(shù)據(jù)上傳程序(2個(gè)數(shù)據(jù)包)。第一個(gè)數(shù)據(jù)包上傳成功有0Ah中斷標(biāo)志后,在debug372中“清除數(shù)據(jù)”,接著運(yùn)行第二個(gè)數(shù)據(jù)包的上傳,但是此時(shí)沒有上傳第二個(gè)數(shù)據(jù)包。兩個(gè)數(shù)據(jù)上傳的程序一樣。每次運(yùn)行程序的時(shí)候都需要對硬件設(shè)備進(jìn)行連接,那是應(yīng)該在第二段數(shù)據(jù)上傳程序中加上對硬件設(shè)備的什么設(shè)置嗎?但是只有一個(gè)硬件復(fù)位?。?!抓狂
之前發(fā)給你的郵件里還有一個(gè)TEST.C的程序,就是通過DEBUG372下傳數(shù)據(jù),然后下位機(jī)取反在返回的,你的收發(fā)可以參考那個(gè)來進(jìn)行,另外,端點(diǎn)的數(shù)據(jù)在發(fā)送之前一定要把數(shù)據(jù)準(zhǔn)備好,比如第一包數(shù)據(jù)發(fā)送完成后你要把第二包要發(fā)送的數(shù)據(jù)準(zhǔn)備好,另外你可用一款上位機(jī)軟件BUSHOUND的上位機(jī)軟件(你百度一下)來監(jiān)測USB的數(shù)據(jù),看看下位機(jī)是否上傳了第二包數(shù)據(jù)。
我按照TEST.C的程序改了,小數(shù)據(jù)的收發(fā)是正確的。
使用BUSHOUND,只能讀到第一個(gè)數(shù)據(jù)包的數(shù)據(jù),讀不到第二包的數(shù)據(jù)。我把程序又改回我最一開始沒有判斷0Ah的程序,覆蓋式的只能讀到第二個(gè)數(shù)據(jù)包的數(shù)據(jù)。我是想問,沒有判斷是否傳輸成功,數(shù)據(jù)是覆蓋式的,那為什么沒有第一個(gè)數(shù)據(jù)包的數(shù)據(jù)顯示呢?
這個(gè)應(yīng)該是正常的,你不判斷第一包發(fā)送成功,就發(fā)送第二包的話當(dāng)然第一包就被覆蓋掉了,你在0x0A后應(yīng)該把第二包數(shù)據(jù)準(zhǔn)備好,這樣第二包數(shù)據(jù)就能發(fā)出來了。
我就是覺得我現(xiàn)在應(yīng)該在第二次向buffer中存入數(shù)據(jù)之前加一些程序,可是BUSHOUND顯示完第一包上傳數(shù)據(jù)之后接著運(yùn)行程序BUSHOUND就不再有任何的變化了。糾結(jié)啊