CH376S测试U盘CH376DiskMount( )返回0x2c

CH376S测试U盘CH376DiskMount( )返回0x2c

CH376DiskConnect( )返回0x14,成功,测试磁盘就绪不成功,求助

/* CH376芯片 软件模拟8位并口连接的硬件抽象层 V1.0 */ /* 提供I/O接口子程序 */

#include "HAL.H"

#define UWR_CLR PORTD &= ~(1 <<4) //UWR置低 #define UWR_SET PORTD |= (1 <<4) //UWR置高

#define URD_CLR PORTD &= ~(1 <<5) //URD置低 #define URD_SET PORTD |= (1 <<5) //URD置高

#define UA0_CLR PORTD &= ~(1 <<6) //UA0置低 #define UA0_SET PORTD |= (1 <<6) //UA0置高

void mDelayuS( UINT8 us ) { while ( us -- ) ; }

#define CH376_INT_WIRE ((PIND&0X02)>>1) /* 假定CH376的INT#引脚,如果未连接那么也可以通过查询状态端口实现 */

void CH376_PORT_INIT( void ) /* 由于使用通用I/O模拟并口读写时序,所以进行初始化 */ { DDRD=0Xf0; UWR_SET; URD_SET; UA0_CLR; DDRC=0X00; /* 设置并口输入 */ mDelayuS(10); }

UINT8 xReadCH376Status( void ) /* 从CH376读状态,仅用于并口方式 */ { UINT8 mData; mDelayuS(200); UA0_SET; UWR_SET; URD_SET; mDelayuS(10);

DDRC=0X00; mDelayuS(10);

URD_CLR; /* 输出有效读控制信号, 读CH376芯片的状态端口 */ mDelayuS(10); mData =PINC; /* 从CH376的并口输入数据 */ URD_SET; UWR_SET; UA0_CLR; return( mData ); }

UINT8 xReadCH376Data( void ) /* 从CH376读数据 */ { UINT8 mData; mDelayuS(200); UA0_CLR; UWR_SET; URD_SET; mDelayuS(10);

DDRC=0X00; mDelayuS(10);

URD_CLR; /* 输出有效读控制信号, 读CH376芯片的状态端口 */ mDelayuS(10); mData =PINC; /* 从CH376的并口输入数据 */ URD_SET; UWR_SET; UA0_CLR; return( mData ); }

void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376写命令 */ {

UA0_SET; UWR_SET; URD_SET; mDelayuS(10); DDRC=0XFF; mDelayuS(10); UWR_CLR; /* 输出有效写控制信号, 写CH376芯片的命令端口 */ mDelayuS(10);

PORTC=mCmd ; mDelayuS(10); UWR_SET; URD_SET; mDelayuS(10); }

void xWriteCH376Data( UINT8 mData ) /* 向CH376写数据 */ {

UA0_CLR; UWR_SET; URD_SET; mDelayuS(10); DDRC=0XFF; mDelayuS(10); UWR_CLR; /* 输出有效写控制信号, 写CH376芯片的命令端口 */ mDelayuS(10);

PORTC=mData; mDelayuS(10); UWR_SET; URD_SET; mDelayuS(10); }

/* 查询CH376中断(INT#低电平) */ UINT8 Query376Interrupt( void ) { #ifdef CH376_INT_WIRE return( CH376_INT_WIRE ? FALSE : TRUE ); /* 如果连接了CH376的中断引脚则直接查询中断引脚 */ #else return( (xReadCH376Status( ) & PARA_STATE_INTB) ? FALSE : TRUE ); /* 如果未连接CH376的中断引脚则查询状态端口 */ #endif }

UINT8 mInitCH376Host( void ) /* 初始化CH376 */ { UINT8 res; CH376_PORT_INIT( ); /* 接口硬件初始化 */ xWriteCH376Cmd( CMD_CHECK_EXIST ); /* 测试单片机与CH376之间的通讯接口 */ xWriteCH376Data( 0x57 ); res = xReadCH376Data( ); if ( res != 0xa8 ) return( ERR_USB_UNKNOWN ); /* 通讯接口不正常,可能原因有:接口连接异常,其它设备影响(片选不唯一),串口波特率,一直在复位,晶振不工作 */ xWriteCH376Cmd(0x15); /* 设备USB工作模式 */ xWriteCH376Data( 0x06 ); mDelayuS(200); res = xReadCH376Data( ); if ( res == CMD_RET_SUCCESS ) return( USB_INT_SUCCESS ); else return( ERR_USB_UNKNOWN ); /* 设置模式错误 */ }

/* 检查操作状态,如果错误则显示错误代码并停机,应该替换为实际的处理措施,例如显示错误信息,等待用户确认后重试等 */ void mStopIfError( UINT8 iError ) { if ( iError == USB_INT_SUCCESS ) return; /* 操作成功 */ }

#define xEndCH376Cmd( )


主程序:

delay_ms( 100 ); /* 延时100毫秒 */ //开启全局中断 //总中断允许 s = mInitCH376Host( ); /* 初始化CH376 */

mStopIfError( s ); /* 其它电路初始化 */

while ( 1 ) { while ( CH376DiskConnect( ) != USB_INT_SUCCESS ) { /* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */ delay_ms( 100 ); } delay_ms( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */ /* 对于检测到USB设备的,最多等待10*50mS */ for ( s = 0; s < 10; s ++ ) { /* 最长等待时间,10*50mS */ delay_ms( 50 ); if (CH376DiskMount( ) ==USB_INT_SUCCESS ){ break; } /* 初始化磁盘并测试磁盘是否就绪 */ } delay_ms( 200 );


CH376DiskMount( )返回值是0x2c,为什么呢?求大侠指点


void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376写命令 */ {

UA0_SET; UWR_SET; URD_SET; mDelayuS(10); DDRC=0XFF; PORTC=mCmd ; mDelayuS(10); UWR_CLR; /* 输出有效写控制信号, 写CH376芯片的命令端口 */ mDelayuS(10);

mDelayuS(10); UWR_SET; URD_SET; mDelayuS(10); }

写命令按照我这样。你那样写可能会出问题的。


这样还是不行的,初始化测试通信的时候是没问题的,按位取反正常。 xWriteCH376Cmd( CMD_CHECK_EXIST ); /* 测试单片机与CH376之间的通讯接口 */ xWriteCH376Data( 0x55 ); res = xReadCH376Data( ); res返回值是0xaa.

USB工作模式 也是正确的,可以检测到设备连接,CH376DiskConnect()返回值是0x14,但是CH376DiskMount( )错误,返回值是0x16,以及CH376GetDiskStatus( )返回值是0x02


怎么解决啊?求指导


求助


你检查一下USB口那边VCC、UD-、UD+电压是多少?另外,发完命令要等待数据发完后才能查询中断。


VCC、UD-、UD+分别为5v,0v,3v


FILE_SYS.C文件没有做任何修改的


这是原理图,并口方式,cs一直选通20134715264351.jpg


没有人遇到这种问题吗?


那你拿示波器看下UD+和UD-在发送完成DISKMOUNT命令之后是否有信号出来。XI端的20P的电容去掉。


问题终于解决,12M晶振是坏的!!标注的12M,测量竟然是4M。。。。感谢你的帮助


您好我这ch375芯片工作正常,但是usb存储器初始化之后返回值也是0x2c 麻烦您看看是不是硬件问题1698287488060.png


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