我的单片机不能与CH372正常通信,不能设置工作模式,我想问下I/O地址是多少,单片机与372是直接相连的,D0-D7接P2.0-P2.7,P3.4接WR,P3.5接RD,P3.7接A0,CS接地。我想问下CH372_CMD_PORT和CH372_DAT_PORT,为多少呀!还有就是CH372晶振一个脚对地是1.8V,另一个有3.8V-4V,会不会对通讯有很大影响呀!
你是用IO口模拟总线去操作CH372的,那么就不存在CH372_CMD_PORT和CH372_DAT_PORT,你硬件修改一下,参考下面的读写时序: /* 单片机的引脚 CH372芯片的引脚 P3.2 INT# P1.0 A0 P1.1 CS# 如果模拟出的并口上只有CH372,那么CS#可以直接接低电平,强制片选 P1.2 WR# P1.3 RD# P0(8位端口) D7-D0 */ sbit CH372_A0 = P1^0; sbit CH372_CS = P1^1; sbit CH372_WR = P1^2; sbit CH372_RD = P1^3;
void mDelay1_2uS( ) /* 至少延时1.2uS,根据单片机主频调整 */ { return; }
void CH372_PORT_INIT( ) /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */ { CH372_CS = 1; CH372_WR = 1; CH372_RD = 1; CH372_A0 = 0; P0 = 0xFF; /* 并口输入 */ }
void xWriteCH372Cmd( UINT8 mCmd ) /* 外部定义的被CH372程序库调用的子程序,向CH372写命令 */ { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时1uS */ P0 = mCmd; /* 向CH372的并口输出数据 */ CH372_A0 = 1; CH372_CS = 0; CH372_WR = 0; /* 输出有效写控制信号, 写CH372芯片的命令端口 */ CH372_CS = 0; /* 该操作无意义,仅作延时,CH372要求读写脉冲宽度大于100nS */ CH372_WR = 1; /* 输出无效的控制信号, 完成操作CH372芯片 */ CH372_CS = 1; CH372_A0 = 0; P0 = 0xFF; /* 禁止数据输出 */ mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时2uS */ }
void xWriteCH372Data( UINT8 mData ) /* 外部定义的被CH372程序库调用的子程序,向CH372写数据 */ { P0 = mData; /* 向CH372的并口输出数据 */ CH372_A0 = 0; CH372_CS = 0; CH372_WR = 0; /* 输出有效写控制信号, 写CH372芯片的数据端口 */ CH372_CS = 0; /* 该操作无意义,仅作延时,CH372要求读写脉冲宽度大于100nS */ CH372_WR = 1; /* 输出无效的控制信号, 完成操作CH372芯片 */ CH372_CS = 1; P0 = 0xFF; /* 禁止数据输出 */ mDelay1_2uS( ); /* 至少延时1.2uS */ }
UINT8 xReadCH372Data( void ) /* 外部定义的被CH372程序库调用的子程序,从CH372读数据 */ { UINT8 mData; mDelay1_2uS( ); /* 至少延时1.2uS */ P0 = 0xFF; /* 输入 */ CH372_A0 = 0; CH372_CS = 0; CH372_RD = 0; /* 输出有效写控制信号, 读CH372芯片的数据端口 */ CH372_CS = 0; /* 该操作无意义,仅作延时,CH372要求读写脉冲宽度大于100nS */ mData = P0; /* 从CH372的并口输入数据 */ CH372_RD = 1; /* 输出无效的控制信号, 完成操作CH372芯片 */ CH372_CS = 1; return( mData ); }
我想问一下CH372A和CH372B有什么区别呀,我用同样的程序初始化不同芯片怎么结果不同呀!
没什么本质的区别。CH372B比CH372A的速度快,温度特性更好,软件上是兼容CH372A的。 具体的结果是什么?
我昨天对CH272B初始化程序,电脑也能识别驱动也装上了,可是第二次就不行了,我能够返回值 我写CMD_SET_USB_MODE这个命令后,返回0X51应该正常吧,可是我发CMD_CHECK_EXIST这个命令后再写入数据,返回的数据就不正常了,并不是取反的值,我检查电路,发现晶振不正常了,D+也为0V ,电脑连硬件插入的提示都没有了。我换其它晶振都无法正常工作。我又换了一块372A的试,结果又出现相同情况,返回值全是0XFF我现在都不敢再试了。我的电路图你们也曾经看过说没问题。问题会在什么地方呢?难道是我的程序有问题?
晶振有问题,你换个晶振实验一下,晶振不起振可能是 1 如果是用助焊剂焊接的小电容,由于助焊剂有导电成分,有时会振荡不起来. 2 在电源为3.3v的情况下,有时不太容易起振,可以将XI端的电容降到10P或者干脆去掉. 3 根据经验有的小电容和晶振受潮漏电,导致不起振. 4 万用表或者示波器测量过程中会由于并联电容电阻的存在导致停振
"万用表负端接芯片GND,测XI和XO引脚对地电阻,如果电阻较小,说明晶体或者电容漏电,小于几百K可能就会导致无法振荡, 两个电容用15p左右的,如果XI端的电容量小些比较容易起振"
我的电源是用的5V 供电,我很想问的是D+开始为3.3V,不知怎么的,调试一会D+就为0V 了,电路工作不正常,芯片坏的可能性大吗?