CH375讀大文件

讀小文件的時候,我設(shè)置: #define FILE_DATA_BUF_LEN 0x2000 相當(dāng)于是8K的大小,即16個扇區(qū)數(shù)據(jù) 當(dāng)文件比較大(比如396K)的時候,我采用了一直讀寫,知道文件讀完為止,函數(shù)如下: while ( 1 ) {    c = FILE_DATA_BUF_LEN?。担保?    mCmdParam.Read.mSectorCount = c; // 指定讀取的扇區(qū)數(shù)    CH375FileRead(); //讀完后文件指針自動后移處理數(shù)據(jù)    if ( mCmdParam.Read.mSectorCount < c )      break; //實際讀出的扇區(qū)數(shù)較小則說明文件已經(jīng)結(jié)束 } 可是循環(huán)幾次就死掉了,程序死在了: void xQueryInterrupt( void ) /* 查詢中斷狀態(tài),等待硬件中斷 */ { while ( CH375IntStatus == 0 ); /* 子程序庫調(diào)用該子程序之前CH375IntStatus=0,硬件中斷后,由中斷服務(wù)程序置為非0的實際中斷狀態(tài)后返回 */ }函數(shù)里面,應(yīng)該是沒有檢測到中斷了!

如果文件比較小的話,都很正常!

請問各位,這個是什么東西引起的,是不是我的程序有問題? 希望大家能幫幫忙,非常感謝!

你用的是模擬并口吧,會不會是你的三個讀寫子程序的延時上存在點問題。


模擬并口??? 我采用的是并口方式?。? 你是說 /********************************************************************* * 功 能: 寫操作后延時 * 入口參數(shù): 無 * 出口參數(shù): 無 * 作 者: 陳愛華 2007-01-17 *********************************************************************/ #ifndef NO_DEFAULT_DELAY_WRITE /* 在應(yīng)用程序中定義NO_DEFAULT_DELAY_WRITE可以禁止默認(rèn)的寫操作后延時程序,然后用自行編寫的程序代替它 */ void xDelayAfterWrite(void) { INT32U count; for (count = 5000; count != 0; count --); /* 延時200uS左右 */ } #endif//NO_DEFAULT_DELAY_WRITE

/********************************************************************* * 功 能: 延時100uS * 入口參數(shù): 無 * 出口參數(shù): 無 * 作 者: 陳愛華 2007-01-17 *********************************************************************/ #ifndef NO_DEFAULT_DELAY_100US /* 在應(yīng)用程序中定義NO_DEFAULT_DELAY_100US可以禁止默認(rèn)的延時100uS子程序,然后用自行編寫的程序代替它 */ void xDelay100uS(void) { INT32U count; for (count = 2500; count != 0; count--); /* 延時100uS,2x20nS@50MHz */ } #endif //NO_DEFAULT_DELAY_100US 延時有問題嗎?


是延時太短的了嗎?


會不會是你單片機的運行速度太快了啊,你能不能將晶振換小點試一試。因為模擬并口的話存在這因為三個讀寫子程序延時不當(dāng)會出現(xiàn)這問題。


對于ARM的例子我們提供的都是模擬并口的,你說你是直接掛到總線的,能不能把你的三個讀寫子程序xWriteCH375Cmd、xWriteCH375Data、xReadCH375Data以及這三個函數(shù)中用到的延時程序,發(fā)出來看一下。


#define CH375Cmd *(volatile INT8U *)(0x04000001) /*總線方式 BANK2--nGCS2*/ #define CH375Dat *(volatile INT8U *)(0x04000000) void xWriteCH375Cmd(INT8U mCmd ) { mDelay1_2uS( ); mDelay1_2uS( ); CH375Cmd = mCmd; mDelay1_2uS( ); mDelay1_2uS( ); }

void xWriteCH375Data(INT8U mData ) { CH375Dat = mData ; mDelay1_2uS( ); }

INT8U xReadCH375Data(void) { INT8U mData;

mDelay1_2uS( ); mData = (INT8U)CH375Dat; return(mData); } void mDelay1_2uS(void) { INT32U i; for (i = 30; i != 0; i --); }

系統(tǒng)主頻為:MCLK = 60000000; 這三個函數(shù)有問題嗎?


mDelay1_2uS( );的時間有點長哦,換小點試下看看??


我把延時改小了,可是很不穩(wěn)定,有時候可以成功讀出文件,有時候就死了, 而且有時候可以多循環(huán)幾次,有時候一遍都不能讀,總是死在: void xQueryInterrupt( void ) /* 查詢中斷狀態(tài),等待硬件中斷 */ { while ( CH375IntStatus == 0 ); /* 子程序庫調(diào)用該子程序之前CH375IntStatus=0,硬件中斷后,由中斷服務(wù)程序置為非0的實際中斷狀態(tài)后返回 */ }函數(shù)里面! 還是跟延時有關(guān)嗎? 我感覺應(yīng)該不完全是,因為把這個延時試了很多數(shù)據(jù),都是有時候可以讀,有時候又不能讀! 所以請問一下大家,這個問題是不是還其他因素有關(guān)系呢? 非常感謝??!


延時程序改成了: void mDelay1_2uS(void) { INT32U i; for (i = 10; i != 0; i --);

} 一個U盤連26K的文件常常讀不出來,上了100K以上的文件壓根就沒有讀出來過! 而另外一個U盤可以讀出15M的文件,讀文件的速度大概為213KB/S左右! 請問一下貴公司,是不是還與其他因素有關(guān),而不僅僅是與這個延時有關(guān)呢?


自己頂一下


順便在里面再問一個問題: /* FAT數(shù)據(jù)區(qū)中文件目錄信息 */ typedef struct _FAT_DIR_INFO { UINT8 DIR_Name[11]; /* 00H,文件名,共11字節(jié),不足處填空格 */ UINT8 DIR_Attr; /* 0BH,文件屬性,參考前面的說明 */ UINT8 DIR_NTRes; /* 0CH */ UINT8 DIR_CrtTimeTenth; /* 0DH,文件創(chuàng)建的時間,以0.1秒單位計數(shù) */ UINT16 DIR_CrtTime; /* 0EH,文件創(chuàng)建的時間 */ UINT16 DIR_CrtDate; /* 10H,文件創(chuàng)建的日期 */ UINT16 DIR_LstAccDate; /* 12H,最近一次存取操作的日期 */ UINT16 DIR_FstClusHI; /* 14H */ UINT16 DIR_WrtTime; /* 16H,文件修改時間,參考前面的宏MAKE_FILE_TIME */ UINT16 DIR_WrtDate; /* 18H,文件修改日期,參考前面的宏MAKE_FILE_DATA */ UINT16 DIR_FstClusLO; /* 1AH */ UINT32 DIR_FileSize; /* 1CH,文件長度 */ } FAT_DIR_INFO; /* 20H */ typedef FAT_DIR_INFO *P_FAT_DIR_INFO;

我在這個結(jié)構(gòu)體中增加一些內(nèi)容會有影響嗎? 比如說,增加文件的訪問次數(shù)等信息?


這個結(jié)構(gòu)是FAT的歷史標(biāo)準(zhǔn),不能跟改的. 和延時沒有多大關(guān)系,你仔細檢查下硬件,GND,VCC布線,還有U盤的信號線最好不要串電阻.對U盤的供電要穩(wěn)定.


U盤信號線上沒有串接電阻啊,我接了兩個保護二極管,是按照"USB芯片的電路及PCB設(shè)計的重要注意事項.PDF"里面的第三頁設(shè)計方案接的!U


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

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