SOS:CH375DiskQuery为何老返回0x82(可能磁盘已经断)?

请教各位高手,我用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]

DISK-READY函数没有通过的话,你需要检查下你的U盘供电足不足,其次就是USB口的4根线连接是否正常,有没有接反,USB口上面的2根线是否串接电阻,如果串接,应该在5欧姆以内才可以。


检查了。换功率大些的供电,4根线也没有接反。D+、D-换一下试了也不行。USB口上面的2根线没有串接电阻。 请高手们多多指教。先谢了!


那你这样,你用示波器去探测下USB口的是否有波形出来?还有就是你使用我们的哪一个库?还有就是你的三个读写子函数延时上面时间够不够?命令与命令之间,命令与数据之间需要2US的延时,数据与数据之间需要1US的延时,如果延时不够的话,可能操作的时候也会出现问题,还有就是你的单片机的RAM是多大?按照你定义的,RAM在1。5K,在加上我们的一些变量的定义,RAM应该在2K的单片机才能跑我们的程序


波形挺好的,D+和D-对称,C8051F020的RAM容量是4K,应该是够的。我用的库是CH375HFC.lib.延时时间也够,延时再长也不行。


那你使用我们的操作物理扇区的例子程序去测试下看程序停在什么位置。实际库的初始化和我们操作物理扇区的初始化步骤是差不多的。


已经解决了.和硬件无关.对CH375HFC.h中的一些地方又进行了几次更改,就莫名其妙地好了!把更改的地方再改回去,还是好的!太怪了,不可理解!这就是把一些源代码封装起来无法让用户看见的缺点.折腾了我4天.我担心以后再出这样的问题如何办? 谢谢高手的指点.


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