u盘读写控制源程序 - ch376芯片(9)
/* 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
#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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




