上电后26为高电平,25低。测试命令可以通过。插入U盘没有反应,这个怎么办?INT#脚一直是高电平(用示波器看)。
估计问题不大,因为这时候芯片已经正常工作了,根据你的情况,建议检查一下以下地方: 1.是否设置了主机模式06! 2.CH375工作的电压是多少,如果是3.3V的情况下,U盘的电压是怎么提供的?这时候U盘必须要单独供电,否则无法工作! 3.和2一样,检查一下U盘插上去以后U盘的电压是多少,尽量保证在4.8V以上! 4.UD+和UD-有没有串电阻?如果有的话,最好在5欧以内!
xWriteCH375Cmd( 0x06 ); xWriteCH375Data( 0x5a ); while(1){ i=xReadCH375Data(); SSPrintf("Data:"); sprintf(buf,"%x",i); SSPrintf(buf); SSPrintf("\n"); if(i==0xa5)break; } mDelaymS(20); i = CH375LibInit( ); /* 初始化CH375程序库和CH375芯片,操作成功返回0 */ mStopIfError( i );
/*A处,可以通过*/ while ( 1 ) { SSPrintf( "Wait Udisk\n" ); /*B处,一直出在查询状态,不能通过*/ while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); /* 查询CH375中断并更新中断状态,等待U盘插入 */ mDelaymS( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */ //* 检查U盘是否准备好,有些U盘不需要这一步,但是某些U盘必须要执行这一步才能工作 */ for ( i = 0; i < 10; i ++ ) { // 有的U盘总是返回未准备好,不过可以被忽略 mDelaymS( 100 ); SSPrintf( "Ready ?\n" ); if ( (j=CH375DiskReady( )) == ERR_SUCCESS ) break; // 查询磁盘是否准备好 }
U盘供电一直在4.6V以上,原先串了一个电阻,是10欧的,后来被短起来了。 说明:我原来是可以检测到INT#的低电平的,突然之间就不行了。
你将INT#脚撬起来,然后用示波器去看在查上U盘的时候是否有低电平?怀疑你的电路有问题!
INT#脚和cpu的连线没有出问题啊。会是什么问题?
你可以这样做一个测试,在CH375LIBInit()之后,后面的检测U盘什么的都不要做,你看下插上U盘之后375的中断引脚电压是多少?
我有类似问题。。做了这个测试之后。。INT脚是4.94V。。然后呢?
只要测试命名返回正常。CH375LIBInit()这个库返回0X00,那么。插入U盘一定会将中断引脚拉低的。否则就是你初始化CH375芯片有问题。
。。unsigned char CH375_Init() { unsigned char i=0; CH375_Write_Cmd(CMD_GET_IC_VER); /* 获取芯片及固件版本 */ i=CH375_Read_Dat(); /* 版本 */ if(i<0xA2) return 1; /* 不支持该芯片 */
CH375_Write_Cmd(CMD_SET_USB_MODE); /* 设置USB工作模式 */ CH375_Write_Dat(0x06); /* 模式代码,自动检测USB设备连接 */
for(i=0;i<250;i++) { /* 等待操作成功,通常需要等待10uS-20uS */ delay(10); if(CH375_Read_Dat()==CMD_RET_SUCCESS ) return 0; /* 操作成功 */ }
return 1; /* CH375出错,例如芯片型号错或者处于串口方式或者不支持 */ } 这个是我的375初始化。然后返回成功了。。但是我插U盘。。ACT还是高电平。INT也是高电平~~还有。。在偶然的情况下。。我把A0和CS脚接反。。(就是本来A0接2.0。CS接2.1的,变成A0接2.1,cs接2.0)ACT脚竟然正常了。。拔U盘。插U盘。。对应灭和亮。当然。。375初始化不成功了。为什么呢?
你需要做测试命令, cmd = 0x06 data = 0x55 i = data 正确的话i应该为0XAA 只有这样才能说明你的硬件没问题,按照你上述的程序。无法说明你的硬件是没问题的。
我的初始化成功了。。但是又出现了新的问题。我在读U盘内存的时候。 CH375_Write_Cmd(CMD_RD_USB_DATA); temp = CH375_Read_Dat(); for(i=0;i { buffer[i] = CH375_Read_Dat(); } temp1 = (unsigned long)buffer[0]<<24; temp1 |= (unsigned long)buffer[1]<<16; temp1 |= (unsigned long)buffer[2]<<8; temp1 |= (unsigned long)buffer[3]<<0; temp1>>=1; u32tostr(temp1,buffer); UART_Send_Str("U盘内存为:"); UART_Send_Str(buffer);
UART_Send_Str("KB\n\r"); return 0; //正常返回0 的时候。。卡在了。U32TOSTR这里。。这个函数是有的。。但是程序过不去。。。
unsigned char CH375_ReadDiskSize(void) { unsigned char buffer[8],temp,i,t; unsigned long temp1/*,temp2*/; CH375_CS=0; // UART_Send_Str("1"); CH375_Write_Cmd(CMD_DISK_SIZE); //UART_Send_Str("2"); if(CH375_Wait_Int() != USB_INT_SUCCESS) { CH375_CS=1; UART_Send_Str("读取U盘内存失败\n\r"); return 1; }
然后我这样改 for(i=0;i { buffer[i] = CH375_Read_Dat(); UART_Send_Str("5"); } 程序执行。。发现都没输出5