沒轍了,無論怎么樣做,傳過去的總有某幾個地方變成了0x00
而且有時候程序關閉文件會出錯,說文件已經(jīng)關閉了。--0xB4
有時候出現(xiàn)錯誤說磁盤未連接,--0x82
此幾種情況有只有我發(fā)送的的過程總只是偶爾有一次,有時候17k數(shù)據(jù)能傳輸完成。誤碼17KB內也只有5個不到的0x00。
而且用并口操作的速度也不快,一次寫完17k也要1分鐘左右。
請問大家有沒有辦法解決,否則我這個電路板只能作廢,在選擇其他的方案了。
程序: /*BUS WAY*/ void mDelay1uS(void) /* 至少延時1uS,根據(jù)單片機主頻調整 */ { NOP();NOP();NOP();NOP();NOP();NOP(); }
void CH375_PORT_INIT(void) /* 由于使用通用I/O模塊并口讀寫時序,所以進行初始化 */ { XMCRA = 0x00; //external memory MCUCR = 0x81;//0x80;0x81--the same to Flash } void CH375_PORT_RETURN(void) { XMCRA = 0x00; //external memory MCUCR = 0x00; } void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫調用的子程序,向CH375寫命令 */ { mDelay1uS( ); mDelay1uS( ); /* 至少延時1uS */ CH375_CMD_PORT = mCmd; /*通過并口直接讀寫CH375而非普通I/O模擬 */ mDelay1uS( ); mDelay1uS( ); /* 至少延時2uS */ }
void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫調用的子程序,向CH375寫數(shù)據(jù) */ { CH375_DAT_PORT = mData; /*通過并口直接讀寫CH375而非普通I/O模擬 */ mDelay1uS( ); mDelay1uS( ); /* 至少延時1.2uS */ }
UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫調用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; mData =CH375_DAT_PORT; /*通過并口直接讀寫CH375而非普通I/O模擬 */ return( mData ); }
UINT8 xReadCH375Cmd( void ) /* 外部定義的被CH375程序庫調用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mCmd; mCmd =CH375_CMD_PORT; /*通過并口直接讀寫CH375而非普通I/O模擬 */ return( mCmd ); } 多次寫部分: USBCE_CLR; while (DesignFile.SectorProTime<128) { while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); do { i=CH375DiskReady( ); }while( i!= ERR_SUCCESS); 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" ); do {i = CH375FileCreate( );} while(i!=0); }else if (i==ERR_SUCCESS) { mCmdParam.ByteLocate.mByteOffset = 0xffffffff; // delay(2); i = CH375ByteLocate( ); if (i==0) { //while(i!=0); for (i=0;i<(MAX_BYTE_IO>>1);i++) { mCmdParam.ByteWrite.mByteBuffer[2*i]=0x55;//WORD_LO(FlashData[j+i]); mCmdParam.ByteWrite.mByteBuffer[2*i+1]=0x55;//WORD_HI(FlashData[j+i]); } mCmdParam.ByteWrite.mByteCount = MAX_BYTE_IO;//128 // delay(2); i = CH375ByteWrite( ); if (i==0) {//while(i!=0); DesignFile.SectorProTime++; /* mCmdParam.Modify.mFileAttr = 0xff; mCmdParam.Modify.mFileTime = 0xffff; mCmdParam.Modify.mFileDate = MAKE_FILE_DATE(2007,2,1); mCmdParam.Modify.mFileSize =MAX_BYTE_IO*(INT16U)DesignFile.SectorProTime; i=CH375FileModify(); while(i!=0); mCmdParam.Close.mUpdateLen = 0; */ mCmdParam.Close.mUpdateLen = 1; i= CH375FileClose( ); while(i!=0); } } } CH375Reset(); i=CH375LibInit( ); while( i!=0); // delay(2); }//while USBCE_SET;
修改過延時加長/縮短,手動更新文件長度,每次寫時加延時到200ms等,均無效。