请教各位高手,我用C8051F020通过CH375读U盘上的文件,程序可以检测到U盘插入,但CH375DiskReady查询U盘是否准备好时总是返回0x23(查.h中定义的含义是:代码2XH-3XH用于USB主机方式的通讯失败代码,由CH375返回),下面用CH375DiskQuery查询U盘容量是总是返回0x82,即磁“盘尚未连接,可能磁盘已经断开”。但此时U盘上的灯还在闪烁。 是不是磁盘读写缓冲区定义引起的?我的定义是: /* 只使用单片机内置的1KB外部RAM: 0000H-01FFH 为磁盘读写缓冲区, 以字节为单位读写文件不需要文件数据读写缓冲区FILE_DATA_BUF */ #define DISK_BASE_BUF_ADDR 0x0000 /* 外部RAM的磁盘数据缓冲区的起始地址,从该单元开始的缓冲区长度为SECTOR_SIZE */ #define FILE_DATA_BUF_ADDR 0x0200 /* 外部RAM的文件数据缓冲区的起始地址,缓冲区长度不小于一次读写的数据长度,字节模式不用该缓冲区 */ #define FILE_DATA_BUF_LEN 1024 /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度,字节模式不用该 缓冲区 */
这个问题困扰了我两天了,请高手指教这是什么原因造成的。感谢! 程序代码如下: EA = 0; CH375_PORT_INIT();
xWriteCH375Cmd(0x06); xWriteCH375Data(0x57); temp=xReadCH375Data(); if(temp==0xA8) Dispchsstring("存在",4,0);//说明CH375芯片存在 i = CH375LibInit( ); // 初始化CH375程序库和CH375芯片,操作成功返回0 mStopIfError( i ); while ( CH375DiskStatus != DISK_CONNECT ) { i = xQueryInterrupt( ); // 查询CH375中断并更新中断状态,等待U盘插入 } Delay(100); //检查U盘是否准备好,有些U盘不需要这一步,但是某些U盘必须要执行这一步才能工作 for ( i = 0; i < 5; i ++ ) // 有的U盘总是返回未准备好,不过可以被忽略 { Delay( 100 ); c=CH375DiskReady( ); if ( c == ERR_SUCCESS ) { Delay( 100 ); break;; // 查询磁盘是否准备好 } } for ( c = 0; c < 10; c ++ ) { //查询磁盘容量等信息 i=CH375DiskQuery(); }
EA = 1;[Emot]27[/Emot]