用CMD_CHECK_EXIST命令测试硬件问题,该命令必然返回数据,如果返回数据不是0FFH,那么通常是 数据总线连接错误,这种问题容易处理,可以根据返回的值分析是哪个数据线有误。 如果返回数据是0FFH,那么可能CH375不正常,例如,无时钟、未复位、读写片选线有误、工作于串 口方式等,如果复位期间CH375的TXD引脚是高电平,那么CH375工作于串口方式,当然并口操作无效 这是论团里说的,我测试过我的ch376无论复位引脚高或低,TXD引脚都是高电平啊,版主怎么处理,我用的是并口方式
你工作在并口模式,TXD应该接GND。返回0xFF那你就检查一下晶振是否起振,25脚电平是否为低电平确保CH376正常工作。以上都正确你再检查你的并口时序。
晶振没问题,12M,且只在XO脚接了一个20PF电容,25脚外部复位引脚为低时也为低,复位引脚接了0.47u上拉电容,时序按照论坛了推荐的这个写的 UINT8 xReadCH376Status( void ) /* 从CH376读状态,仅用于并口方式 */ { UINT8 mData; CH376_DATA_DIR_IN( ); /* 设置并口方向为输入 */ CH376_A0 = 1; CH376_CS = 0; CH376_RD = 0; /* 输出有效读控制信号, 读CH376芯片的状态端口 */ CH376_CS = 0; /* 该操作无意义,仅作延时,CH376要求读写脉冲宽度大于40nS,强烈建议此处执行一条空指令延时以确保并口有足够时间输入数据 */ mData = CH376_DATA_DAT_IN( ); /* 从CH376的并口输入数据 */ CH376_RD = 1; /* 输出无效的控制信号, 完成操作CH376芯片 */ CH376_CS = 1; CH376_A0 = 0; return( mData ); } void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376写命令 */ { CH376_DATA_DAT_OUT( mCmd ); /* 向CH376的并口输出数据 */ CH376_DATA_DIR_OUT( ); /* 设置并口方向为输出 */ CH376_A0 = 1; CH376_CS = 0; CH376_WR = 0; /* 输出有效写控制信号, 写CH376芯片的命令端口 */ // CH376_CS = 0; /* 该操作无意义,仅作延时,CH376要求读写脉冲宽度大于40nS */ CH376_WR = 1; /* 输出无效的控制信号, 完成操作CH376芯片 */ CH376_CS = 1; CH376_A0 = 0; CH376_DATA_DIR_IN( ); /* 禁止数据输出 */ /* mDelay0_5uS( ); mDelay0_5uS( ); mDelay0_5uS( );*/ /* 延时1.5uS确保读写周期大于1.5uS,或者用状态查询代替 */ }
void xWriteCH376Data( UINT8 mData ) /* 向CH376写数据 */ { CH376_DATA_DAT_OUT( mData ); /* 向CH376的并口输出数据 */ CH376_DATA_DIR_OUT( ); /* 设置并口方向为输出 */ CH376_A0 = 0; CH376_CS = 0; CH376_WR = 0; /* 输出有效写控制信号, 写CH376芯片的数据端口 */ // CH376_CS = 0; /* 该操作无意义,仅作延时,CH376要求读写脉冲宽度大于40nS */ CH376_WR = 1; /* 输出无效的控制信号, 完成操作CH376芯片 */ CH376_CS = 1; CH376_DATA_DIR_IN( ); /* 禁止数据输出 */ // mDelay0_5uS( ); /* 确保读写周期大于0.6uS */ }
UINT8 xReadCH376Data( void ) /* 从CH376读数据 */ { UINT8 mData; // mDelay0_5uS( ); /* 确保读写周期大于0.6uS */ CH376_DATA_DIR_IN( ); /* 设置并口方向为输入 */ CH376_A0 = 0; CH376_CS = 0; CH376_RD = 0; /* 输出有效读控制信号, 读CH376芯片的数据端口 */ CH376_CS = 0; /* 该操作无意义,仅作延时,CH376要求读写脉冲宽度大于40nS,强烈建议此处执行一条空指令延时以确保并口有足够时间输入数据 */ mData = CH376_DATA_DAT_IN( ); /* 从CH376的并口输入数据 */ CH376_RD = 1; /* 输出无效的控制信号, 完成操作CH376芯片 */ CH376_CS = 1; return( mData ); } 按照这个思路修改你AVR的IO
我用的是STM32,也在读写过程中加了延时,版主如果有STM32并口例程发给我下,谢谢了,我都调了很多天
25脚外部复位引脚为低时也为低?这是什么意思,正常的话是低电平。另外,TXD用于模式选择应该接GND。时序基本和我们提供的例程一样,你还是检查一下你的硬件。
您好:
我目前也是遇到相同的问题
利用CMD_CHK_EXIST (06)之后, 输入0x65, 也是没有读到反向的数据, 而是读到0xFF, 经确认当时的环境为:
(1) RSTI (pin-2)有接一个0.1uF电容到3.3V
(2) RST (pin-25)在供电之后为logic-0
(3) 12MHz crystal似乎没有oscillate
请问公司有何建议呢?
B/R
首先你的晶振是必须要起振的,一般给芯片上电就可以,你检查一下晶振部分电路,震荡电容有没有加合适?检查硬件电路。
感谢您
我检查过硬件了 晶体没有震荡 晶体震荡电容有合乎标准
似乎遇到问题了
想要ch376工作,晶振就要工作。你是怎么测量晶振没起振?用示波器测量比较好。板子晶振电容接地有没有接好?试试在晶振XO和XI间并一个1M电阻试试。
换个晶振或ch376试试!
怎么测量晶振没起振?用万能表可以吗?
我也是折腾了好久,还是0XFF。我用SPI,软硬法都试过了。