最近做项目发现换了个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 high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);
}
修改后的停止信号时序文章来源:https://www.toymoban.com/news/detail-531941.html
//产生IIC停止信号
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=0;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
delay_us(4); // 添加延时
IIC_SDA=1;//发送I2C总线结束信号
}
多说一句:为了解决24c02问题去搜索博文看原因,博主还要订阅收费。开源精神哪里去了。像这种不是什么高科技的有什么好订阅的。个人意见。文章来源地址https://www.toymoban.com/news/detail-531941.html
到了这里,关于M24C02和AT24C02读写失败的原因的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!