IIC读写EEPROM
目录
1.IIC
基础简介
IIC特点
时序图分析
编辑1.起始信号与终止信号
2.数据传输时序
3.字节传输和应答信号
I2C寻址
主机给从机发送一个字节
主机给从机发送多个字节
主机从从机接收一个字节
主机从从机接收多个字节
I2C寄存器
2.EEPROM(AT24C02)
操作时序
1.器件寻址
2. 写操作
(1)字节写
(2)页写
3. 读操作(顺序读)
4. 关键时序细节
1.IIC
基础简介
IIC(Inter-Integrated Circuit)是一个多主从的串行总线,又叫I2C,是由飞利浦公司发明的通讯总线,属于半双工同步传输类型总线。IIC总线是非常常见的数据总线,仅仅使用两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA。不同的器件,都是并联接在这两条线上,I2C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。
SDA(Serial data)是数据线,是用来传输数据的
SCL(Serial clock line)是时钟线,是用来控制数据发送的时序
IIC特点
通常IIC设备分为主设备和从设备,谁控制时钟线(控制SCL的电平高低变换)谁就是主设备。
IIC主设备功能:主要产生时钟,产生起始信号和停止信号
IIC从设备功能:可编程的IIC地址检测,停止位检测
IIC的一个优点是它支持多主控,其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。但是在同一时间点上只能有一个主控。
支持不同速率的通讯速度,标准速度(最高速度100kHZ), 快速(最高400kHZ),比UART高,比SPI低
SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。
IIC是半双工,而不是全双工 ,同一时间只可以单向通信,IIC协议首先是发送从机硬件地址,然后发送命令,再发送数据/寄存器编号或者读取数据。IIC协议可以多字节连续读写数据。
各设备连接到总线的输出端时必须是漏极开路(OD)输出或集电极开路(OC)输出。
时序图分析
1.起始信号与终止信号
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;
SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号;
起始和终止信号都是由主机发出,起始信号产生后,总线就处于占用的态;
终止信号产生后,总线就处于空闲态。
2.数据传输时序
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定; 只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
在时钟为低电平期间,发送器向数据线上写入数据,因此数据线上的数据运行变化; 在时钟为高电平期间,接收器从数据线上读取数据,因此必须保持数据线上的数据稳定。
最终完成一个时钟周期内,发送器发生一个bit位数据,接收器接收一个bit位数据。
3.字节传输和应答信号
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
在第9个时钟周期的低电平期间,接收器向数据线上写入数据。
在第9个时钟周期的高电平期间,发送器从数据线上读取数据。
如果读到的是低电平信号,表示应答信号。
如果读到的是高电平信号,表示非应答信号。
I2C寻址
I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。
主机在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送数据(W),“1”表示主机接收数据(R)。
总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己被主机寻址,根据R/W位将自己定为发送器或接收器。
主机给从机发送一个字节
主机给从机发送多个字节
主机从从机接收一个字节
主机从从机接收多个字节
I2C寄存器
2.EEPROM(AT24C02)
24C02是一个容量为2Kbit的串行电可擦除可编程只读存储器(EEPROM), 存储器有256个字节, 内部分为32页,每页8字节,通过 IIC总线接口进行操作。
具体管脚配置可以查看
AT24C02_百度百科AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。https://baike.baidu.com/item/AT24C02/5665387
操作时序
1.器件寻址
格式:1010 +A2 A1 A0+R/W(7位地址 + 1位读写控制)
固定高位:1010
可编程地址位:由硬件引脚A2、A1、A0决定(默认接地时为000)
R/W读写位:0时进行写操作,1时进行读操作
2. 写操作
(1)字节写
起始条件:SCL高电平时,SDA由高→低。
发送设备地址(写模式):发送0xA0,等待ACK。
发送内存地址:8位地址(0x00~0xFF),等待ACK。
发送数据:8位数据,等待ACK。
停止条件:SCL高电平时,SDA由低→高。
(2)页写
页大小:8字节(地址低3位自动递增,超出后回绕)。
步骤:
起始条件:SCL高电平时,SDA由高→低。
发送设备地址(写模式):发送0xA0,等待ACK。
发送内存地址:8位地址(0x00~0xFF),等待ACK。
连续发送最多8字节数据,每字节后等待ACK。
发送停止条件。
3. 读操作(顺序读)
起始条件。
发送设备地址(写模式)0xA0,ACK。
发送内存地址,ACK。
重复起始条件。
发送设备地址(读模式)0xA1,ACK。
接收数据:读取数据后,主设备发送ACK继续读取下一字节,最后发送NACK并停止。
停止条件。
4. 关键时序细节
起始/停止条件:
起始:SCL高时,SDA下降沿。
停止:SCL高时,SDA上升沿。
数据传输:SCL低电平时更新SDA,高电平时稳定。
应答(ACK):每字节后接收方拉低SDA。