我用的是89le52rc并口,22.1184M,总是初始化不了,ch375晶振12M正常工作,25脚低,26脚高,2脚为低,是什么原因???请求指点[Emot]1[/Emot]
初始化过不了,检查读写时序,以及硬件连接,硬件有没有虚焊等等,软件上面 上电之后要先延时50ms左右在操作。
你说的都是正常的现象。 你做测试程序,发0x06命令,然后发0X55数据,再读数据,看看读到的数据是多少。
测试程序?哪一个?原谅小生
开始延时100ms了,还是不行,下面是程序,请指教!!!
void CH375_Write_Cmd(unsigned char cmd) //写命令 { delay(DELAYTIME); //稍作延时 CH375_CS=0; //打开片选 CH375_A0=1; //命令模式 DATA_PORT=cmd; //输出命令码 CH375_WR=0; //打开写使能 delay(DELAYTIME); //稍作延时 CH375_WR=1; //关闭写使能 CH375_CS=1; //关闭片选 CH375_A0=1; //恢复A0为高电平 delay(DELAYTIME); //稍作延时 }
/****************************************************************** - 功能描述:向CH375写入数据 - 隶属模块:CH375模块 - 函数属性:内部 - 参数说明:dat:是要写入到CH375中的一个字节的数据 - 返回说明:无返回 ******************************************************************/
void CH375_Write_Dat(unsigned char dat) //写数据 { delay(DELAYTIME); //稍作延时 CH375_CS=0; //打开片选 CH375_A0=0; //数据模式 DATA_PORT=dat; //输出数据 CH375_WR=0; //打开写使能 delay(DELAYTIME); //稍作延时 CH375_WR=1; //关闭写使能 CH375_CS=1; //关闭片选 CH375_A0=1; //恢复A0为高电平 delay(DELAYTIME); //稍作延时 }
/****************************************************************** - 功能描述:从CH375读取一个字节 - 隶属模块:CH375模块 - 函数属性:内部 - 参数说明:无 - 返回说明:读到的字节 ******************************************************************/
unsigned char CH375_Read_Dat() //读数据 { unsigned char temp; CH375_CS=0; //打开片选 CH375_A0=0; //数据模式 CH375_RD=0; //打开读使能 DATA_PORT=0xff; //51单片机IO作输入,先置高 delay(DELAYTIME); //稍作延时 temp=DATA_PORT; //读取端口上的数据 CH375_RD=1; //关闭读使能 CH375_CS=1; //关闭片选 CH375_A0=1; //恢复A0为高电平 return temp; //返回读到的值 }
/****************************************************************** - 功能描述:等待CH375的中断,并获取中断状态 - 隶属模块:CH375模块 - 函数属性:内部 - 参数说明:无 - 返回说明:中断状态码 返回0说明操作成功 ******************************************************************/
unsigned char CH375_Wait_Int() //等待中断信号,即INT引脚上产生低电平,并获取中断状态码,获取后INT恢复高电平,以产生下一次中断信号 { CH375_INT=1; //IO作输入先置高 while(CH375_INT); //等待中断 CH375_Write_Cmd(CMD_GET_STATUS); //产生操作完成中断,获取中断状态 return CH375_Read_Dat(); }
/****************************************************************** - 功能描述:初始化CH375芯片 - 隶属模块:CH375模块 - 函数属性:外部,供用户调用 - 参数说明:无 - 返回说明:执行结果 ******************************************************************/
unsigned char CH375_Init() { unsigned char i=0; //CH375_Write_Cmd(CMD_GET_IC_VER); /* 获取芯片及固件版本 */ // i=CH375_Read_Dat(); /* 版本 */ //if(i<0xA2) //UART_Send_Str("no support"); // UART_Send_Byte(i); // return 1; /* 不支持该芯片 */
CH375_Write_Cmd(CMD_SET_USB_MODE); /* 设置USB工作模式 */ CH375_Write_Dat(6); /* 模式代码,自动检测USB设备连接 */
for(i=0;i<250;i++) { /* 等待操作成功,通常需要等待10uS-20uS */ delay(10); if(CH375_Read_Dat()==CMD_RET_SUCCESS ) UART_Send_Str("connect success"); return 0; /* 操作成功 */ }
return 1; /* CH375出错,例如芯片型号错或者处于串口方式或者不支持 */ }
/****************************************************************** - 功能描述:初始化磁盘 - 隶属模块:CH375模块 - 函数属性:外部,供用户调用 - 参数说明:无 - 返回说明:操作结果,0表示初始化磁盘成功 1表示初始化磁盘失败 - 注:在使用U盘之前,先要调用此函数,此函数将进行判断 磁盘是否连接,初始化是否成功等操作 ******************************************************************/
unsigned char CH375_InitDisk() { unsigned char status,i,j=0;
status=CH375_Wait_Int(); if(status==USB_INT_DISCONNECT) UART_Send_Str("USB_INT_DISCONNECT");return 1; /* USB设备断开 */
while(1) { CH375_Write_Cmd(CMD_DISK_INIT); /* 初始化USB存储器 */ status=CH375_Wait_Int(); /* 等待中断并获取状态 */ if(status==USB_INT_SUCCESS) break; }
while(1) //以下代码均源自沁恒的官方U盘初始化函数,借用它可以提高对U盘的兼容性! { j++; CH375_Write_Cmd(CMD_DISK_SIZE); /* 获取USB存储器的容量 */ status=CH375_Wait_Int(); /* 等待中断并获取状态 */ if(status==USB_INT_SUCCESS) break; else { delay(1000); CH375_Write_Cmd(CMD_DISK_R_SENSE); /* 获取USB存储器的容量 */ status=CH375_Wait_Int(); /* 等待中断并获取状态 */ if(status==USB_INT_SUCCESS) /* 出现错误 */ continue; else return 1; } if(j==5) return 1; } for(i=0;i!=5;i++) { CH375_Write_Cmd( CMD_DISK_READY ); /* 获取USB存储器的容量 */ status=CH375_Wait_Int(); /* 等待中断并获取状态 */ if(status==USB_INT_SUCCESS) UART_Send_Str("USB_INT_SUCCESS"); return 0; /* U盘已经成功初始化 */ } return 1; }
测试命令,返回的都是0xfa,为什么?
xWrite375Cmd( 0x06 ); xWrite375Dat( 0x55 ); xRead375Dat( )应该为0xAA 再作一次 xWrite375Cmd( 0x06 ); xWrite375Dat( 0xAA ); xRead375Dat( )应该为0x55
检查一下硬件吧。读写时序应该问题不大。
噢,搞了一个星期,原来真是硬件问题,CH375,封装引脚,并到单片机时,接反了!!!!!!!!!!
嘿 哥们 你的是扇区读写 还是 文件级的读写? 我做文件级的读写 很希望和你交流一下
文件级读写我们提供库文件,直接调用库文件就可以了,到在线下载里下载CH375LIB.ZIP,根据MCU型号和编译器选择相应的库。