u盘读写控制源程序 - ch376芯片(13)
}
{ *buf = xReadCH376Data( ); buf ++; }while ( -- l ); }
xEndCH376Cmd( ); return( s );
UINT8 CH376WriteReqBlock( PUINT8 buf ) /* 向内部指定缓冲区写入请求的数据块,返回长度 */ { UINT8 s, l; xWriteCH376Cmd( CMD01_WR_REQ_DATA ); }
s = l = xReadCH376Data( ); /* 长度 */ if ( l ) { do { xWriteCH376Data( *buf ); buf ++; } while ( -- l ); }
xEndCH376Cmd( ); return( s );
void CH376WriteHostBlock( PUINT8 buf, UINT8 len ) /* 向USB主机端点的发送缓冲区写入数据块 */ { xWriteCH376Cmd( CMD10_WR_HOST_DATA ); xWriteCH376Data( len ); /* 长度 */ if ( len ) { do { xWriteCH376Data( *buf ); buf ++; } while ( -- len ); } xEndCH376Cmd( ); }
void CH376WriteOfsBlock( PUINT8 buf, UINT8 ofs, UINT8 len ) /* 向内部缓冲区指定偏移地址写入数据块 */ { xWriteCH376Cmd( CMD20_WR_OFS_DATA ); xWriteCH376Data( ofs ); /* 偏移地址 */
}
xWriteCH376Data( len ); /* 长度 */ if ( len ) { do { xWriteCH376Data( *buf ); buf ++; } while ( -- len ); }
xEndCH376Cmd( );
void CH376SetFileName( PUINT8 name ) /* 设置将要操作的文件的文件名 */ { UINT8 c; xWriteCH376Cmd( CMD10_SET_FILE_NAME ); c = *name; xWriteCH376Data( c ); while ( c ) { name ++; c = *name; if ( c == DEF_SEPAR_CHAR1 || c == DEF_SEPAR_CHAR2 )
c = 0; /* 强行将文件名截止 */ xWriteCH376Data( c ); } xEndCH376Cmd( ); }
UINT32 CH376Read32bitDat( void ) /* 从CH376芯片读取32位的数据并结束命令 */ { UINT8 c0, c1, c2, c3; c0 = xReadCH376Data( ); c1 = xReadCH376Data( ); c2 = xReadCH376Data( ); c3 = xReadCH376Data( ); xEndCH376Cmd( ); return( c0 | (UINT16)c1 << 8 | (UINT32)c2 << 16 | (UINT32)c3 << 24 ); }
UINT8 CH376ReadVar8( UINT8 var ) /* 读CH376芯片内部的8位变量 */ { UINT8 c0; xWriteCH376Cmd( CMD11_READ_VAR8 ); xWriteCH376Data( var );
}
c0 = xReadCH376Data( ); xEndCH376Cmd( ); return( c0 );
void CH376WriteVar8( UINT8 var, UINT8 dat ) /* 写CH376芯片内部的8位变量 */ { xWriteCH376Cmd( CMD20_WRITE_VAR8 ); xWriteCH376Data( var ); xWriteCH376Data( dat ); xEndCH376Cmd( ); }
UINT32 CH376ReadVar32( UINT8 var ) /* 读CH376芯片内部的32位变量 */ { xWriteCH376Cmd( CMD14_READ_VAR32 ); xWriteCH376Data( var ); }
return( CH376Read32bitDat( ) ); /* 从CH376芯片读取32位的数据并结束命令 */
void CH376WriteVar32( UINT8 var, UINT32 dat ) /* 写CH376芯片内部的32位变量 */ { xWriteCH376Cmd( CMD50_WRITE_VAR32 ); xWriteCH376Data( var ); xWriteCH376Data( (UINT8)dat ); xWriteCH376Data( (UINT8)( (UINT16)dat >> 8 ) ); xWriteCH376Data( (UINT8)( dat >> 16 ) ); xWriteCH376Data( (UINT8)( dat >> 24 ) ); xEndCH376Cmd( ); }
void CH376EndDirInfo( void ) /* 在调用CH376DirInfoRead获取FAT_DIR_INFO结构之后应该通知CH376结束 */ { CH376WriteVar8( 0x0D, 0x00 ); }
UINT32 CH376GetFileSize( void ) /* 读取当前文件长度 */ { return( CH376ReadVar32( VAR_FILE_SIZE ) ); }
UINT8 CH376GetDiskStatus( void ) /* 获取磁盘和文件系统的工作状态 */ {
return( CH376ReadVar8( VAR_DISK_STATUS ) ); }
UINT8 CH376GetIntStatus( void ) /* 获取中断状态并取消中断请求 */ { UINT8 s; xWriteCH376Cmd( CMD01_GET_STATUS ); s = xReadCH376Data( ); xEndCH376Cmd( ); return( s ); }
UINT8 Wait376Interrupt( void ) /* 等待CH376中断(INT#低电平),返回中断状态码, 超时则返回ERR_USB_UNKNOWN */ { UINT32 i; for ( i = 0; i < 5000000; i ++ ) { /* 计数防止超时,默认的超时时间,与单片机主频有关 */ if ( Query376Interrupt( ) ) return( CH376GetIntStatus( ) ); /* 检测到中断 */ /* 在等待CH376中断的过程中,可以做些需要及时处理的其它事情 */ } }
return( ERR_USB_UNKNOWN ); /* 不应该发生的情况 */
UINT8 CH376SendCmdWaitInt( UINT8 mCmd ) /* 发出命令码后,等待中断 */ { xWriteCH376Cmd( mCmd ); xEndCH376Cmd( ); return( Wait376Interrupt( ) ); }
UINT8 CH376SendCmdDatWaitInt( UINT8 mCmd, UINT8 mDat ) /* 发出命令码和一字节数据后,等待中断 */ { xWriteCH376Cmd( mCmd ); xWriteCH376Data( mDat ); xEndCH376Cmd( ); return( Wait376Interrupt( ) ); }
UINT8 CH376DiskReqSense( void ) /* 检查USB存储器错误 */
{ }
UINT8 s; mDelaymS( 5 );
s = CH376SendCmdWaitInt( CMD0H_DISK_R_SENSE ); mDelaymS( 5 ); return( s );
UINT8 { }
CH376DiskConnect( void ) /* 检查U盘是否连接,不支持SD卡 */
if( Query376Interrupt( ) ) /*--- 就是简单的查询中断口的电平状态 ---*/ CH376GetIntStatus( ); /* 检测到中断 */
return( CH376SendCmdWaitInt( CMD0H_DISK_CONNECT ) );
UINT8 CH376DiskMount( void ) /* 初始化磁盘并测试磁盘是否就绪 */ { return( CH376SendCmdWaitInt( CMD0H_DISK_MOUNT ) ); }
UINT8 CH376FileOpen( PUINT8 name ) /* 在根目录或者当前目录下打开文件或者目录(文件夹) */ { }
CH376SetFileName( name ); /* 设置将要操作的文件的文件名 */ if ( name[0] == DEF_SEPAR_CHAR1 || name[0] == DEF_SEPAR_CHAR2 ) CH376WriteVar32( VAR_CURRENT_CLUST, 0 );
return( CH376SendCmdWaitInt( CMD0H_FILE_OPEN ) );
UINT8 CH376FileCreate( PUINT8 name ) /* 在根目录或者当前目录下新建文件,如果文件已经存在那么先删除 */ { if ( name ) CH376SetFileName( name ); /* 设置将要操作的文件的文件名 */ return( CH376SendCmdWaitInt( CMD0H_FILE_CREATE ) ); }
UINT8 CH376DirCreate( PUINT8 name ) /* 在根目录下新建目录(文件夹)并打开,如果目录已经存在那么直接打开 */ { CH376SetFileName( name ); /* 设置将要操作的文件的文件名 */ if ( name[0] == DEF_SEPAR_CHAR1 || name[0] == DEF_SEPAR_CHAR2 ) CH376WriteVar32( VAR_CURRENT_CLUST, 0 ); return( CH376SendCmdWaitInt( CMD0H_DIR_CREATE ) );
…… 此处隐藏:2460字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]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,深
- 弟子规全文带拼音




