I2C协议浅谈

I2C协议浅谈

导语:此为个人对I2C总线协议的一点总结,如若想深度了解I2C总线协议可参考相关文档

I2C总线实用性

  • 简单的双向两线总线,硬件效益最大、电路简单、硬件兼容性好。
  • 真正的多主机总线,数十个IC可连接在一路I2C总线接口上通信。

I2C接口电路结构

**标准模式器件和快速模式器件连接到 I2C 总线**

  • 一个OD门输出和一个BUFFER门输入连接到一起构成了SDA或者SCL接口。
  • I2C协议规定这种与门结构构成的电路总线空闲时电平为高电平。

I2C通信遵循的协议

两根线的I2C总线如何使上面的多主机实现正常通信使用以下方式来解决

  • 时钟同步的握手机制,可以使主、从机器通信数据正确。
  • 仲裁机制,可以使任意时刻只有一个主机获得I2C总线使用权。
  • 从机地址码,给了通信时寻找指定设备的钥匙。

1、SCL高电平期间,SDA值稳定的情况

  • 正常传输数据期间SCL高电平期间SDA数据保持稳定,SCL低电平期间,SDA数据允许修改,如下图。

**I2C总线的位传输**

2、SCL高电平期间,SDA值变化的几种情况

①起始和停止条件产生时

起始和停止条件时序

②两主机仲裁时
  • 当 SCL 线是高电平时,仲裁在 SDA 线发生,这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同;
  • 下图显示了两个主机的仲裁过程,当然,可能包含更多的内容 (由连接到总线的主机数量决定 )此时,产生 DATA1 的主机的内部数据电平与 SDA 线的实际电平有一些差别,如果关断数据输出,这就意味着总线连接了一个高输出电平,这不会影响由赢得仲裁的主机初始化的数据传输。

两主机仲裁

3、时钟同步和应答

I2C总线上有许多主机,每一个时钟频率可能不一样。在某一个主机发起并获得I2C总线通信时需要有时钟同步机制

①仲裁过程中的时钟同步

仲裁过程中的时钟同步

  • 所有主机在 SCL 线上产生它们自己的时钟来传输 I2C 总线上的报文。数据只在时钟的高电平周期有效。因此 需要一个确定的时钟进行逐位仲裁。
  • 时钟同步通过线与连接 I2C 接口到 SCL 线来执行,这就是说 SCL 线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平, 它会使 SCL 线保持这种状态直到到达时钟的高电平 (见
    图 )。但是 如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变 SCL 线的状态。 因此SCL 线被有最长低电平周期的器件保持低电平。此时,低电平周期短的器件会进入高电平的等待状态。
  • 当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平之后,器件时钟和 SCL线的状态没有差别,而且所有器件会开始数它们的高电平周期 首先完成高电平周期的器件会再次将 SCL线拉低。
  • 这样,产生的同步 SCL 时钟的低电平周期由低电平时钟周期最长的器件决定,而高电平周期由高电平时钟周期最短的器件决定。
②应答机制
  • 每次传输完一个8位的字节后,I2C上需要产生一个应答信号(SCL高电平,SDA低电平)。

I2C总线相应

③从机地址格式

**7位从机地址格式**

  • 数据的传输遵循图所示的格式,在起始条件 (S) 后,发送了一个从机地址。这个地址共有 7 位,紧接着的第 8 位是数据方向位 (R/ W)-- 0 表示发送(写),1 表示请求数据 (读)。
  • 数据传输一般由主机产生的停止位(P)终止。但是,如果主机仍希望在总线上通讯,它可以产生重复起始条件(Sr)和寻址另一个从机,而不是首先产生一个停止条件。在这种传输中,可能有不同的读 写格式结合。

主机 发送器用 7 位地址寻址从机接收器 传输方向不变
在第一个字节后主机立即读从机
复合格式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值