教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

u盘读写控制源程序 - ch376芯片(9)

来源:网络收集 时间:2026-08-25
导读: /* USB的包标识PID, 主机方式可能用到 */ #ifndef DEF_USB_PID_SETUP #define DEF_USB_PID_NULL 0x00 #define DEF_USB_PID_SOF 0x05 #define DEF_USB_PID_SETUP 0x0D #define DEF_USB_PID_IN 0x09 #define DEF_USB_

/* USB的包标识PID, 主机方式可能用到 */ #ifndef DEF_USB_PID_SETUP #define DEF_USB_PID_NULL 0x00 #define DEF_USB_PID_SOF 0x05 #define DEF_USB_PID_SETUP 0x0D #define DEF_USB_PID_IN 0x09 #define DEF_USB_PID_OUT 0x01 #define DEF_USB_PID_ACK 0x02 #define DEF_USB_PID_NAK 0x0A #define DEF_USB_PID_STALL 0x0E #define DEF_USB_PID_DATA0 0x03 #define DEF_USB_PID_DATA1 0x0B #define DEF_USB_PID_PRE 0x0C #endif

/* USB请求类型, 外置固件模式可能用到 */ #ifndef DEF_USB_REQ_TYPE

#define DEF_USB_REQ_READ 0x80 #define DEF_USB_REQ_WRITE 0x00 #define DEF_USB_REQ_TYPE 0x60 #define DEF_USB_REQ_STAND 0x00 #define DEF_USB_REQ_CLASS 0x20 #define DEF_USB_REQ_VENDOR 0x40 #define DEF_USB_REQ_RESERVE 0x60 #endif

/* 保留PID, 未定义 */

/* 控制读操作 */ /* 控制写操作 */ /* 控制请求类型 */ /* 标准请求 */ /* 设备类请求 */ /* 厂商请求 */ /* 保留请求 */

/* USB标准设备请求, RequestType的位6位5=00(Standard), 外置固件模式可能用到 */ #ifndef DEF_USB_GET_DESCR

#define DEF_USB_CLR_FEATURE 0x01 #define DEF_USB_SET_FEATURE 0x03 #define DEF_USB_GET_STATUS 0x00 #define DEF_USB_SET_ADDRESS 0x05 #define DEF_USB_GET_DESCR 0x06 #define DEF_USB_SET_DESCR 0x07 #define DEF_USB_GET_CONFIG 0x08 #define DEF_USB_SET_CONFIG 0x09 #define DEF_USB_GET_INTERF 0x0A #define DEF_USB_SET_INTERF 0x0B #define DEF_USB_SYNC_FRAME 0x0C #endif /*

*******************************************************************************

************************************** */

#ifdef __cplusplus }

#endif

#endif

CH376HFT.C文件

/* 2008.10.18

**************************************** ** Copyright (C) W.ch 1999-2009 ** ** Web: http://www.winchiphead.com ** **************************************** ** USB Host File Interface for CH376 **

** TC2.0@PC, KC7.0@MCS51 ** **************************************** */

/* CH376 主机文件系统接口 */

/* MCS-51单片机C语言的U盘文件读写示例程序 */

/* 本程序演示字节读写,文件枚举,文件复制, 用于将U盘中的/C51/CH376HFT.C文件中的小写字母转成大写字母后, 写到新建的文件NEWFILE.TXT中,

如果找不到原文件CH376HFT.C, 那么该程序将显示C51子目录下所有以CH376开头的文件名, 并新建NEWFILE.TXT文件并写入提示信息,

如果找不到C51子目录, 那么该程序将显示根目录下的所有文件名, 并新建NEWFILE.TXT文件并写入提示信息 */

/* C51 CH376HFT.C */ /* LX51 CH376HFT.OBJ */ /* OHX51 CH376HFT */

#include #include #include

#define EN_DISK_QUERY 1 /* 启用磁盘查询 */

#include \

#include \#include \

#include \

#include \ /* 软件模拟SPI方式 */ #include \#include \

UINT8 idata buf[64];

void main(void) { UINT8 i, s; UINT16 len; P_FAT_DIR_INFO pDir; UINT8 xdata SrcName[64]; UINT8 xdata TarName[64];

mDelaymS( 100 ); /* 延时100毫秒 */

mInitSTDIO( ); /* 为了让计算机通过串口监控演示过程 */ printf( \系统启动---Start\\n\

s = mInitCH376Host( ); /* 初始化CH376 */ mStopIfError( s ); /* 其它电路初始化 */ while ( 1 ) {

printf( \等待U盘或者SD卡插入---Wait Udisk/SD\\n\while ( CH376DiskConnect( ) != USB_INT_SUCCESS ) {

/* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */ mDelaymS( 100 ); } mDelaymS( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */ /* 对于检测到USB设备的,最多等待100*50mS,主要针对有些MP3太慢,对于检测到USB设备并且连接DISK_MOUNTED的,最多等待5*50mS,主要针对DiskReady不过的 */ for ( i = 0; i < 100; i ++ ) { /* 最长等待时间,100*50mS */ mDelaymS( 50 ); printf( \准备好了? ---- Ready ?\\n\ s = CH376DiskMount( ); /* 初始化磁盘并测试磁盘是否就绪 */ if ( s == USB_INT_SUCCESS ) break; /* 准备好 */ else

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格式,未整理 …… 此处隐藏:3110字,全部文档内容请下载后查看。喜欢就下载吧 ……

u盘读写控制源程序 - ch376芯片(9).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/519225.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)