一、IIC总线协议概述
(1)IIC(Inter-IntegratedCircuit)总线
- 是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器以及其外围设备。
- IIC也被成为I2C/I²C,其实两者是完全相同的,只是名词不一样而已
- 它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据
(2)IIC总线的物理层和协议层
- 物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输
- 协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准
(3)特点
- 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中,可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机
- 一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步
- 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
- 总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
- 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线
- 具有三种传输模式:标准模式传输速率为100kbit/s,快速模式为400kbit/s,高速模式下可达3.4Mbit/s,但目前大多12C设备尚不支持高速模式。
二、IIC总线通讯的数据帧格式
(1)IIC总线通讯的数据帧格式:写操作
S为起始信号,SLAVEADDRESS从机地址(7bit)+W(0)一共8位,有阴影的部分是主机发送的,而没有阴影部分是从机发送到主机的,A/A(0/1),P代表停止信号
主机I2C接口产生传输起始信号S→广播从机地址→传输方向选择→接受到应答信号ACK→向从机传输数据DATA→等待从机的应答信号ACK→重复之前过程→发送停止传输信号P。
(2)IIC总线通讯的数据帧格式:读操作
S为起始信号,SLAVEADDRESS从机地址(7bit)+R(1)一共8位,有阴影的部分是主机发送的,而没有阴影部分是从机发送到主机的,A(应答)/A(0/1),P代表停止信号。
注意:假如主机一直返回应答信号,那么从机可以一直发送数据,也就是图中的(nbyte+应答信号)情况,直到主机发出非应答信号,从机才会停止发送数据。
主机I2C接口产生传输起始信号S→广播从机地址→传输方向选择→接受到应答信号ACK←从机向主机返回数据DATA←等待主机的应答信号ACK←重复之前过程←停止传输P。
(3)IIC总线通讯的数据帧格式:读和写数据
除了基本的读写,IIC通讯更常用的是复合格式,该传输过程有两次起始信号(S)
一般在第一次传输中,主机通过SLAVE_ADDRESS寻找到从机设备后,发送一段“数据”,这段数据通常用于表示从设备内部的寄存器或存储器地址;
在第二次的传输中,对该地址的内容进行读或写。也就是说,第一次通讯是告诉从机读写地址,第二次则是读写的实际内容。
三、IIC总线通讯时序
(1)I2C数据的有效性(数据的传输)
- 使用SDA信号线来传输数据
- 使用SCL信号线进行数据同步
- SDA数据线在SCL的每个时钟周期传输一位数据。传输时,SCL为高电平的时候,SDA表示的数据有效,即此时的SDA为高电平时表示数据“1”,为低电平表示数据“0”。
- 当SCL为低电平时,SDA的数据无效,一般在这个时候进行电平切换,为下一次表示数据做好准备。
(2)I2C通讯的起始和停止信号
- 当SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示通讯的起始。
- 当SCL现是高电平时,SDA线由低电平向高电平切换,表示通讯的停止。
- 起始和停止信号一般由主机产生。
(3)I2C通讯的响应
- 传输时,主机产生时钟,在第九个时钟时,数据发送端会释放SDA的控制权,由数据接收端控制SDA,若SDA为高电平,表示非应答信号(NACK),低电平表示应答信号(ACK);
- 当设备(无论主从机)接收到I2C传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发生“应答(ACK)”信号;若接收端希望结束数据传输,则向对方发生“非应答(NACK)”信号,发送方接收到该信号后会产生一个停止信号,结束信号传输。
四、基于IIC总线的E2PROM-AT24C02
(1)E2PROM概述:
EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器,是一种掉电后数据不丢失的存储芯片,EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。
(2)AT24C02简介
AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节。该器件通过IIC总线接口进行操作,且有一个专门的写保护功能。
(3)基于IIC总线的E2PROM-AT24C02的特性
- 与400KHz IIC 总线兼容
- 1.8到6.0伏工作电压范围
- 低功耗CMOS技术
- 写保护功能,当WP为高电平时进入写保护状态
- 页写缓冲器
- 自定时擦写周期
- 1,000,000编程/擦除周期
- 可保存数据100年
- 8脚 DIP SOIC或TSSOP封装
- 温度范围商业级工业级和汽车级。
-
(4)基于IIC总线的E2PROM-AT24C02的管脚描述
-
管脚名称
功能
A0、A1、A2
器件地址选择
SDA
串行数据、地址
SCL
串行时钟
WP
写保护
VCC
+1.8V~6.0V工作电压
GND
地
WP 写保护:如果WP管脚连接到Vcc所有的内容都被写保护,只能读;当WP管脚连接到Vss或悬空,允许器件进行正常的读/写操作。
(5)IIC地址及数据方向
I2C总线上的每个设备都有自己的独立地址,主机发起通讯时,通过SDA信号线发送设备地址(SLAVE_ADDRESS)来查找从机。
12C协议规定设备地址可以是7位或10位,实际中7位的地址应用比较广泛。紧跟设备地址的一个数据位用来表示数据传输方向,它是数据方向位,第8位或第11位。数据方向位为“1”时表示主机由从机读数据,该位为“0”时表示主机向从机写数据
(6)AT24C02设备地址
因为单片机上的管脚均接地,所以地址为1K/2K代表的地址。
五、AT24C02数据读写操作
(1)字节写
- 写操作需要在设备地址字确认之后有一个8位的数据字地址
- 一旦收到这个地址,EEPROM将输出一个响应,然后接收到8位数据字后,EEPROM将输出一个响应。
- 如果需要停止数据传输,主机必须用一个停止条件终止写序列。
- 数据写入后,EEPROM进入一个内部计时的写周期,将数据写入到到非易失性存储器。在这个写周期中,所有输入都被禁用,EEPROM直到写完成才会响应。
Figure 8. Byte Write:
(2)页写入
- 1K/2K EEPROM能够进行8字节的页写入;
- 页写的初始化过程与字节写的初始化过程相同。但是微控制器在第一个数据字被写入后并没有发送一个停止条件。相反,在EEPROM 承认接收到第一个数据字之后。该微控制器可以再传输7个数据字。EEPROM在接收到每个数据字后将回一个零响应。“微控制器必须用一个停止条件终止页写序列。当内部生成的字到达页面边界时,下面的字节被放置在同一页面的开头。
- 如果有超过8个数据字传输到 EEPROM,数据字地址将“翻转”,先前的数据将被覆盖。
(3)任意地址读取
- 随机读需要一个“虚拟”字节写序列来加载数据字地址。一旦设备地址字和数据字地址被输入并且被EEPROM 确认微控制器必须产生另一个启动条件,微控制器现在通过发送带读设备地址来启动当前读地址。令EEPROM 确认设备地址并报出数据字。微控制器后跟随停止条件结束。
(4)读写时间周期范围
符号 | 参数 | 1.8 V,2.5V | 4.5V~5.5V | 单位 | ||
最小 | 最大 | 最小 | 最大 | |||
FscL | 时钟频率 | 100 | 400 | KHz | ||
T1 | SCL,SDA输入的噪声抑制时间 | 200 | 200 | ns | ||
tAA | SCL 变低至SDA数据输出及应答信号 | 3.5 | 1 | us | ||
tBUF | 新的发送开始前总线空闲时间 | 4.7 | 1.2 | μs | ||
LHD:STA | 起始信号保持时间 | 4 | 0.6 | μs | ||
tLow | 时钟低电平周期 | 4.7 | 1.2 | μs | ||
LHIGH | 时钟高电平周期 | 4 | 0.6 | us | ||
tSU:STA | 起始信号建立时间 | 4.7 | 0.6 | μs | ||
tHD:DAT | 数据输入保持时间 | 0 | 0 | ns | ||
tsut:DAT | 数据输入建立时间 | 50 | 50 | ns | ||
tR | SDA及SCL上升时间 | 1 | 0.3 | μs | ||
tF | SDA及SCL下降时间 | 5 | 300 | 300 | ns | |
tsu:STO | 停止信号建立时间 | 4 | 0.6 | μs | ||
DH | 数据输出保持时间 | 100 | 100 | ns |
(5)任意地址读取总结
- 1、主控器发出起始信号
- 2、主控器发出寻址字节(写);
- 3、被控器做出应答后;
- 4、主控器发出地址字节(写);
- 5、被控器做出应答后;
- 6、主控器发出停止信号
- 7、主控器发出起始信号;
- 8、主控器发出寻址字节(读);
- 9、被控器做出应答后;
- 10、主控器从被控器读出数据字节,主控器发出应答;
- 11、主控器发出停止信号: