1
接口/总线/驱动
大家好,这里是程序员 杰克 。一名平平无奇的嵌入式软件工程师。
作为嵌入式开发人员,无论是硬件还是软件工程师,或多或少都会接触过I2C接口的外设。诸如常用的存储器EEPROM等皆是I2C接口进行通信。
本系列推文主要是对I2C总线进行总结和分享,本篇推文主要是对I2C总线及其通讯时序进行介绍和分享。后续会分别出推文分享MCU实现I2C接口以及在FPGA实现I2C逻辑时序。
下面正式进入本章推送的内容。
01 I2C总线介绍
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的集成IC器件之间 双向通信 。其特点如下:
I2C总线上的每个设备都可以作为主机或从机,当多个主机需要使用总线时,通过仲裁方式决定特定主机的优先占用.
每个设备都有 唯一地址 ,总线上通过地址识别来确定通信的主从双方.
连接到相同总线的设备数量受到总线的最大电容400pF限制.
总线物理连接
I2C作为总线,其总线上会挂载很多的设备,下图为一个典型的总线拓扑:
I2C总线的物理连接上比较简单,由 SDA(串行数据线) 、 SCL(串行时钟线) 、上拉电阻组成。单一设备硬件电路如下图所示(EEPROM-24C02为例):
特别说明:
多个器件连接在一条总线上时,SDA、SCL上各有一个上拉电阻便可.
通信模式
I2C总线支持三种模式: 标准模式 、 快速模式 、 高速模式 ,其对应的速率如下表所示:
模式 | 速率(bit/s) |
---|---|
标准模式 | 100k |
快速模式 | 400k |
高速模式 | 3.4M |
I2C协议整体时序
对于一个完整的I2C协议而言,其包括起始位、主从数据交互以及停止位。整体时序、组成如下所示:
组成 | 描述 |
---|---|
空闲状态 | 总线空闲时,SDA、SCL皆为高电平 |
起始位 | SCL为高电平时,SDA出现下降沿 |
主从数据交互(数据+应答) | 数据:1字节的控制帧/数据帧 |
应答:数据传输完成后的下一个时钟沿,SDA-0表示应答,SDA=1表示非应答. | |
停止位 | SCL为高电平时,SDA出现上升沿 |
02 I2C读写时序介绍
I2C总线上的设备主动发起通信时作为主机,被动接收时作为从机。因此对于I2C读写时序而言,分为主机、从机读写时序。本篇主要是描述主机的读写时序操作,从机的时序不在此系列推文分享。
I2C写时序(主机)
对于I2C主机在SCL时钟驱动下的基本写时序组成如下所示:
写时序组成 | 描述 |
---|---|
起始位 | 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时钟驱动下的基本读时序组成如下所示:
读时序组成 | 描述 |
---|---|
起始位 | 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总线的电路结构、时序还是很有必要的。
全部0条评论
快来发表一下你的评论吧 !