I2C是一种双向2线制同步串行通讯接口,是一类非常经典的串行总线通讯,理解好I2C通讯会帮助理解USB通讯、以太网通讯中的握手、数据帧等环节。
I2C的发展历史:
SPI串行通讯主要是由MOTOROLA公司提出的,MOTOROLA公司的半导体部门独立出来成为后来的freescale。I2C通讯是由PHILIPS公司提出的,PHILIPS公司的半导体部门独立出来成为后来的NXP。2015年NXP公司并购freescale公司。
I2C(Inter IC Bus)的基本特征:
- 串行
- 同步(主机产生时钟线)
- 单端(时钟和数据线上的信号是单端而非差分,用3.3V或5V代表逻辑1)
- 双向(但非双工,因此需要有协议规定数据传输的方向)
- 主从(Mater/Slave)
- 总线(Bus)
I2C(Inter IC Bus)的电气特性:
- SDA 串行数据线
- SCL 串行时钟线
- 所有的SDA引脚,所有的SCL引脚,都是逻辑“与”的关系(只要总线上有任何一个主/从输出逻辑0,则总线对地导通变为0电平)
- SDA和SCL都接了上拉电阻(Pull-Up)
- 总线空闲时,都是高电平(不消耗电流)
- 兼容性好,可以是5V或3.3V电平标准(需和主/从机支持的电平标准匹配)
如果将SDA和SCL的电平状态看做是两只小孩子玩的氢气球,将氢气球飘上去和拉下来的状态看做是SDA或SCL线的先平状态,飘起来的时候为高电平,拉下来的时候为低电平。然后将拉挂载在SDA和SCL线上的主/从设备看做是拉着氢气球的孩子们。平时我们是将这两只氢气球拴着,这时候两只氢气球都是飘起来的,即SDA和SCL都为高电平。这时候有一些小朋友过来,他们共同用两只手分别牵着这两只氢气球。当所有小孩都不往下拉的时候氢气球是飘上去的(SDA或SCL为高电平),这时候小孩子们完全不用费力气(总线空闲时不消耗电流)。当有一个小孩的任何一只手用力(SDA或SCL需消耗电流)往下拉时,对应的氢气球就会被拉下来(SDA或SCL为低电平)。
I2C(Inter IC Bus)的优点:
I2C(Inter IC Bus)的电平逻辑:
I2C(Inter IC Bus)的起始和停止信号: