[求助]调试CH375,总是返回0x1f

我的程序如下: int main() { UINT8 i, c, SecCount; UINT16 NewSize, count; /* 因为RAM容量有限,所以NewSize限制为16位,实际上如果文件较大,应该分几次读写并且将NewSize改为UINT32以便累计 */ UINT8 *pCodeStr;

CH375_PORT_INIT( ); LED_OUT_INIT( ); LED_OUT_ACT( ); /* 开机后LED亮一下以示工作 */ mDelaymS( 100 ); /* 延时100毫秒 */ LED_OUT_INACT( ); mInitSTDIO( ); /* 为了让计算机通过串口监控演示过程 */ printf( "Start\n" ); CH375_Hard_Reset(); i = CH375LibInit( ); /* 初始化CH375程序库和CH375芯片,操作成功返回0 */ mStopIfError( i ); /* 其它电路初始化 */

while ( 1 ) { printf( "Wait Udisk\n" ); // while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); /* 查询CH375中断并更新中断状态,等待U盘插入 */ while ( CH375DiskStatus < DISK_CONNECT ) { /* 查询CH375中断并更新中断状态,等待U盘插入 */ if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; /* 有设备连接则返回成功,CH375DiskConnect同时会更新全局变量CH375DiskStatus */ mDelaymS( 100 ); } LED_OUT_ACT( ); /* LED亮 */ mDelaymS( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */

/* 检查U盘是否准备好,有些U盘不需要这一步,但是某些U盘必须要执行这一步才能工作 */ for ( i = 0; i < 10; i ++ ) { /* 有的U盘总是返回未准备好,不过可以被忽略 */ mDelaymS( 100 ); printf( "Ready ?\n" ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查询磁盘是否准备好 */ }

/* 查询磁盘物理容量 */ printf( "DiskSize\n" ); i = CH375DiskSize( ); mStopIfError( i ); // printf( "TotalSize = %d MB \n", (unsigned int)( mCmdParam.DiskSize.mDiskSizeSec >> 11 ) ); 显示为以MB为单位的容量

/* 读取原文件 */ printf( "Open\n" ); strcpy( (char *)mCmdParam.Open.mPathName, "\\C51\\CH375HFT.C" ); /* 文件名,该文件在C51子目录下 */ i = CH375FileOpen( ); /* 打开文件 */ if ( i == ERR_MISS_DIR || i == ERR_MISS_FILE ) { …… ……

调试时,初始化通过了,通过程序CH375DiskConnect( )也检测到了U盘已插入,但是往下进行,不论是执行子函数CH375DiskSize( )或者 CH375DiskReady( )或者CH375FileOpen( ),子函数总是返回0x1f,宏定义中说0x1f表示“ USB存储器操作失败,在初始化时可能是USB存储器不支持,在读写操作中可能是磁盘损坏或者已经断开”,本身是在运行中,U盘也插上了。请教诸位,有可能是什么问题呢?或者我应该是这怎么调一下呢?急,谢谢!!!

(1)DISK_BASE_BUF是否正常?对它进行读写,测试写入的数据与读出的数据是否一致 (2)如果是模拟总线时序,接口子程序中延时是否过长


我的程序又不回复0x1f了,改为0x28了!昨天下午调试的时候程序通过了,也找到了文件,打开并读入了数据,并新建了文件,写入了新建的文件。但是今天一调,又回复 0x28了,不论是执行子函数CH375DiskSize( )或者 CH375DiskReady( )或者CH375FileOpen( ),子函数总是返回0x28。什么原因呢?急,谢谢!!! 补充:我是采用总线方式,延时2us够吗?


只有登录才能回复,可以选择微信账号登录