一、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协议时序
1.I2C整体时序
I2S协议整体时序如图:
起始位:SCL信号为高电平时,SDA出现一个下降沿。
停止位:SCL信号为高电平时,SDA出现一个上升沿。
(始终是数据位发生变化,时钟位保持稳定振荡)
读写数据状态如图:
SCL为高电平时,SDA数据需要保持稳定。
SCL为低电平时,SDA数据发生变化。(在低电平的中点变化最佳)
当主机向从机写入数据时,SDA上的每一位数据在SCL的高电平期间被写入从机中。从主机角度来看,需要在SCL低电平期间改变要写入的数据。而当主机读取从机中的数据时,从机在SCL低电平期间将数据输出到SDA总线上,在SCL的高电平期间保持数据稳定,从主机角度来看,需要在SCL的高电平期间将 SDA 线上的数据读取并存储。
2.写时序
(1)1字节地址的写时序
①首先要传输7位的器件地址(CONTROL BYTE)和1位的读写标志(读:1/写:0)
②检测1位由从机发出的应答信号
③其次要传输8位的存储单元地址
④检测1位由从机发出的应答信号
⑤最后传输要传输的8位数据
⑥检测1位由从机发出的应答信号
(2)2字节地址的写时序
流程与1字节写时序类似。
3.读时序
①通过第一轮的写时序,将要读的存储单元的地址写到从机。
②第二轮发送读请求,随后DATA即可由从机发回,然后主机给从机NOACK信号。
(NOACK的作用为:主机告诉从机停止发送数据,读取停止。当一次性读取多个数据时,可在需要停止的字节后发送NOACK,即可完成页读取)