[求助]求一份CH376 U盤和SD卡數(shù)據(jù)互相轉(zhuǎn)存的例程

求一份CH376 U盤和SD卡數(shù)據(jù)互相轉(zhuǎn)存的例程,謝謝

您好,使用CH376做SD卡和U盤數(shù)據(jù)互傳需要不斷的切換模式,導(dǎo)致速度比較慢,不建議這么使用。代碼可以參考該鏈接http://m.findthetime.net/index.php/bbs/thread-51696-1.html,代碼如下

UINT8 xdata buf[1024];?
//用單片機將CH376設(shè)置成讀寫SD卡模式( 模式3 )?
void CH376_SD_Mode( ){?
UINT8 s;?
xWriteCH376Cmd( CMD11_SET_USB_MODE ); /* 設(shè)備USB工作模式 */?
xWriteCH376Data( 0x03 ); //操作SD卡模式(0x03)?
mDelaymS( 1 );??
xReadCH376Data( ); //模式設(shè)置成功 應(yīng)返回操作成功狀態(tài)(0x51)?
xEndCH376Cmd( );?
for ( s = 0; s < 10; s ++ ) { /* 最長等待時間,10*50mS */?
mDelaymS( 50 );?
printf( "Ready ?\n" );?
if ( CH376DiskMount( ) == USB_INT_SUCCESS ) break; /* 初始化磁盤并測試磁盤是否就緒 */?
}?
}?

//用單片機將CH376設(shè)置成讀寫U盤模式?
void CH376_UDisk_Mode( ){?
UINT8 s;?
xWriteCH376Cmd( CMD11_SET_USB_MODE ); /* 設(shè)備USB工作模式 */?
xWriteCH376Data( 0x06 ); //0x06模式?
mDelaymS( 1 );?
xReadCH376Data( ); //模式設(shè)置成功 應(yīng)返回操作成功狀態(tài)(0x51)?
xEndCH376Cmd( );?
for ( s = 0; s < 10; s ++ ) { /* 最長等待時間,10*50mS */?
mDelaymS( 50 );?
printf( "Ready ?\n" );?
if ( CH376DiskMount( ) == USB_INT_SUCCESS ) break; /* 初始化磁盤并測試磁盤是否就緒 */?
}?
}?


UINT8 Copy_SD_TO_UDisk(PUINT8 SourName, PUINT8 TarName ){?
UINT8 s;?
UINT16 len;?
UINT32 Count,FileSize;?

CH376_SD_Mode( ); //設(shè)置成SD模式?
printf(" 讀取文件長度 \n");?
s = CH376FileOpen( SourName ); //打開文件,該文件在根目錄下?
if ( s == USB_INT_SUCCESS ){ //文件存在并且已經(jīng)被打開?
FileSize = CH376GetFileSize( ); //讀取當(dāng)前文件長度?
//mStopIfError( s );?
}else{ //源文件不存在 出錯?
printf(" no SourName \n");?
return ( s );?
}?
//以上操作主要是為了獲取源文件的 文件大小FileSize.?

Count=0;?
do{?
printf(" 打開源文件并讀出 \n");?
CH376_SD_Mode( ); //切換到SD模式?
s = CH376FileOpen( SourName ); //打開文件,該文件在根目錄下?
if (s==USB_INT_SUCCESS){ //文件存在并且已經(jīng)被打開,以字節(jié)方式移動文件指針以便讀取后續(xù)數(shù)據(jù)?
s = CH376ByteLocate( Count ); //移動到上次讀取文件的末尾?
CH376ByteRead( buf, sizeof(buf), &len ); // 以字節(jié)為單位從當(dāng)前位置讀取數(shù)據(jù)塊,請求長度同緩沖區(qū)大小,返回實際長度在ThisLen中?
Count += len; //計數(shù)已經(jīng)讀取的字節(jié)數(shù)?
//s = CH376FileClose( FALSE ); //對于讀取文件,是否關(guān)閉文件可選操作。?
mStopIfError( s );?
}else {?
printf("Open file error %02x \n",(UINT16)s);?
return s;?
}?

printf(" 打開目標(biāo)文件并寫入 \n");?
CH376_UDisk_Mode( ); //切換到U盤模式?
s = CH376FileOpen( TarName ); //打開文件,該文件在根目錄下?
if ( s == USB_INT_SUCCESS ){ //文件存在并且已經(jīng)被打開?
s = CH376ByteLocate( 0xffffffff ); //移動文件指針到尾部以便添加數(shù)據(jù)?
s = CH376ByteWrite( buf, len, NULL ); //以字節(jié)為單位向文件寫入數(shù)據(jù)?
mStopIfError( s );?
s = CH376FileClose( TRUE ); //關(guān)閉文件?
mStopIfError( s );?
}else if ( s == ERR_MISS_FILE ){ //沒有找到文件,必須新建文件?
printf( "Create\n" );?
s = CH376FileCreate( NULL ); //新建文件并打開?
mStopIfError( s );?
s = CH376ByteWrite( buf, len, NULL ); //以字節(jié)為單位向文件寫入數(shù)據(jù)?
mStopIfError( s );?
s = CH376FileClose( TRUE ); // 關(guān)閉文件?
mStopIfError( s );?
}else return s;?
}while(Count < FileSize);?
return ( 0x95 ); //文件復(fù)制成功?
}?


main(){?
UINT8 s;
Init_Device(); //設(shè)備初始化?
ES0=0; TI0=1; TXEN=0;?
mDelaymS(10); //延時10毫秒?
CH376_RSTI=0; //CH376復(fù)位?
mDelaymS(100); //延時100毫秒?
s=mInitCH376Host(); //初始化CH376?
mStopIfError(s); //如果錯誤就停止?

while (1){?
if(CH376DiskConnect() == USB_INT_SUCCESS ) { //檢查U盤是否連接,等待U盤插入?
TXEN=1;?
mDelaymS(100);?
printf(" U盤初始化并等待就緒 \n");?
for ( s = 0; s < 10; s ++ ) { //最長等待時間,10*50mS?
mDelaymS( 50 );?
printf( "Ready ?\n" );?
if(CH376DiskMount()==USB_INT_SUCCESS) break; //初始化磁盤并測試磁盤是否就緒?
}?
mDelaymS( 200 ); // 延時,可選操作,有的USB存儲器需要幾十毫秒的延時?

printf(" SD初始化并等待就緒 \n");?
CH376_SD_Mode( ); //將CH376設(shè)置成SD卡模式?
for ( s = 0; s < 10; s ++ ) { // 最長等待時間,10*50mS?
mDelaymS( 50 );?
printf( "Ready ?\n" );?
if(CH376DiskMount()==USB_INT_SUCCESS) break; //初始化磁盤并測試磁盤是否就緒?
}?

printf(" 開始復(fù)制文件 \n");?
s = Copy_SD_TO_UDisk("\\CH376HFT.C","\\CH376HFT.TXT");?
if(s == 0x95 )?
printf("copy file success \n"); else printf("copy file error %02x \n",(UINT16)s);?

printf(" 請取出U盤 \n");?
while(CH376DiskConnect()==USB_INT_SUCCESS) mDelaymS(100); //檢查U盤連接,等待U盤拔出?
TXEN=0;?
}?
//完成后LED閃爍?
mDelaymS(500);?
LED=!LED;?
}?
}?


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

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