我發(fā)現(xiàn)一個(gè)問(wèn)題,就是用ch375在做u盤的時(shí)候,因?yàn)閏h375端點(diǎn)2是64字節(jié)的緩沖區(qū),所以每次只能接受64字節(jié),現(xiàn)在的問(wèn)題是因?yàn)槲颐看谓邮芡戤?048字節(jié)就會(huì)把數(shù)據(jù)寫(xiě)入nand flash,這樣還可以接受,問(wèn)題是nand flash需要先擦除,當(dāng)我接受完2048字節(jié)以后,我就在發(fā)送CH37xUnlockUsb();前執(zhí)行擦除nand flash的指令,這個(gè)指令需要3ms時(shí)間,擦除以后再寫(xiě)入,然后再發(fā)送CH37xUnlockUsb();繼續(xù)接受電腦發(fā)過(guò)來(lái)的剩余字節(jié)數(shù)目,這時(shí)問(wèn)題就出來(lái)了,第一次讀取ch375的緩沖區(qū)的數(shù)據(jù)的前8的字節(jié)都是錯(cuò)誤的,而后面的(2048-8)字節(jié)都正常,所以我得出的結(jié)論是,在中斷接受數(shù)據(jù)的時(shí)候是不是CH37xUnlockUsb();指令前面的延時(shí)不能太長(zhǎng),否則會(huì)出現(xiàn)問(wèn)題,是不是這樣,版主? 還有一個(gè)更加奇怪的現(xiàn)象,有時(shí)候ch375會(huì)漏掉其中的一次數(shù)據(jù),也就是64字節(jié),導(dǎo)致考入我u盤的文件不能用,ch375不是在發(fā)送CH37xUnlockUsb();指令前封鎖usb接受的嗎,怎么會(huì)丟失一次數(shù)據(jù)呢,麻煩版主解答一下,謝謝
這個(gè)和延時(shí)是沒(méi)有多大關(guān)系的,因?yàn)槟阋恢辈唤怄i的話,375一直給計(jì)算機(jī)返回NAK,計(jì)算機(jī)在無(wú)限次重試,我覺(jué)得應(yīng)該還是程序問(wèn)題,你可以這樣測(cè)試下,將你每次讀到的數(shù)據(jù)通過(guò)別的途徑顯示出來(lái),例如串口,看下你每次讀到的數(shù)據(jù)是不是都是正確的,如果是的話,那就說(shuō)明你的程序上面有問(wèn)題。
我也是這么想的,可是事實(shí)上卻是出現(xiàn)問(wèn)題了,我現(xiàn)在每次接受到512字節(jié)以后人為加3ms延時(shí)然后解鎖然后接續(xù)接受,可是現(xiàn)在每次512字節(jié)以后的第一個(gè)64字節(jié)中的前8字節(jié)全部錯(cuò)誤,不加延時(shí)就ok 這說(shuō)明什么呢?
不能人為的加解所的,我也覺(jué)的奇怪,怎么讀函數(shù)之后還要加解所命令,這個(gè)命令是不能多加,也不能少加的,會(huì)出現(xiàn)問(wèn)題的,但是你可以用CMD_RD_USB_DATA0,這個(gè)命令和CMD_RD_USB_DATA命令的唯一區(qū)別就是前面的命令讀完數(shù)據(jù)之后需要發(fā)解鎖命令,后后面的則是讀完之后就解所了,或者你給接收端點(diǎn)設(shè)置NAK也是可以的,當(dāng)你處理完之后在給接收端點(diǎn)發(fā)送一個(gè)ACK就可以了
版主誤會(huì)了,我得一時(shí)是人為加入3ms延時(shí), 解鎖當(dāng)然是讀取數(shù)據(jù)完畢自動(dòng)解說(shuō)的