常用硬件接口简述及调试要点:I²C



I²C接口是在嵌入式调试中最为常用的接口,由于其逻辑简单,接线少,且稳定可靠,因此经常作为外部设备连接主控的接口。我将按照如下模式进行简述,接口的历史渊源,接口的物理连接和特点,运行流程和调试的要点4个方面来介绍,具体请见下文。

  • I²C接口的历史渊源

以下摘自WIKI百科,地址:https://zh.wikipedia.org/wiki/I%C2%B2C

  • I²C(Inter-Integrated Circuit)字面上的意思是集成电路之间,它其实是I²C Bus简称,所以中文应该叫集成电路总线。
  • 它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。
  • I²C的正确读法为“I平方C”(”I-squared-C”),而“I二C”(”I-two-C”)则是另一种错误但被广泛使用的读法。
  • 自2006年11月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属设备地址。

总体来说I²C接口,是80年代创造出来的一个接口,而且现在已经是免费的。


  • I²C接口的物理连接方式和特点

I²C接口是主从模式的接口,由2根线组成,分别为SCL(时钟线)和SDA(数据线),其特点如下:

  • I²C接口SCL是时钟线由主机提供,SDA由从机提供,SDA传输数据是高位先传输,即:大端传输,每次传输8bit。
  • I²C接口支持多从机(multimastering)连接,但任何时间点只能有一个从机。
  • I²C接口上每个从设备都有自己的一个addr,共7个bit,广播地址全0.
  • I²C接口数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s

  • I²C接口运行流程

如下图,I²C接口数据常见3种方式:

注:图片来自网络,若有侵权,请联系博主删除!)
其各状态电平要求如下:

  • 开始条件:SCL保持高,SDA下降
  • 结束条件:SCL保持高,SDA上升
  • 数据保持:SCL保持高,SDA不变
  • 数据更改:SCL保持低,SDA变化

即:主机在读取SDA上的数据时,是按照SCL为高时,SCL为低时的数据时自动忽略的。


  • I²C接口的调试要点

下面是我总结的关于I²C接口调试的几个要点,也是我平时调试时遇到的坑,总结下来作为后续查找问题的方向。

I²C接口不通时,一般现为申请失败或者注册失败按照如下顺序排查:

  1. 检查硬件电路SCL和SDA是否正确连接到2个设备的对应脚位,是否反向(这是新手硬件工程师最喜欢犯的错误)。
  2. 检查电路设计时,是否按照需求给SDA和SCL增加上拉电阻,且上拉电阻是否正确或者过大,上位电压是否合理,可用万用表量测是否在默认情况保持在高电平状态下,且电压达到芯片要求。
  3. 检查软件驱动的配置是否和硬件电路的设计完全一致,I²C组脚位配置和使能开关是否打开。
  4. 检查I²C组脚位是否被其他设备驱动配置成其他方式应用。
  5. 更换器件验证,看是否器件个体出现异常或者损坏。

I²C接口注册成功,但应用时出现异常无法连接,应按照如下方式进行排查:

  1. 检查电路设计时,是否按照需求给SDA和SCL增加上拉电阻,且上拉电阻是否正确或者过大,脚位的驱动电流过小也会导致数据量大的时候出现异常。
  2. 检查SCL的频率是否设置过高,一般常用的IC的SCL不应超过400Kbit/s,可在调试过程中适当减少时钟值来验证。
  3. 检查I²C组脚位是否被其他设备驱动配置成其他方式应用,由于驱动启动时间不完全一直,所以存在有一定几率出现脚位配置会被临时改动。
  4. 检查是否有重复的I²C地址存在,若2个设备的地址重复,会导致运行过程中随机出错。
  5. 检查I²C运行的触发条件是否正常,包括中断方式的时候,出现无中断,轮询方式,轮询机制跳出。
  6. 更换器件验证,看是否器件个体出现异常或者损坏。

I²C接口注册成功,连接正常,但上报数据异常,应按照如下方式进行排查:

  1. 检查是否有重复的I²C地址存在,若2个设备的地址重复,会导致运行过程中随机出错。
  2. 检查I²C运行的触发条件是否正常,包括中断方式的时候,出现无中断,轮询方式,轮询机制跳出。
  3. 交叉或者更换器件验证,看是否器件个体出现异常或者损坏。
  4. 联系IC原厂,要求检查从机IC原始FIRMWARE是否正确匹配我们的主机IC或者外部设备。

以上为个人对I²C接口调试的基本总结。

版权所有丨如未注明,均为原创,转载请注明转自:https://whonee.net/iic-interface-brief-introduction.html

《常用硬件接口简述及调试要点:I²C》有2个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注