关于CH375的问题

我初始化CH375的返回值总是0X81,在初始化之前也将CH375复位了(将RSTI引脚加高实现)。我使用的是并口连接电路,不知如何解决,谢谢

使用的初始化程序是调用的贵公司的库,我用的是AVR单片机


库初始化返回0X81的话,说明你的硬件上还存在问题。你先检查一下晶振是不是正常起振了(可用示波器观察波形),CH375芯片是不是正常复位了(可查看25脚,26脚电平,正常复位的话25脚应该为低电平,26脚应该为高电平),此外仔细对照我们说明文档上的电路图检查你的硬件连线,如工作在并口方式下TXD没有接地等。


我用示波器看了,在RSTI为高电平的时候25为高,26为低;在RSTI为低电平时25为低,26为高。晶振也是其振的。硬件方面:TXD也接地了,除了2号脚的0.47U电容没接外,其他的CH375的周边电路是和[CH375DS1。PDF]上的并口连接是一样的。就是不知道什么原因,很是郁闷。。。


先做测试命令,只有测试命令通过之后,才能正常的操作375芯片


现在又有问题了,程序初始化部分已经通过。但现在我要打开U盘里的一个文件,返回值是0x23退出。我用的是你们的AVR库函数和例程,只修改了控制端口和数据端口


查信息得知#define CMD_UNLOCK_USB 0x23 /* 设备方式: 释放当前USB缓冲区 */ 但读写U盘CH375应该是初始化为主机状态吧,是不是你们提供的例程我们还需要修改什么东西啊


你用的是CH375LIB/FILELIBB的例子程序,只要根据你的硬件连接改下定义就可以了


提供的例子程序,可能客户需要修改的就是三个接口子函数以及中断线的定义,如果DISK-READY函数通过了的话,那么,打开文件也应该没有问题的,你是用仿真器调试的吗?如果是的话,那么,建议你将你的仿真器的速度调到最快,还有就是三个读写子函数的速度上面也要尽量的快,如果可以的话,你可以将三个读写子函数帖出来看下,或者发到tech@wch.cn这个邮箱


#define CH375_A0 2 #define CH375_CS 5 #define CH375_WR 4 #define CH375_INT 6 #define CH375_RD 7

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { mDelay1uS( ); mDelay1uS( ); /* 至少延时1uS */ /* *(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd; 通过并口直接读写CH375而非普通I/O模拟 */ // PORTB |= 0x08; /* 输出A0=1 */ PORTE |= (1< PORTA = mCmd; /* 向CH375的并口输出数据 */ DDRA = 0xFF; /* 并口D0-D7输出 */ // PORTB &= 0xF9; /* 输出有效写控制信号, 写CH375芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */ DDRA = 0xFF; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ PORTE |= (1< PORTE &=~(1< PORTE &=~(1< NOP(); NOP(); // PORTB |= 0x07; /* 输出无效的控制信号, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */ PORTE |= (1< DDRA = 0x00; /* 禁止数据输出 */ // PORTB &= 0xF7; /* 输出A0=0; 可选操作 */ PORTE &=~(1< mDelay1uS( ); mDelay1uS( ); /* 至少延时2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { /* *(volatile unsigned char *)CH375_DAT_PORT_ADDR = mData; 通过并口直接读写CH375而非普通I/O模拟 */ PORTA = mData; /* 向CH375的并口输出数据 */ DDRA = 0xFF; /* 并口D0-D7输出 */ // PORTB &= 0xF1; /* 输出有效写控制信号, 写CH375芯片的数据端口, A0=0; CS=0; WR=0; RD=1; */ PORTE &=~(1< PORTE &=~(1< PORTE &=~(1< PORTE |= (1< DDRA = 0xFF; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ NOP(); // PORTB |= 0x07; /* 输出无效的控制信号, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ PORTE &=~(1< PORTE |= (1< DDRA = 0x00; /* 禁止数据输出 */ mDelay1uS( ); /* 至少延时1.2uS */ mDelay1uS( ); }

UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { UINT8 mData; /* mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR; 通过并口直接读写CH375而非普通I/O模拟 */ mDelay1uS( ); /* 至少延时1.2uS */ mDelay1uS( ); DDRA = 0x00; /* 数据输入 */ // PORTB &= 0xF2; /* 输出有效读控制信号, 读CH375芯片的数据端口, A0=0; CS=0; WR=1; RD=0; */ PORTE |= (1< PORTE &=~(1< PORTE &=~(1< PORTE &=~(1< DDRA = 0x00; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ mData = PINA; /* 从CH375的并口PA输入数据 */ // PORTB |= 0x07; /* 输出无效的控制信号, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ PORTE &=~(1< PORTE |= (1< return( mData ); }


以上是三个读写函数的定义,请指教,谢谢


CH375DiskConnect( );这个是通过了,但是在这个地方CH375DiskReady( )没有通过。5次循环以后进入下面的程序,调用CH375FileOpen( )它的返回值是0x23


不是仿真调试,在硬件电路上直接加载程序的。各个引脚的连接应该是没问题的,我已经查了很多遍 在上面hcn工程师有提到中断线的问题,我想请问中断线是那个定义?我一直没有注意中断线这个概念和与之对应的程序,谢谢指导


#define CH375_INT_WIRE ( PINB & 0x10 ) /* PINB.4, CH375的中断线INT#引脚,连接CH375的INT#引脚,用于查询中断状态 */


通过了,谢谢,是中断线没有修改


能提供一个CH375写U盘追加数据的程序吗?基于CH375HFB.A库的应用的程序。现在我们急需相关资料,谢谢


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