375B讀寫U盤問題

我用375B讀寫U盤,用的是375HFM的庫我將#define EN_DISK_WRITE 1可以寫入U盤,生成文件NEWFILE.TXT時發(fā)現(xiàn)里面的數(shù)據(jù)全是零而不是讀取文件的內(nèi)容

Embest Arm EduKit II Evaluation Board

8-segment Digit LED Test Example (Please look at LED) Usb for S3C44B0x Serial Baud rate is 115200 /***************************************************************/ System Initialized. CH375 IS TEST Scode1 aah Scode2 55h

CH375_Init over !! input U disk! Ready ? Ready ? DiskSize TotalSize = 62 MB Open Read Size=15863, Len=8192, Sec=16 Close Line 1: Create Write Modify Close output U disk!

UINT8 i, c, SecCount; UINT8 td; UINT16 NewSize, count; /* 因為RAM容量有限,所以NewSize限制為16位,實際上如果文件較大,應該分幾次讀寫并且將NewSize改為UINT32以便累計 */ UINT8 *pCodeStr; uart_printf("Usb for S3C44B0x\n"); uart_printf("Serial Baud rate is %d\n", SERIAL_BAUD); uart_printf(table_begin); uart_printf("System Initialized.\n"); mDelaymS( 50 ); /* 延時100毫秒 */ uart_printf( "CH375 IS TEST \n" ); CH375Reset( ); // mDelaymS(50 ); /* 延時50ms */ xWriteCH375Cmd( 0x06 ); //發(fā)送測試命令 xWriteCH375Data( 0x55 ); td=xReadCH375Data( ); //返回數(shù)據(jù) uart_printf("Scode1 %xh\n", td); xWriteCH375Cmd( 0x06 ); //發(fā)送測試命令 xWriteCH375Data( 0xaa );//發(fā)送測試碼 td=xReadCH375Data( ); //返回數(shù)據(jù) uart_printf("Scode2 %xh\n", td); i = CH375LibInit( ); /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ mStopIfError( i ); /* 其它電路初始化 */ CH375_PORT_INIT( ); uart_printf("\nCH375_Init over !!"); while ( 1 ) { uart_printf( "\ninput U disk!\n" ); while ( CH375DiskStatus != DISK_CONNECT ) /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ xQueryInterrupt( ); mDelaymS( 10 );

/* 檢查U盤是否準備好,有些U盤不需要這一步,但是某些U盤必須要執(zhí)行這一步才能工作 */ for ( i = 0; i < 10; i ++ ) { /* 有的U盤總是返回未準備好,不過可以被忽略 */ uart_printf( "Ready ?\n" ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤是否準備好 */ } /* 查詢磁盤物理容量 */ uart_printf( "DiskSize\n" ); i = CH375DiskSize( ); mStopIfError( i ); uart_printf( "TotalSize = %d MB \n", (unsigned int)( mCmdParam.DiskSize.mDiskSizeSec >> 11 ) );

/* 讀取原文件 */ uart_printf( "Open\n" ); strcpy( (char *)mCmdParam.Open.mPathName, "\\C51\\CH375HFT.C" ); /* 文件名,該文件在C51子目錄下 */ i = CH375FileOpen( ); /* 打開文件 */ if ( i == ERR_MISS_DIR || i == ERR_MISS_FILE ) { /* 沒有找到文件 */ /* 列出文件 */ if ( i == ERR_MISS_DIR ) pCodeStr = (UINT8 *)"\\*"; /* C51子目錄不存在則列出根目錄下的文件 */ else pCodeStr = (UINT8 *)"\\C51\\CH375*"; /* CH375HFT.C文件不存在則列出\C51子目錄下的以CH375開頭的文件 */ uart_printf( "List file %s\n", pCodeStr ); for ( c = 0; c < 255; c ++ ) { /* 最多搜索前255個文件 */ strcpy( (char *)mCmdParam.Open.mPathName, (char *)pCodeStr ); /* 搜索文件名,*為通配符,適用于所有文件或者子目錄 */ i = strlen( (char const *)mCmdParam.Open.mPathName ); /* 計算文件名長度,以處理文件名結(jié)束符 */ mCmdParam.Open.mPathName[ i ] = c; /* 根據(jù)字符串長度將結(jié)束符替換為搜索的序號,從0到255 */ i = CH375FileOpen( ); /* 打開文件,如果文件名中含有通配符*,則為搜索文件而不打開 */ if ( i == ERR_MISS_FILE ) break; /* 再也搜索不到匹配的文件,已經(jīng)沒有匹配的文件名 */ if ( i == ERR_FOUND_NAME ) { /* 搜索到與通配符相匹配的文件名,文件名及其完整路徑在命令緩沖區(qū)中 */ uart_printf( " match file %03d#: %s\n", (unsigned int)c, mCmdParam.Open.mPathName ); /* 顯示序號和搜索到的匹配文件名或者子目錄名 */ continue; /* 繼續(xù)搜索下一個匹配的文件名,下次搜索時序號會加1 */ } else { mStopIfError( i ); break; } } pCodeStr = (UINT8 *)"找不到/C51/CH375HFT.C文件\xd\n"; for ( i = 0; i != 255; i ++ ) { if ( ( FILE_DATA_BUF[i] = *pCodeStr ) == 0 ) break; pCodeStr++; } NewSize = i; /* 新文件的長度 */ SecCount = 1; /* (NewSize+511)/512, 計算文件的扇區(qū)數(shù),因為讀寫是以扇區(qū)為單位的 */ } else { /* 找到文件或者出錯 */ mStopIfError( i ); /* printf( "Query\n" ); i = CH375FileQuery( ); mStopIfError( i );*/ uart_printf( "Read\n" ); if ( CH375vFileSize > FILE_DATA_BUF_LEN ) { /* 由于演示板用的62256只有32K字節(jié),其中CH375子程序用512字節(jié),所以只讀取不超過63個扇區(qū),也就是不超過32256字節(jié) */ SecCount = FILE_DATA_BUF_LEN / 512; /* 由于演示板用的62256只有32K字節(jié),其中CH375子程序用512字節(jié),所以只讀取不超過63個扇區(qū),也就是不超過32256字節(jié) */ NewSize = FILE_DATA_BUF_LEN; } else { /* 如果原文件較小,那么使用原長度 */ /* (CH375vFileSize+511)/512, 計算文件的扇區(qū)數(shù),因為讀寫是以扇區(qū)為單位的,先加511是為了讀出文件尾部不足1個扇區(qū)的部分 */ SecCount = ( CH375vFileSize + 511 ) >> 9; NewSize = (UINT16)CH375vFileSize; /* 原文件的長度 */ } uart_printf( "Size=%ld, Len=%d, Sec=%d\n", CH375vFileSize, NewSize, (UINT16)SecCount ); mCmdParam.Read.mSectorCount = SecCount; /* 讀取全部數(shù)據(jù),如果超過60個扇區(qū)則只讀取60個扇區(qū) */ /* current_buffer = & FILE_DATA_BUF[0]; 如果文件讀寫的數(shù)據(jù)的復制方式為"外部子程序",那么需要設(shè)置存放數(shù)據(jù)的緩沖區(qū)的起始地址 */ CH375vFileSize += 511; /* 默認情況下,以扇區(qū)方式讀取數(shù)據(jù)時,無法讀出文件尾部不足1個扇區(qū)的部分,所以必須臨時加大文件長度以讀取尾部零頭 */ i = CH375FileReadX( ); /* 從文件讀取數(shù)據(jù) */ CH375vFileSize -= 511; /* 恢復原文件長度 */ mStopIfError( i ); /* 如果文件比較大,一次讀不完,可以再調(diào)用CH375FileRead繼續(xù)讀取,文件指針自動向后移動 while ( 1 ) { c = 32; 每次讀取32個扇區(qū) mCmdParam.Read.mSectorCount = c; 指定讀取的扇區(qū)數(shù) CH375FileRead(); 讀完后文件指針自動后移 處理數(shù)據(jù) if ( mCmdParam.Read.mSectorCount < c ) break; 實際讀出的扇區(qū)數(shù)較小則說明文件已經(jīng)結(jié)束 }

如果希望從指定位置開始讀寫,可以移動文件指針 mCmdParam.Locate.mSectorOffset = 3; 跳過文件的前3個扇區(qū)開始讀寫 i = CH375FileLocate( ); mCmdParam.Read.mSectorCount = 10; CH375FileRead(); 直接讀取從文件的第(512*3)個字節(jié)開始的數(shù)據(jù),前3個扇區(qū)被跳過

如果希望將新數(shù)據(jù)添加到原文件的尾部,可以移動文件指針 i = CH375FileOpen( ); mCmdParam.Locate.mSectorOffset = 0xffffffff; 移到文件的尾部,以扇區(qū)為單位,如果原文件是3字節(jié),則從512字節(jié)開始添加 i = CH375FileLocate( ); mCmdParam.Write.mSectorCount = 10; CH375FileWrite(); 在原文件的后面添加數(shù)據(jù) */ uart_printf( "Close\n" ); i = CH375FileClose( ); /* 關(guān)閉文件 */ mStopIfError( i ); i = FILE_DATA_BUF[100]; FILE_DATA_BUF[100] = 0; /* 置字符串結(jié)束標志,最多顯示500個字符 */ uart_printf( "Line 1: %s\n", FILE_DATA_BUF ); FILE_DATA_BUF[100] = i; /* 恢復原字符 */ for ( count=0; count < NewSize; count ++ ) { /* 將文件中的小寫字符轉(zhuǎn)換為大寫 */ c = FILE_DATA_BUF[ count ]; if ( c >= 'a' && c <= 'z' ) FILE_DATA_BUF[ count ] = c - ( 'a' - 'A' ); } }

//#ifdef EN_DISK_WRITE /* 子程序庫支持寫操作 */ /* 產(chǎn)生新文件 */ uart_printf( "Create\n" ); strcpy( (char *)mCmdParam.Create.mPathName, "\\NEWFILE.TXT" ); /* 新文件名,在根目錄下 */ i = CH375FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ mStopIfError( i ); uart_printf( "Write\n" ); mCmdParam.Write.mSectorCount = SecCount; /* 寫入所有扇區(qū)的數(shù)據(jù) */ /* current_buffer = & FILE_DATA_BUF[0]; 如果文件讀寫的數(shù)據(jù)的復制方式為"外部子程序",那么需要設(shè)置存放數(shù)據(jù)的緩沖區(qū)的起始地址 */ i = CH375FileWrite( ); /* 向文件寫入數(shù)據(jù) */ mStopIfError( i ); uart_printf( "Modify\n" ); mCmdParam.Modify.mFileAttr = 0xff; /* 輸入?yún)?shù): 新的文件屬性,為0FFH則不修改 */ mCmdParam.Modify.mFileTime = 0xffff; /* 輸入?yún)?shù): 新的文件時間,為0FFFFH則不修改,使用新建文件產(chǎn)生的默認時間 */ mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( 2004, 5, 18 ); /* 輸入?yún)?shù): 新的文件日期: 2004.05.18 */ mCmdParam.Modify.mFileSize = NewSize; /* 輸入?yún)?shù): 如果原文件較小,那么新的文件長度與原文件一樣長,否則被RAM所限,如果文件長度大于64KB,那么NewSize必須為UINT32 */ i = CH375FileModify( ); /* 修改當前

是讀取的數(shù)據(jù)為0呢還是寫入的時候變?yōu)?了?如果你讀出來的數(shù)據(jù)就是0的話很有可能是你的RAM分配出現(xiàn)了問題.你分兩次實驗看看,只讀的時候監(jiān)視數(shù)據(jù),然后將緩沖區(qū)賦值寫入U盤


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

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