前言
51单片机I2C通信,断电存储数据。51芯片与AT24C02通信原理及代码实现
一、IIC简介
I2C是同步通信的两段式串行总线,一根SCL时钟线,一根SDA数据线。
特点: 接口线少,控制方式简单,器件封装形式小,通信速率高,硬件实现简单,可扩展性强。
I2C物理层
注意:当AT24C02其中任一连接SCL、SDA的为低电平,则总线SDA、SCL上均为低电平。
重点:1、由于总线默认高电平,即当没有设备控制SCL、SDA总线时为高电平; 即如果某个设备占据总线,需要释放总线时,将其SDA、SCL置 1 即可。当某个设备需要占据总线进行通信时,如果有设备占据总线,需要等待总线被释放。
特点:
- 支持多主机多从机
- 两段式总线,SDA用于数据传输,SCL用于时钟同步(无论同步通信还是异步通信都要时钟同步,区别在于从机时钟由谁控制)。
- 连接到总线的设备具有唯一地址,通过地址进行不同设备通信。
- 多设备同时占据总线时,通过仲裁方式决定哪个设备占据总线。
I2C协议层
数据有效性规定
1. SCL高电平期间,SDA须保持稳定(即SCL为高电平期间,SDA不能改变)
2. SCL为低电平期间,SDA可以改变电平
起止信号
(重点) 起始信号与终止信号均由主机发出,从机只能应答不能进行通信的起始和终止。
起始信号后,总线就被占用;
终止信号后,总线就被释放,可以被其他主机占用。、
总线寻址
当进行通信时,发送起始信号后,须发送寻址信号。地址也是一种数据,与发送数据时序一样。
I2C总线寻址分为7位和10位寻址。7位寻址位定义如下。
以AT24C02为例,硬件结构如下:
在AT24C02中高四位固定不可更改,通过A0、A1、A2引脚高低电平决定设备地址。在普中51单片机中,A0、A1、A2引脚均接地。即当向从机写数据时,发送的寻址位为:10100000,即0xA0;当读取从机的数据时,主机发送的寻址位为:10100001,即0xA1。
数据传输与应答
根据开头描述,I2C是同步通信的两段式串行总线,SCL为时钟线,一根SDA为数据线。
由同步通信可知,主机通过控制SCL时钟线控制从机的时钟,通过SDA进行数据传输。
与其他通信协议一样,为了保证数据传输的有效性:
当主机发送完数据后,都需要等待并接收从机的应答信号(让发送端知道是否继续发送数据)
。当从机接收完数据后,都需要向主机发送应答或非应答。(告诉发送端是否继续发送数据,应答信号(特定低电平)则继续发送,非应答信号(特定高电平)则结束发送)
- 当从机没有回应(应答或非应答)时,要将SDA置于高电平,释放总线,让主机产生终止信号结束通信。(起始信号和终止信号都是主机产生的 )
主机向从机,数据发送时序图:
发送数据时,时钟线与时序线均由主机控制。
从机向主机,数据发送时序图
读取数据与发送时序相似。
- 因为是同步通信,所以SCL时钟总线始终由主机控制。
由于是读取数据,所以主机须将SDA总线置高电平,释放SDA总线,SDA总线由从机控制,
- 当接收完一个字节后,向从机发送应答或非应答,以确定是否继续发送。(发送完就要等待接收应答,接受完就要发送应答)。
- 同样SCL高电平期间保持SDA电平稳定不能更改,SCL电平期间,SDA电平才能变化;一个SCL电平脉冲,接收一个数据。
具体时序图将上面数据发送时序图中左侧,SDA(主机)改为SDA(从机),SDA(从机)改为SDA(主机) 即可
。
二、AT24C02时序
AT24C02是一种外围数据存储器件,要进行通信,以单片机为例,C51为主机,AT24C02为从机。
当C51要写入数据到AT24C02时(即主机向从机发送数据):
1.主机发送起始信号
2. 主机发送寻址信号(以普中单片机为例,发送0xA0),找到要接收的设备(AT24C02)。
3. 主机发送AT24C02的写入位置地址。
4. 主机发送要写入的数据
5. 发送完成后,主机发送终止信号。
当C51要读取AT24C02中某个地址的数据时:(从机向主机发送数据)
- 主机发送起始信号
- 主机发送寻址信号(普中单片机中为0xA0)
- 主机发送AT24C02中要读取的地址
- 主机发送起始信号,重启总线
- 主机发送读信号(普中单片机AT24C02中为,0xA1)。为什么为0xA1,总线寻址中有解释。
- 读取数据。
总结
IIC通信是一种两段总线式同步通信协议,AT24C02是一种使用IIC协议的,可断电存储的元器件。不要将IIC通信协议和AT24C02混为一谈。
代码文件太多,后续将上传至GitHub C51 learning note中。