I2C总线介绍 I2C读写时序介绍

接口/总线/驱动

1139人已加入

描述

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

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

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

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

01 I2C总线介绍

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

I2C总线上的每个设备都可以作为主机或从机,当多个主机需要使用总线时,通过仲裁方式决定特定主机的优先占用.

每个设备都有 唯一地址 ,总线上通过地址识别来确定通信的主从双方.

连接到相同总线的设备数量受到总线的最大电容400pF限制.

总线物理连接

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

I2C接口

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

I2C接口

特别说明:

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

通信模式

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

模式速率(bit/s)
标准模式100k
快速模式400k
高速模式3.4M

I2C协议整体时序

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

I2C接口

组成描述
空闲状态总线空闲时,SDA、SCL皆为高电平
起始位SCL为高电平时,SDA出现下降沿
主从数据交互(数据+应答)数据:1字节的控制帧/数据帧
应答:数据传输完成后的下一个时钟沿,SDA-0表示应答,SDA=1表示非应答.
停止位SCL为高电平时,SDA出现上升沿

02 I2C读写时序介绍

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

I2C写时序(主机)

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

I2C接口

写时序组成描述
起始位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接口

读时序组成描述
起始位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总线的电路结构、时序还是很有必要的。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分