CH375读写U盘求助,希望大家帮忙。

各位高手,我在调试CH375A时遇到了一些问题,希望得到解答,谢谢。 我的CPU用的是STC89C58RD+,控制 CH375A做HOST读写U盘。程序用的是沁恒给的例程:CH375EV0.c,U盘先是用的是普通SONY的128MU盘,发现插上U盘后,U盘供电电压只有3v左右。U+和U-均为0V。无法使375产生中断。后来换了一个普通128MU盘MP3。连接后U盘供电电压上升到4.8V,但U+和U-依然为0V。这时375已经可以产生中断,并且可以顺利初始化CH375,并通过了CMD_CHECK_EXIST命令的测试。 另外插上U盘后各个引脚的电压如下: INT#=4.9V; RSTI=0V; TXD=0; NC=4.9V; A0=4.9V; V3=3.42V; UD+=0V; UD-=0V; XI=4.67V;XO=4.67V; ACT#=4.95V; RST=4.95V; RST#=0V; CS#=0V; VCC=4.95V; 另外发现插上U盘时NC脚为4.9V,而不插U盘时为0v。

程序方面,在运行到语句~c = mInitDisk( ); 时发现c=0x16;即USB_INT_DISCONNECT 检测到USB设备断开事件。 也就是刚刚检测到U盘连接后,延时200ms后再检测就会出现U盘已断开. 函数mInitDisk()是用来初始化磁盘的。原型如下: unsigned char mInitDisk( ) { unsigned char mIntStatus; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */ mIntStatus = CH375_RD_DAT_PORT( ); if ( mIntStatus == USB_INT_DISCONNECT ) return( mIntStatus ); /* USB设备断开 */

CH375_WR_CMD_PORT( CMD_DISK_INIT ); /* 初始化USB存储器 */ mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */ return( mIntStatus ); /* 出现错误 */

CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 获取USB存储器的容量 */ mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( mIntStatus != USB_INT_SUCCESS ) { /* 出错重试 */ mDelay100mS( ); CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 获取USB存储器的容量 */ mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */ } if ( mIntStatus != USB_INT_SUCCESS ) { return( mIntStatus ); } /* 出现错误 */ /* 可以由CMD_RD_USB_DATA命令将容量数据读出 */ return( 0 ); /* U盘已经成功初始化 */ }

下面是部分主函数 main( ) { unsigned char c, mIntStatus; LED_OUT_ACT( ); /* 开机后LED亮一下以示工作 */ mDelay100mS( ); /* 延时100毫秒 */ LED_OUT_INACT( );

mInitSTDIO( ); printf( "Start\n" ); c = mCH375Init( ); /* 初始化CH375 */ if ( c ) printf( "Error @CH375Init\n" ); printf( "Insert USB disk\n" );

do /* 等待U盘连接 */ { mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */ } while ( mIntStatus != USB_INT_CONNECT ); /* U盘没有连接或者已经拔出 */ mDelay100mS( ); /* 延时等待U盘进入正常工作状态 */ mDelay100mS( ); printf( "InitDisk\n" );

c = mInitDisk( ); /* 初始化U盘,实际是识别U盘的类型,不影响U盘中的数据,在所有读写操作之前必须进行此步骤 */ if ( c ) printf( "Error @InitDisk, %X\n", c ); 后面省略 }

XI=4.67V;XO=4.67V说明你的晶振有点问题啊?你的测试命令过了没有啊?


问题已经解决~~~ 发现是USB接口供电的问题,把USB的VCC单独供电问题就解决了~~


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