(急救)U盤寫數(shù)據(jù)不正確[求助]

我用375寫數(shù)據(jù)到U盤,如果片選后一次性寫進去4096×4個字節(jié),沒有問題。 但實際應用中我需要分多次寫數(shù)據(jù),退出一次讀寫后更新數(shù)據(jù)后再進入寫程序(改變了片選信號,每次都打開和關閉文件)。發(fā)現(xiàn)幾個問題如下: 1》每次必須先初始化一下375才能檢測到中斷引腳開始寫數(shù)據(jù)。否則中斷引腳一直為高。

2》2次寫入之后發(fā)覺出現(xiàn)找不到文件的錯誤代碼0x42,此時再去寫當然不對了。每次完成后加200ms的延時也不對。

請問這是什么原因,或者可否提供這樣斷續(xù)讀寫的例子?

我懷疑是讀寫的時序有些問題,你的單片機與CH375是采用什么方式連接的?片選信號改變了是指什么?可以的話能否將你的三個讀寫子程序貼出來看下. 至于讀寫的例子可以給你提供一個COPY文件的例子


void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫命令 */ { mDelay1uS( ); mDelay1uS( ); /* 至少延時1uS */ CH375_CMD_PORT = mCmd; /*通過并口直接讀寫CH375而非普通I/O模擬 */ mDelay1uS( ); mDelay1uS( ); /* 至少延時2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫數(shù)據(jù) */ { CH375_DAT_PORT = mData; /*通過并口直接讀寫CH375而非普通I/O模擬 */ mDelay1uS( ); mDelay1uS( ); /* 至少延時1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; mData =CH375_DAT_PORT; /*通過并口直接讀寫CH375而非普通I/O模擬 */ return( mData ); }

UINT8 xReadCH375Cmd( void ) /* 外部定義的被CH375程序庫調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mCmd; mCmd =CH375_CMD_PORT; /*通過并口直接讀寫CH375而非普通I/O模擬 */ return( mCmd ); } /*多次寫數(shù)據(jù)函數(shù)*/

USBCE_CLR; while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); do { i=CH375DiskReady( ); }while( i!= ERR_SUCCESS); while (DesignFile.SectorProTime<16) {

strcpy( (char *)mCmdParam.Open.mPathName, "1.TXT" ); delay(10); i = CH375FileOpen( ); /*if (i == ERR_MISS_DIR || i == ERR_MISS_FILE) { strcpy( (char *)mCmdParam.Open.mPathName, "1.TXT" ); i = CH375FileCreate( ); while(i!=0); }else */if (i==ERR_SUCCESS) { mCmdParam.ByteLocate.mByteOffset = 0xffffffff; i = CH375ByteLocate( ); while(i!=0); delay(10); for (i=0;i<(MAX_BYTE_IO>>1);i++) { mCmdParam.ByteWrite.mByteBuffer[2*i]=0x00;//WORD_LO(FlashData[j+i]); mCmdParam.ByteWrite.mByteBuffer[2*i+1]=0x01;//WORD_HI(FlashData[j+i]); } mCmdParam.ByteWrite.mByteCount = MAX_BYTE_IO;//128 i = CH375ByteWrite( ); delay(10); while(i!=0); DesignFile.SectorProTime++; mCmdParam.Close.mUpdateLen = 1; while(CH375FileClose( )!=0); } CH375Reset(); while(CH375LibInit( ) !=0); delay(10); }//while USBCE_SET;

能不能提供多次讀寫的例子?。?/p>


strcpy( (char *)mCmdParam.Open.mPathName, "1.TXT" ); 改為 strcpy( (char *)mCmdParam.Open.mPathName, "\\1.TXT" ); 試下看試下


老大,你真厲害,終于OK,明天再來分析原因。


一般情況下確實可以寫了,但是有時候會出現(xiàn)0x82(磁盤尚未連接,可能磁盤已經(jīng)斷開 )的錯誤,然后寫的文件大小已經(jīng)正確了,但是在電腦上還是打不開。 why? 另外文件名前面加\\表什么?


對U盤的供電一定要穩(wěn)定,在寫的過程中不能將盤拔除. 加\\表示每次都從跟目錄操作,也就是每次都先找到1.TXT,再寫數(shù)據(jù).如果不加,每次都會從它次及目錄開始操作,也就是第一次打開的是1.TXT文件,第二次就變成要打開\1.TXT\1.TXT文件,一直找下去,這個路徑肯定不存在,所以就出現(xiàn)42的錯誤.


哦,謝謝,這個在哪些資料上有說明沒有? 因為我前面沒有加\\可以操作兩次,按你所說應該只能操作一次???


CH375EVT/PUB/CH375HF.PDF,在CH375FileOpen()子程序中有介紹. 第一次是正確寫進去了,寫完之后再打開文件,應該就會返回0x42錯誤碼了


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频