[求助]CH376打开文件返回0xb4(文件已关闭)?

我的通讯什么的都已经调试正常了,现在基本上就是按照演示程序在调试,初始化什么的都通过了,现在就是新建文件的时候会返回0xb4,并且不能成功新建。

补充:观察发现执行新建文件命令CH376FileCreate( "/MY2ADC.TXT" );返回0x14,但是U盘无文件写入,如果继续执行CH376ByteLocate( 0xFFFFFFFF );则会返回0xB4

各位大侠帮帮忙,谢谢


0xB4代表文件已经关闭,如果需要使用,应该重新打开文件,CH376FileCreate返回14看可能是之前Diskmount返回的,所以检查一下你中断那块配置。


呃,应该不是Diskmount返回的,试验程序如下: 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 ); /* 延时100毫秒 */

s = mInitCH376Host( ); /* 初始化CH376 */

if( s!=USB_INT_SUCCESS ){ LCD_CorePrintf(0,0,0x81, "IniEr!,%z2x" ,s);return; } //USB CH375初始化出错 USBIniFlg=1; } if(USBIniFlg==1) { DiskConnectTp = CH376DiskConnect(); /* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */ if ( DiskConnectTp != USB_INT_SUCCESS ) { mDelaymS( 100 ); LCD_CorePrintf(0,0,0x81, "Not Found!,%z2x" ,DiskConnectTp); return; } USBIniFlg=2; }

if(USBIniFlg==2) { mDelaymS( 300 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */ /* 对于检测到USB设备的,最多等待10*50mS */ for ( i = 0; i < 10; i ++ ) { /* 最长等待时间,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 ); } }


程序是死循环执行的,前面都很顺利就是执行到USBIniFlg==3这一步,往后也就是之前说的CH376FileCreate( "/MY2ADC.TXT" )始终返回的是0x14,但是U盘内就是不见文件…… 另外这是中断处理的程序:(PIC 8位单片机,内置16M晶振同时PLL4倍频,所以执行指令频率16M) UINT32 i; //UINT16 i; for ( i = 0; i < 5000000; i ++ ) { /* 计数防止超时,默认的超时时间,与单片机主频有关 */ //for ( i = 0; i < 50000; i ++ ) { /* 计数防止超时,默认的超时时间,与单片机主频有关 */ if ( Query376Interrupt( ) ) return( CH376GetIntStatus( ) ); /* 检测到中断 */ /* 在等待CH376中断的过程中,可以做些需要及时处理的其它事情 */ } return( ERR_USB_UNKNOWN ); /* 不应该发生的情况 */


返回值0x14是正确的,你格式化U盘试一下?用Winhex这个软件看一下目录项中文件信息有没有写进去?


U盘格式化选择有讲究么?我的是win7系统,容量:490MB 文件系统:fat(默认)分配单元大小:8192字节 另外这个问题会不会和晶振误差有关系啊?


终于看到点希望,我尝试者把晶振的两个电容去掉后,成功的写进了数据,可是还是有问题,生成的文件没有名字,在winhex里面观察发现数据可以写入,但是文件目录项不正常: “ 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进制代码) ” F4 20 20……在windows底下不能正常显示识别,所以这个文件不止是没有文件名,复制、剪切、删除、重命名统统不行…… 求大侠指导!!


解决了,呵呵 结果是Pic单片机编程格式与标准程序不兼容导致的,我把 void CH376SetFileName( PUINT8 name ) 改为: void CH376SetFileName( const rom unsigned char *name ) 就可以了


现在问题就来了,不知道有多少地方要改啊…… 但是总比不知道那里出了问题强,呵呵


只有登录才能回复,可以选择微信账号登录