就簡單的新建一個TXT文件,然后寫入兩三行文字,都基本上很少一次就成功的!
錯誤的主要現(xiàn)象是,U盤的數(shù)據(jù)燈的在不停的閃,閃爍的亮度低,速度超快,通常閃了就不會停下來! 我用的MCU是AVR M16,使用庫函數(shù),字節(jié)方式,使用8M內(nèi)部時鐘,部分程序是這樣的:
void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫命令 */ { mDelay1uS( ); mDelay1uS( ); mDelay1uS( ); /* 至少延時1uS */ PORTD |= 0x17; PORTC = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ DDRC = 0xFF; /* 并口D0-D7輸出 */ PORTD &=~(1< PORTD &=~(1< DDRC = 0xFF; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ mDelay1uS( ); PORTD |= 0x17; /* 輸出無效的控制信號, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */ DDRC = 0x00; /* 禁止數(shù)據(jù)輸出 */ //PORTD &= 0xFB; /* 輸出A0=0; 可選操作 */ mDelay1uS( ); mDelay1uS( ); mDelay1uS( ); /* 至少延時2uS */ }
void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫數(shù)據(jù) */ { PORTC = mData; /* 向CH375的并口輸出數(shù)據(jù) */ DDRC = 0xFF; /* 并口D0-D7輸出 */ PORTD |= 0x17; PORTD&=~(1< PORTD&=~(1< PORTD&=~(1< DDRC = 0xFF; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ mDelay1uS( ); PORTD|= 0x17; /* 輸出無效的控制信號, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ DDRC = 0x00; /* 禁止數(shù)據(jù)輸出 */ //mDelay1uS( ); mDelay1uS( ); mDelay1uS( ); /* 至少延時1.2uS */ }
UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; //mDelay1uS( ); mDelay1uS( ); mDelay1uS( ); /* 至少延時1.2uS */ PORTD |= 0x17; DDRC = 0x00; /* 數(shù)據(jù)輸入 */ PORTD &=~(1< PORTD &=~(1< PORTD &=~(1< DDRC = 0x00; DDRC = 0x00; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ mDelay1uS( ); mData = PINC; /* 從CH375的并口PA輸入數(shù)據(jù) */ PORTD |= 0x17; /* 輸出無效的控制信號, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ mDelay1uS( ); return( mData ); }
主函數(shù)部分: CH375_PORT_INIT(); DELAYMS(1); CH375Reset(); DELAYMS(1); while(CH375LibInit()!=ERR_SUCCESS); while(CH375DiskConnect()!=ERR_SUCCESS){ DELAYMS(100); }
strcpy((char *)mCmdParam.Create.mPathName,"/ABC.TXT"); while(CH375FileCreate()!=ERR_SUCCESS); pCodeStr = (UINT8 *)"2009年4月8日 星期三XXXXXXXXXXXXXXXXXXXXXXXXXXX"; while( 1 ) { for ( i=0; i c = *pCodeStr; mCmdParam.ByteWrite.mByteBuffer[i] = c; if ( c == 0 ) break; pCodeStr++; } if ( i == 0 ) break; mCmdParam.ByteWrite.mByteCount = i; while(CH375ByteWrite( )!=ERR_SUCCESS); } mCmdParam.Close.mUpdateLen = 1; while(CH375FileClose()!=ERR_SUCCESS);
電路圖按照REAME文檔第三頁2.4.2的參考圖(上面那個)!!