I2C协议

一、I2C基本概念

I2C 总线(I2C bus,Inter-IC bus)是一个双向的两线连续总线,提供集成电路(ICs)之间的通信线路。I2C 总线是一种串行扩展技术,最早由 Philips 公司推出,广泛应用于电视,录像机和音频设备。I2C 总线的意思是“完成集成电路或功能单元之间信息交换的规范或协议”。Philips 公司推出的 I2C 总线采用一条数据线(SDA),加一条**时钟线(SCL)**来完成数据的传输及外围器件的扩展。

二、I2C基本原理

I2C 总线在物理连接上比较简单,分别由 SDA(串行数据线)和 SCL(串行时钟线)两条总线及上拉电阻组成。通信的原理是通过控制 SCL 和 SDA 的时序,使其满足 I2C 的总线协议,从而进行数据的传输。I2C 总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(可以从 I2C 器件数据手册得知),主从设备之间就是通过这个地址来确定与哪个器件进行通信。
I2C协议

三、I2C协议时序

1.I2C整体时序

I2S协议整体时序如图:
I2C协议
起始位:SCL信号为高电平时,SDA出现一个下降沿
停止位:SCL信号为高电平时,SDA出现一个上升沿
(始终是数据位发生变化,时钟位保持稳定振荡)
读写数据状态如图:
I2C协议
SCL为高电平时,SDA数据需要保持稳定
SCL为低电平时,SDA数据发生变化。(在低电平的中点变化最佳)

当主机向从机写入数据时,SDA上的每一位数据在SCL的高电平期间被写入从机中。从主机角度来看,需要在SCL低电平期间改变要写入的数据。而当主机读取从机中的数据时,从机在SCL低电平期间将数据输出到SDA总线上,在SCL的高电平期间保持数据稳定,从主机角度来看,需要在SCL的高电平期间将 SDA 线上的数据读取并存储。

2.写时序

(1)1字节地址的写时序

I2C协议
①首先要传输7位的器件地址(CONTROL BYTE)和1位的读写标志(读:1/写:0)
②检测1位由从机发出的应答信号
③其次要传输8位的存储单元地址
④检测1位由从机发出的应答信号
⑤最后传输要传输的8位数据
⑥检测1位由从机发出的应答信号

(2)2字节地址的写时序

I2C协议
流程与1字节写时序类似。

3.读时序

I2C协议
①通过第一轮的写时序,将要读的存储单元的地址写到从机。
②第二轮发送读请求,随后DATA即可由从机发回,然后主机给从机NOACK信号
NOACK的作用为:主机告诉从机停止发送数据,读取停止。当一次性读取多个数据时,可在需要停止的字节后发送NOACK,即可完成页读取

上一篇:iic接口


下一篇:FPGA学习之路—接口(2)—I2C协议详解+Verilog源码分析