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

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

来源:网络收集 时间:2026-08-25
导读: } { *buf = xReadCH376Data( ); buf ++; }while ( -- l ); } xEndCH376Cmd( ); return( s ); UINT8 CH376WriteReqBlock( PUINT8 buf ) /* 向内部指定缓冲区写入请求的数据块,返回长度 */ { UINT8 s, l; xWriteCH376

}

{ *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字,全部文档内容请下载后查看。喜欢就下载吧 ……
u盘读写控制源程序 - ch376芯片(13).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)