在CH376DiskReadSec這個函數(shù)里面的中斷返回值不等于USB_INT_DISK_READ,而0x00!請大家?guī)臀曳治鱿拢x謝
這個需要你重點檢查下你的中斷函數(shù)是否有問題,例如中斷函數(shù)里面的超時時間是否足夠。你是讀取第一次的64個字節(jié)可以讀取上來嗎?
中斷函數(shù)不使用超時而改為死等的方式試試。你讀幾個扇區(qū)?在扇區(qū)讀這個函數(shù)中cnt值是多少?CMD0H_DISK_RD_GO這個命令監(jiān)測下執(zhí)行了幾次?什么接口和376通訊的
cnt=1,只需要讀1個扇區(qū)。8位并口方式通訊!CMD0H_DISK_RD_GO這條命令不一定吧,有時候能執(zhí)行很多次,ERR能到2. 其中一種情況:當(dāng)err=0,我在中斷返回值處設(shè)置斷點,第一次返回0x1d,第二次返回0xff,繼續(xù)執(zhí)行能mBlockCount == 0,但此處的中斷返回為0x1d,而不是0x14. 不知道您清楚我的意思沒
我已經(jīng)更改為死等中斷了!在第一次讀取64字節(jié)的時候,都不能讀出來!cnt=1,八次數(shù)據(jù)中斷有時候返回0x1d,有時候0x00,有時候0xff。但當(dāng)有時候執(zhí)行到,操作成功處的中斷返回時,一直都是0x1d.而不是0x14
我已經(jīng)修改過來了,能讀取返回0x14成功,但現(xiàn)在的問題變成了,成功讀取1個扇區(qū)后,F(xiàn)ileDataBuf數(shù)組里面沒有數(shù)據(jù)???
文件不足一個扇區(qū)的內(nèi)容是讀不出來的,需要零時加大文件長度。打開文件后可以這樣做: NewSize = CH376GetFileSize( ); NewSize +=512; CH376WriteVar32( VAR_FILE_SIZE, NewSize ); CH376SecRead( FileDataBuf, 1, NULL ); 讀完后再把文件長度改為原先的長度,方法同上
好,非常感謝!我去試試
您好!我實驗了,結(jié)果: 1:當(dāng)我文件大小為10bytes時,即sh1 = 10; NewSize = sh1; NewSize += 512; CH376WriteVar32( VAR_FILE_SIZE, NewSize ); s = CH376SecRead( FileDataBuf, 1, NULL ); Nop(); NewSize = sh1; CH376WriteVar32( VAR_FILE_SIZE, NewSize ); Nop( ); 運行完成之后,F(xiàn)ileDataBuf里仍無數(shù)據(jù)!不知道為什么?
2:當(dāng)文件大小為13824bytes時,超過了1扇區(qū),為27扇區(qū)! 直接調(diào)用s = CH376SecRead( FileDataBuf, 27, NULL ); 對嗎?謝謝
你單片機有27個扇區(qū)大小的緩沖區(qū)嗎?你先讀取一個扇區(qū)測試下看函數(shù)返回0X14的話,那么需要看下FileDataBuf這個緩沖區(qū)里面的數(shù)據(jù)。什么叫里面無數(shù)據(jù)?是全0XFF還是全0X00。
沒有那么大呢!我改成一次1個扇區(qū)吧! 是測試的一個扇區(qū),返回0x14,然后在watch里觀察的FileDataBuf里數(shù)據(jù),全部都是0x00!!! 我文件里面內(nèi)容為0123456789
文件大小為13824bytes時,你讀一個扇區(qū)看下CH376ReadBlock這個函數(shù)執(zhí)行幾次,也就是說看下函數(shù)的0x14從哪邊返回的