<通信接口篇> I2C介绍

目录

01 I2C总线介绍

总线物理连接

通信模式

I2C协议整体时序

02 I2C读写时序介绍

I2C写时序(主机)

I2C读时序(主机)

03 文章总结


大家好,这里是程序员杰克。一名平平无奇的嵌入式软件工程师。

作为嵌入式开发人员,无论是硬件还是软件工程师,或多或少都会接触过I2C接口的外设。诸如常用的存储器EEPROM等皆是I2C接口进行通信。

本系列推文主要是对I2C总线进行总结和分享,本篇推文主要是对I2C总线及其通讯时序进行介绍和分享。后续会分别出推文分享MCU实现I2C接口以及在FPGA实现I2C逻辑时序。


下面正式进入本章推送的内容。

01 I2C总线介绍

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的集成IC器件之间双向通信。其特点如下:

  • I2C总线上的每个设备都可以作为主机或从机,当多个主机需要使用总线时,通过仲裁方式决定特定主机的优先占用.
  • 每个设备都有唯一地址,总线上通过地址识别来确定通信的主从双方.
  • 连接到相同总线的设备数量受到总线的最大电容400pF限制.

  • 总线物理连接

I2C作为总线,其总线上会挂载很多的设备,下图为一个典型的总线拓扑:

<通信接口篇> I2C介绍_第1张图片

I2C总线的物理连接上比较简单,由SDA(串行数据线)SCL(串行时钟线)上拉电阻组成。单一设备硬件电路如下图所示(EEPROM-24C02为例):

<通信接口篇> I2C介绍_第2张图片

特别说明:

多个器件连接在一条总线上时,SDA、SCL上各有一个上拉电阻便可.

  • 通信模式

I2C总线支持三种模式:标准模式快速模式高速模式,其对应的速率如下表所示:

模式 速率(bit/s)
标准模式 100k
快速模式‍ 400k‍
高速模式 3.4M
  • I2C协议整体时序

对于一个完整的I2C协议而言,其包括起始位、主从数据交互以及停止位。整体时序、组成如下所示:

<通信接口篇> I2C介绍_第3张图片

组成 描述
空闲状态 总线空闲时,SDA、SCL皆为高电平
起始位 SCL为高电平时,SDA出现下降沿

主从数据交互

(数据+应答)

数据:1字节的控制帧/数据帧

应答:数据传输完成后的下一个时钟沿,SDA-0表示应答,SDA=1表示非应答.
停止位 SCL为高电平时,SDA出现上升沿

02 I2C读写时序介绍

I2C总线上的设备主动发起通信时作为主机,被动接收时作为从机。因此对于I2C读写时序而言,分为主机、从机读写时序。本篇主要是描述主机的读写时序操作,从机的时序不在此系列推文分享。

  • I2C写时序(主机)

对于I2C主机在SCL时钟驱动下的基本写时序组成如下所示:

<通信接口篇> I2C介绍_第4张图片

写时序组成 描述
起始位 SCL为高电平时,SDA出现下降沿. 表示一次总线通信的开始. 由主机发起.

控制帧(8bit)

(主机->从机)

由从机地址(SLAVE_ADDRESS)和操作位(R/W)组成.

R/W:控制帧[0]为操作位,0-表示写,1-表示读;

控制帧[7:1]为从机地址,具体使用的位数由器件决定;

应答位

(从机->主机)

从机接收到对应的控制帧后,匹配到器件地址后,会返回一个应答ACK信号;主机只有接收到应答后,才会发送数据;

数据帧(8bit)

(主机->从机)

主机写到从机的1字节数据(8bit).

应答/非应答

(从机->主机)

从机接收到对应的数据帧后,会根据具体器件,选择返回一个应答ACK/非应答NACK信号.
停止位 SCL为高电平时,SDA出现上升沿. 表示一次总线通信的结束. 由主机发起.
  • I2C读时序(主机)

对于I2C主机在SCL时钟驱动下的基本读时序组成如下所示:

<通信接口篇> I2C介绍_第5张图片

读时序组成 描述
起始位 SCL为高电平时,SDA出现下降沿. 表示一次总线通信的开始. 由主机发起.

控制帧(8bit)

(主机->从机)

由从机地址(SLAVE_ADDRESS)和操作位(R/W)组成.

R/W:控制帧[0]为操作位,0-表示写,1-表示读;

控制帧[7:1]为从机地址,具体使用的位数由器件决定;

应答位

(从机->主机)

从机接收到对应的控制帧后,匹配到器件地址后,会返回一个应答ACK信号;主机只有接收到应答后,才会发送数据;

数据帧(8bit)

(从机->主机)

从机返回给主机的1字节数据(8bit).

应答/非应答

(主机->从机)

主机接收到从机返回的数据帧后,会根据具体器件,选择返回一个应答ACK/非应答NACK信号给从机.
停止位 SCL为高电平时,SDA出现上升沿. 表示一次总线通信的结束. 由主机发起.

特别说明:

I2C主机的读写时序的起始位、控制帧、控制帧应答以及停止位是一致的,差异主要体现在是数据帧、数据帧的应答的主从方向上。

差异点 写时序 读时序
数据帧(8bit) 主机写入到从机(主->从) 从机返回给主机(从->主)
应答/非应答 从机做出应答/非应答(从->主) 主机做出应答/非应答(主->从)

03 文章总结

I2C总线以其外围电路简单、占用PCB面积小、总线可挂载多节点设备等特点而被广泛应用,因此,对于学习I2C总线的电路结构、时序还是很有必要的。

你可能感兴趣的:(外设驱动设计,fpga开发,嵌入式硬件)