M64使能外部RAM(MCUCR = 0x80)时CH374U出现错误0x81

如题,使用16M晶振,62256RAM,一旦关掉外部RAM使能(MCUCR = 0x00)就正常,偶尔也会有0x81,是什么回事?晶振正常,USB电压正常,是不是读写函数有问题?

CH374是不是挂在外部总线上面的,访问62256的地址是不是和CH374的地址有冲突


CH374U采用什么接口方式?并口的话,总线地址会不会冲突


模拟并口方式,62256完全占用A0~A14引脚(PA,PC),CH374U使用PF端口,控制信号使用PE端口,

#define LIB_CFG_INT_EN 0 /* CH374的INT#引脚连接方式,0为"查询方式",1为"中断方式"

这一句已经注释掉了//#define CH374_INT_WIRE PE6

另外ATMEGA64L最高晶振8M,我使用的是16M,(习惯性使用,没发现有什么不良影响)


出现0X81是读写时序不正确,可能你开启外部总线对CH374的读写时序有影响,仔细检查一下哪个引脚会 有影响。


你把我们库编译的时候把地址都设置在内部RAM,不要放在62256里面去看下有没有问题?还有你需要确定下在开启外部RAM的时候你在访问的时候你拿示波器去看下你的CS以及WR,RD引脚上面有没有信号?


#define CH374_A0_0 Pe2_0 //A0 = 0,可以读写数据 #define CH374_A0_1 Pe2_1 //A0 = 1,可以写命令或读状态 #define CH374_CS_0 Pe3_0 #define CH374_CS_1 Pe3_1 #define CH374_WR_0 Pe5_0 #define CH374_WR_1 Pe5_1 #define CH374_RD_0 Pe6_0 #define CH374_RD_1 Pe6_1

#define CH374_DATA_DAT_OUT( d ) Pf=d; /* 向并口输出数据 */ #define CH374_DATA_DAT_IN( ) Pinf /* 从并口输入数据 */ #define CH374_DATA_DIR_OUT( ) Pf_out /* 设置并口方向为输出 */ #define CH374_DATA_DIR_IN( ) Pf_in /* 设置并口方向为输入 */

void CH374_PORT_INIT(void ) /* 由于使用通用I/O模拟并口读写时序,所以进行初始化 */ { Pe_out; CH374_CS_1; CH374_WR_1; CH374_RD_1; CH374_A0_0; CH374_DATA_DIR_IN( ); /* 设置并口输入 */ }

void Write374Index( UINT8 mIndex ) /* 向CH374写索引地址 */ { CH374_DATA_DIR_OUT( ); /* 设置并口方向为输出 */ CH374_DATA_DAT_OUT( mIndex ); /* 向CH374的并口输出数据 */ Pe_out; CH374_A0_1; CH374_CS_0; CH374_WR_0; /* 输出有效写控制信号, 写CH374芯片的索引端口 */ //CH374_CS_0; /* 该操作无意义,仅作延时,CH374要求读写脉冲宽度大于70nS */ CH374_WR_1; /* 输出无效的控制信号, 完成操作CH374芯片 */ CH374_CS_1; CH374_A0_0; CH374_DATA_DIR_IN( ); /* 禁止数据输出 */ }

void Write374Data( UINT8 mData ) /* 向CH374写数据,索引地址自动加1 */ { CH374_DATA_DIR_OUT( ); /* 设置并口方向为输出 */ CH374_DATA_DAT_OUT( mData ); /* 向CH374的并口输出数据 */ Pe_out; CH374_A0_0; CH374_CS_0; CH374_WR_0; /* 输出有效写控制信号, 写CH374芯片的数据端口 */ //CH374_CS_0; /* 该操作无意义,仅作延时,CH374要求读写脉冲宽度大于70nS */ CH374_WR_1; /* 输出无效的控制信号, 完成操作CH374芯片 */ CH374_CS_1; CH374_DATA_DIR_IN( ); /* 禁止数据输出 */ }

UINT8 Read374Data( void ) /* 从CH374读数据,索引地址自动加1 */ { UINT8 mData; CH374_DATA_DIR_IN( ); /* 设置并口方向为输入 */ Pe_out; CH374_A0_0; CH374_CS_0; CH374_RD_0; /* 输出有效写控制信号, 读CH374芯片的数据端口 */ CH374_CS_0; /* 该操作无意义,仅作延时,CH374要求读写脉冲宽度大于70nS,强烈建议此处执行一条空指令延时以确保并口有足够时间输入数据 */ mData = CH374_DATA_DAT_IN( ); /* 从CH374的并口输入数据 */ CH374_RD_1; /* 输出无效的控制信号, 完成操作CH374芯片 */ CH374_CS_1; return( mData ); }

UINT8 Read374Data0( void ) /* 从索引端口读出数据,索引地址不变,适用于[读出->修改->写回]操作 */ { UINT8 mData; CH374_DATA_DIR_IN( ); /* 设置并口方向为输入 */ Pe_out; CH374_A0_1; CH374_CS_0; CH374_RD_0; /* 输出有效写控制信号, 读CH374芯片的索引端口 */ CH374_CS_0; /* 该操作无意义,仅作延时,CH374要求读写脉冲宽度大于70nS,强烈建议此处执行一条空指令延时以确保并口有足够时间输入数据 */ mData = CH374_DATA_DAT_IN( ); /* 从CH374的并口输入数据 */ CH374_RD_1; /* 输出无效的控制信号, 完成操作CH374芯片 */ CH374_CS_1; CH374_A0_0; return( mData ); }


贴上接口程序,火速求救!都一个星期了。。。


你把我们库编译的时候把地址都设置在内部RAM,不要放在62256里面去看下有没有问题? 请教上面的话是什么意思,如何设置把库编译的时候把地址都设置在内部RAM?? 我使用ICC,程序都是直接copy原例子过来再修改一下接口的


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