我的通訊什么的都已經(jīng)調(diào)試正常了,現(xiàn)在基本上就是按照演示程序在調(diào)試,初始化什么的都通過了,現(xiàn)在就是新建文件的時(shí)候會(huì)返回0xb4,并且不能成功新建。
補(bǔ)充:觀察發(fā)現(xiàn)執(zhí)行新建文件命令CH376FileCreate( "/MY2ADC.TXT" );返回0x14,但是U盤無文件寫入,如果繼續(xù)執(zhí)行CH376ByteLocate( 0xFFFFFFFF );則會(huì)返回0xB4
各位大俠幫幫忙,謝謝
0xB4代表文件已經(jīng)關(guān)閉,如果需要使用,應(yīng)該重新打開文件,CH376FileCreate返回14看可能是之前Diskmount返回的,所以檢查一下你中斷那塊配置。
呃,應(yīng)該不是Diskmount返回的,試驗(yàn)程序如下: void USB_Main(void) { byte s,i; byte month, date, hour; word adc=0,DiskConnectTp=0;
if(USBIniFlg==0) { CH376_RST=1; CH376_RST=1; CH376_RST=0; mDelaymS( 200 ); /* 延時(shí)100毫秒 */
s = mInitCH376Host( ); /* 初始化CH376 */
if( s!=USB_INT_SUCCESS ){ LCD_CorePrintf(0,0,0x81, "IniEr!,%z2x" ,s);return; } //USB CH375初始化出錯(cuò) USBIniFlg=1; } if(USBIniFlg==1) { DiskConnectTp = CH376DiskConnect(); /* 檢查U盤是否連接,等待U盤插入,對于SD卡,可以由單片機(jī)直接查詢SD卡座的插拔狀態(tài)引腳 */ if ( DiskConnectTp != USB_INT_SUCCESS ) { mDelaymS( 100 ); LCD_CorePrintf(0,0,0x81, "Not Found!,%z2x" ,DiskConnectTp); return; } USBIniFlg=2; }
if(USBIniFlg==2) { mDelaymS( 300 ); /* 延時(shí),可選操作,有的USB存儲(chǔ)器需要幾十毫秒的延時(shí) */ /* 對于檢測到USB設(shè)備的,最多等待10*50mS */ for ( i = 0; i < 10; i ++ ) { /* 最長等待時(shí)間,10*50mS */ mDelaymS( 50 ); s = CH376DiskMount( ); if ( s == USB_INT_SUCCESS ) { CommLedON; USBIniFlg=3; } /* 初始化磁盤并測試磁盤是否就緒 */ else { LCD_CorePrintf(0,0,0x81, "USB Err!,%z2x" ,s); } } return; }
if(USBIniFlg==3) { USBSSKGB = 0; USBSSKGB = CH376FileCreate( "/MY2ADC.TXT" ); s = CH376FileClose( TRUE ); LCD_CorePrintf(0,0,0x81, "X!,%z2x", USBSSKGB ); } }
程序是死循環(huán)執(zhí)行的,前面都很順利就是執(zhí)行到USBIniFlg==3這一步,往后也就是之前說的CH376FileCreate( "/MY2ADC.TXT" )始終返回的是0x14,但是U盤內(nèi)就是不見文件…… 另外這是中斷處理的程序:(PIC 8位單片機(jī),內(nèi)置16M晶振同時(shí)PLL4倍頻,所以執(zhí)行指令頻率16M) UINT32 i; //UINT16 i; for ( i = 0; i < 5000000; i ++ ) { /* 計(jì)數(shù)防止超時(shí),默認(rèn)的超時(shí)時(shí)間,與單片機(jī)主頻有關(guān) */ //for ( i = 0; i < 50000; i ++ ) { /* 計(jì)數(shù)防止超時(shí),默認(rèn)的超時(shí)時(shí)間,與單片機(jī)主頻有關(guān) */ if ( Query376Interrupt( ) ) return( CH376GetIntStatus( ) ); /* 檢測到中斷 */ /* 在等待CH376中斷的過程中,可以做些需要及時(shí)處理的其它事情 */ } return( ERR_USB_UNKNOWN ); /* 不應(yīng)該發(fā)生的情況 */
返回值0x14是正確的,你格式化U盤試一下?用Winhex這個(gè)軟件看一下目錄項(xiàng)中文件信息有沒有寫進(jìn)去?
U盤格式化選擇有講究么?我的是win7系統(tǒng),容量:490MB 文件系統(tǒng):fat(默認(rèn))分配單元大小:8192字節(jié) 另外這個(gè)問題會(huì)不會(huì)和晶振誤差有關(guān)系???
終于看到點(diǎn)希望,我嘗試者把晶振的兩個(gè)電容去掉后,成功的寫進(jìn)了數(shù)據(jù),可是還是有問題,生成的文件沒有名字,在winhex里面觀察發(fā)現(xiàn)數(shù)據(jù)可以寫入,但是文件目錄項(xiàng)不正常: “ F4 20 20 20 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 21 30 02 00 90 01 00 00”(在winhex底下觀察的16進(jìn)制代碼) ” F4 20 20……在windows底下不能正常顯示識(shí)別,所以這個(gè)文件不止是沒有文件名,復(fù)制、剪切、刪除、重命名統(tǒng)統(tǒng)不行…… 求大俠指導(dǎo)?。?/p>
解決了,呵呵 結(jié)果是Pic單片機(jī)編程格式與標(biāo)準(zhǔn)程序不兼容導(dǎo)致的,我把 void CH376SetFileName( PUINT8 name ) 改為: void CH376SetFileName( const rom unsigned char *name ) 就可以了
現(xiàn)在問題就來了,不知道有多少地方要改啊…… 但是總比不知道那里出了問題強(qiáng),呵呵