最近做项目发现换了个st 的24c02 ,导致 24c02 读写失败。一般不认真看规格书,很难发现问题根源。原来是停止信号时序问题。脸都搞绿了,后来还怀疑是芯片不良导致了,换了几个芯片还是一样的问题。芯片厂家不厚道。没意思。
解决办法:
代码如下,恭喜有缘人少走一个星期的弯路。留下好评。
我的是模拟i2c ,其他读写函数都不用变,只需要改停止信号的的时序即可。
原来的停止信号:
//产生IIC停止信号
//产生IIC停止信号
void IIC_Stop(void)
{SDA_OUT();//sda线输出IIC_SCL=0;IIC_SDA=0;//STOP:when CLK is high DATA change form low to highdelay_us(4);IIC_SCL=1; IIC_SDA=1;//发送I2C总线结束信号delay_us(4);
}
修改后的停止信号时序
//产生IIC停止信号
void IIC_Stop(void)
{SDA_OUT();//sda线输出IIC_SCL=0;IIC_SDA=0;//STOP:when CLK is high DATA change form low to highdelay_us(4);IIC_SCL=1; delay_us(4); // 添加延时 IIC_SDA=1;//发送I2C总线结束信号
}
多说一句:为了解决24c02问题去搜索博文看原因,博主还要订阅收费。开源精神哪里去了。像这种不是什么高科技的有什么好订阅的。个人意见。