IIC波形问题分享

您所在的位置:网站首页 I2C主从切换波形 IIC波形问题分享

IIC波形问题分享

#IIC波形问题分享| 来源: 网络整理| 查看: 265

  各位好,最近在调试IIC的时候遇到了SDA波形有半高电平的状态,下面分享一下解决的方法。

  1.测试方法

  通过IIC将数据0XEF写入eeprom中的0x01地址。整个操作过程如下且通过示波器测试波形 通信参数:起始信号+写0XA0+从机回ACK+写0X01+从机回ACK+写0XEF+从机回ACK+STOP

  2.问题描述

  注意:(以下图片中黄色为SDA,蓝色为SCK)  测试发现写入过程中,从机每次的ACK应答都会产生一个半高波形,如下图红框所示。

  猜想:SDA在从机产生ACK应答时主机和从机发生了电平冲突。

  关于ACK信号:主机写入过程中,当8bit写入完成后,在随后的第九个时钟上如果SDA为低,则主机收到ACK,若是SDA为高,则主机收到NOACK。

  如下是有问题的程序关键部分:

  从ACK的介绍和有问题的程序上看,当第八个bit完成时,SCL会拉低,然后在拉高。在SCL拉低的时候从机立即会进行数据变化,产生低电平(ACK信号),但是此时主机的SDA还是输出高状态,所以电平冲突,造成了半高电平的产生。

  3.解决办法

  从问题上看,说明是在从机发送ACK时两端产生了SDA控制权的冲突,导致了这个问题。因为SDA本身带有上拉,所以第一删除无用的SDA输出高语句,第二当需要主机发送高电平时,主机设置SDA为输入状态,通过外部的上拉将SDA稳定在高点平。程序和实际结果如下所示,可以看到ACK时的半高状态消除:

  4.结论:

  1.模拟IIC情况下,如果MCU支持开漏输出,则用开漏输出,因为开漏只能拉低不能拉高,这样不会造成电平冲突等问题。

  2.如果用推挽输出的话,那么MCU在控制SDA引脚时,  a) 输出高电平,则MCU设置SDA为输入状态,靠外部上拉将SDA稳定在高点平;  b) 输出低电平,则MCU这只SDA为输出状态,且输出低电平。  c) 输入状态,MCU设置SDA为输入状态。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3