CH375V使用CH375HFC.LIB,版本為3.0,前面測(cè)試、初始化、等待U盤(pán)插入、是否準(zhǔn)備好、讀取U盤(pán)大小返回值都是0 xWriteCH375Cmd(CMD_CHECK_EXIST); xWriteCH375Data(0x0f); result=xReadCH375Data(); i = CH375LibInit( ); mStopIfError( i ); while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; i= CH375DiskSize( ); mStopIfError( i ); 執(zhí)行i = CH375FileOpen( );是返回0x2B,頭文件里只說(shuō)代碼2XH-3XH用于USB主機(jī)方式的通訊失敗代碼,由CH375返回 ,那0x2B是什么意思呢? 先前我用CH375HF5.LIB時(shí)沒(méi)有問(wèn)題,因?yàn)閹?kù)5是在SMALL模式下編譯,有模式不兼容警告(我的單片機(jī)是C8051F040,LARGE模式),以及字節(jié)寫(xiě)函數(shù)調(diào)用時(shí)出現(xiàn)單片機(jī)發(fā)給DSP的數(shù)據(jù)出錯(cuò),在技術(shù)支持工程師的建議下,換這個(gè)庫(kù)試試。 PS:查詢中斷腳時(shí)沒(méi)有設(shè)置寄存器頁(yè)地址,呵呵,弄了一下午,最后還是用UltraCompare這個(gè)對(duì)比軟件在密密麻麻的.H文件里找到。不容易啊。
請(qǐng)按照我們的例子程序去做,上面的問(wèn)題主要是延時(shí)導(dǎo)致的,操作的過(guò)快.為保證CH375DiskReady( )通過(guò)要循環(huán)做.你上面好象根本沒(méi)有延時(shí),這樣的話可能U盤(pán)還沒(méi)準(zhǔn)備好.參考如下: while ( CH375DiskStatus < DISK_CONNECT ) { /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤(pán)插入 */ if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; /* 有設(shè)備連接則返回成功,CH375DiskConnect同時(shí)會(huì)更新全局變量CH375DiskStatus */ mDelay100mS( ); } LED_OUT_ACT( ); /* LED亮 */ mDelay100mS( ); /* 延時(shí),可選操作,有的USB存儲(chǔ)器需要幾十毫秒的延時(shí) */ mDelay100mS( );
/* 檢查U盤(pán)是否準(zhǔn)備好,但是某些U盤(pán)必須要執(zhí)行這一步才能工作 */ for ( i = 0; i < 5; i ++ ) { /* 有的U盤(pán)總是返回未準(zhǔn)備好,不過(guò)可以被忽略 */ mDelay100mS( ); printf( "Ready ?\n" ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤(pán)是否準(zhǔn)備好 */ }
返回0X2B的話,這個(gè)錯(cuò)誤代碼代表的是超時(shí),現(xiàn)在我們最新的庫(kù)的版本是V3。5,你可以拿這個(gè)庫(kù)去測(cè)試下,同時(shí),庫(kù)5和庫(kù)C的區(qū)別在于庫(kù)C使用的全部是外部變量,而庫(kù)5使用了部分的內(nèi)部變量,這樣的話,庫(kù)C的運(yùn)行效率會(huì)比庫(kù)5的運(yùn)行效率要低很多,如果是采用模擬I/O口或者串口的話,需要將三個(gè)讀寫(xiě)子函數(shù)的運(yùn)行速度稍微的提高點(diǎn)或者將波特率提高點(diǎn),同時(shí)你要檢查下你的RAM的使用是否存在問(wèn)題。 還有就是在你不和DSP進(jìn)行SPI通信而直接通過(guò)串口中斷來(lái)接收數(shù)據(jù)同時(shí)在寫(xiě)U盤(pán)的話,會(huì)不會(huì)出現(xiàn)數(shù)據(jù)出錯(cuò)了?