通信协议——I2C

单片机I2C

I2C简介

I2C(Inter-Integrated Circuit),也写作IIC。

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。

这是百度百科的解释,基本上概括了I2C总线的特性。

先说I2C的双向二线制,I2C通信需要两根线SDA(数据线),SCL(信号线)。当然作为参考的GND(地线)也必须要,因为他不传输数据,也不占用IO,就不考虑在必须的两根线之中。

两根线能玩出多大的花样。电平组合就只有4种(00,01,10,11),如果考虑到跳变+电平的组合,情况就稍微复杂了一点。实际上,在I2C种有效的信号就只有以下几种:
1
注意I2C的端口是开漏输出,这是为了实现线与的功能(任何一端把电平拉低,整个线路都是低电平了),在设计硬件电路是,注意上拉电阻

这里我们借鉴存储芯片 24C02 的数据手册来说明 地址在这

因为这个芯片是标准的I2C接口的,很多单片机教程也是用这个入手的。

下面是一些基本概念

  • I2C通信的两端分别为主机(Master)和从机(Slaver),可以1对1,也可以1对多,用设备地址区别不同的从机。多个主机需要总线仲裁。
  • I2C设备地址有7位,最低位(LSB)bit0是读写位,决定接下来的操作时读(bit0 = 1)还是写(bit0 = 0)
bit7bit6bit5bit4bit3bit2bit1bit0
XXXXXXX R / W ‾ R/\overline{W} R/W
  • 所以一个I2C总线最多接128个设备,多了就会地址冲突。

I2C时序

IIC信号有以下几个组成(也就是第一张图)

  • 数据传输
    注意只有在SCL为1是,SDA才有作用。高电平->1,低电平->0。
    在SCL为0时,此时用来改变SDA的状态。
  • 开始信号结束信号
    在SCL为1是,SDA 下跳变,是开始信号;
    在SCL为1是,SDA 上跳变,是结束信号。
    开始信号和结束信号总是由主机控制的。
  • 应答信号
    在传输数据时,接收方应该告知发送方是否完成接收(注意与Master和SlaverS区别开来,Master可能发送数据,也有可能接收数据,Slaver同理)。
    因为I2C总线的上拉特性,在传输数据的第9位时,接收方把SDA拉低表示接收到数据,产生应答信号(ACK),否则产生非应答信号(NACK),发送方可能需要重新发送数据。

关于IIC的SCL的最高频率,电平变化时间,电平持续时间这些就不说了,不同的芯片参数不同,我们就理想化处理吧。

完成一次I2C传输,称之为一帧,帧结构如下:

  1. 主机向从机发送数据
    1
    主机先发送 从机地址D6~D0,在确定R/W位为0。发送的数据可以是一个或多个字节。
  2. 主机从从机接收数据
    在这里插入图片描述
    R/W位为1,注意此时数据的方向和应答信号A的方向。
    第一个A是从机应答,之后的A由主机应答。
  3. 主机先发再收
    1
    这样可以节约一个停止信号P。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值