if ( s == ERR_DISK_DISCON )
break; /* 检测到断开,重新检测并计时 */
if ( CH376GetDiskStatus( ) >= DEF_DISK_MOUNTED && i >= 5 )
break; /* 有的U盘总是返回未准备好,不过可以忽略,只要其建立连接MOUNTED且尝试5*50mS */ } if ( s == ERR_DISK_DISCON ) {
}
/* 检测到断开,重新检测并计时 */ printf( \设备已断开---Device gone\\n\continue;
if ( CH376GetDiskStatus( ) < DEF_DISK_MOUNTED ) {
/* 未知USB设备,例如USB键盘、打印机等 */ printf( \ goto UnknownUsbDevice; } i = CH376ReadBlock( buf ); /* 如果需要,可以读取数据块CH376_CMD_DATA.DiskMountInq,返回长度 */ if ( i == sizeof( INQUIRY_DATA ) ) {
}
/* U盘的厂商和产品信息 */ buf[ i ] = 0;
printf( \盘厂商---UdiskInfo: %s\\n\
/* 读取文件 */ strcpy( SrcName, \ /* 源文件名,多级目录下的文件名和路径名必须复制到RAM中再处理,而根目录或者当前目录下的文件名可以在RAM或者ROM中 */ strcpy( TarName, \ /* 目标文件名 */ printf( \打开文件 --- Open\\n\ s = CH376FileOpenPath( SrcName ); /* 打开文件,该文件在C51子目录下 */ if ( s == ERR_MISS_DIR || s == ERR_MISS_FILE ) { /* 没有找到目录或者没有找到文件 */ /* 列出文件,完整枚举可以参考EXAM13全盘枚举 */ if ( s == ERR_MISS_DIR ) strcpy( buf, \ /* C51子目录不存在则列出根目录下的文件 */ else strcpy( buf, \); /* CH376HFT.C文件不存在则列出\\C51子
目录下的以CH376开头的文件 */ printf( \列举所有文件---List file %s\\n\ s = CH376FileOpenPath( buf ); /* 枚举多级目录下的文件或者目录,输入缓冲区必须在RAM中 */ while ( s == USB_INT_DISK_READ ) { /* 枚举到匹配的文件 */ CH376ReadBlock( buf ); /* 读取枚举到的文件的FAT_DIR_INFO结构,返回长度总是sizeof( FAT_DIR_INFO ) */ pDir = (P_FAT_DIR_INFO)buf; /* 当前文件目录信息 */ if ( pDir -> DIR_Name[0] != '.' ) { /* 不是本级或者上级目录名则继续,否则必须丢弃不处理 */ if ( pDir -> DIR_Name[0] == 0x05 ) pDir -> DIR_Name[0] = 0xE5; /* 特殊字符替换 */ pDir -> DIR_Attr = 0; /* 强制文件名字符串结束以便打印输出 */ /* 打印名称,原始8+3格式,未整理成含小数点分隔符 */ printf( \ } xWriteCH376Cmd( CMD0H_FILE_ENUM_GO ); /* 继续枚举文件和目录 */ xEndCH376Cmd( ); s = Wait376Interrupt( ); } if ( s != ERR_MISS_FILE ) mStopIfError( s ); /* 操作出错 */ /*--- 新建一个文件 ---*/ printf( \新文件被创建---Create\\n\ s = CH376FileCreatePath( TarName ); /* 新建多级目录下的文件,支持多级目录路径,输入缓冲区必须在RAM中 */ mStopIfError( s ); printf( \新文件被写入---Write\\n\ strcpy( buf, \找不到/C51/CH376HFT.C文件,欢迎使用一鸣电子模块!\\xd\\n\ s = CH376ByteWrite( buf, strlen(buf), NULL ); /* 以字节为单位向当前位置写入数据块 */ mStopIfError( s ); printf( \新文件被关闭---Close\\n\ s = CH376FileClose( TRUE ); /* 关闭文件,对于字节读写建议自动更新文件长度 */ mStopIfError( s ); printf(\
strcpy( TarName, \ /* 目标文件名 */
/*--- 新建另外一个文件;文件名:yimingtest.txt ---*/ printf( \创建另外一个文件---Create\\n\s = CH376FileCreatePath( TarName ); mStopIfError( s );
printf( \新文件被写入----Write\\n\strcpy( buf, \恭喜发财了!\\xd\\n\
s = CH376ByteWrite( buf, strlen(buf) , NULL); mStopIfError ( s );
printf( \文件被关闭 --- Close\\n\s = CH376FileClose(TRUE); mStopIfError( s );
/*--- 追加文件数据的例子 ---*/ printf( \
strcpy( SrcName, \
s = CH376FileOpenPath( SrcName ); printf( \ if( s == USB_INT_SUCCESS ) {
//成功打开文件
strcpy( buf, \是不是要请哥们吃饭了呢?\\xd\\n\CH376ByteLocate(0xFFFFFFFF);
s = CH376ByteWrite( buf, strlen(buf) , NULL); mStopIfError ( s );
printf( \文件被关闭 --- Close\\n\ s = CH376FileClose(TRUE); mStopIfError( s ); } else mStopIfError( s ); /*--- 读取文件数据的例子 ---*/ printf( \
printf( \读取文件数据的例子:\\n\strcpy( SrcName, \
s = CH376FileOpenPath( SrcName ); printf( \ if( s == USB_INT_SUCCESS ) { len = CH376GetFileSize(); CH376ByteLocate( 0 ); CH376ByteRead(buf,len,NULL); printf( \
mStopIfError ( s ); printf( \文件被关闭 --- Close\\n\ s = CH376FileClose(TRUE); mStopIfError( s ); } else mStopIfError( s ); } else { /* 找到文件或者出错 */ mStopIfError( s ); }
UnknownUsbDevice: }
}
printf( \设备拔出 --- Take out\\n\
while ( CH376DiskConnect( ) == USB_INT_SUCCESS ) { /* 检查U盘是否连接,等待U盘拔出 */ mDelaymS( 100 ); }
mDelaymS( 200 );
SPI_SW.C 文件
/* CH376芯片 软件模拟SPI串行连接的硬件抽象层 V1.0 */ /* 提供I/O接口子程序 */
#include \
/* 本例中的硬件连接方式如下(实际应用电路可以参照修改下述定义及子程序) */ /* 单片机的引脚 CH376芯片的引脚 P1.4 SCS P1.5 SDI P1.6 SDO
P1.7 SCK */ sbit P24 = P2^4; sbit P25 = P2^5; sbit P26 = P2^6;