最近用电阻触摸屏做项目,AT24C02存储触摸矫正数据。使用正点原子探索者F4的触摸屏和IIC例程时,提示“24C02 Check Failed!” 开始以为是芯片问题,用野火家的IIC历程可以测试通过,觉得非常奇怪,于是上逻辑分析仪。写入数据可以收到应答,但是读取数据就比较牛逼了,读哪个地址返回的数据和地址一样,读出的数据和见下图。尼玛,太吓人了。。。。。。。。。。
图1 写入数据
图2 读取数据
图3 读取数据
心烦意乱,鼓捣了一个晚上最后发现是IIC停止部分驱动程序有问题,看停止时序: 纳秒级别。
将IIC_Stop代码中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 high
delay_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 high
delay_us(4);
IIC_SCL=1;
delay_us(4);
IIC_SDA=1;//发送I2C总线结束信号
}