STM32 IIC/EEPROM(AT24C256)代码与原理详解
一、基础知识
1EEPROM
是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。
2AT24C256
ATMEL公司256kbit串行电可擦的可编程只读存储器
3硬件相关
A0、A1:地址选择输入端。在串行总线结构中,可以连接4个AT24C256IC。用A0、 A1来区分各IC。A0、A1悬空时为0
SCL:串行时钟输入。上升沿将SDA上的数据写入存储器,下降沿从存储器读出数 据送SDA上。
SDA:双向串行数据输入输出口。用于存储器与单片机之间的数据交换。
WP:写保护输入。此引脚与地相连时,允许写操作;与VCC相连时,所有的写存储 器操作被禁止。如果不连,芯片内部下拉到地。
二代码实现
1写一个数据
EEPROM 进入开始状态后,需要一个8位的地址字来选择芯片进行读写。设备地址 字由5位0、1组成的命令字和两位地址选择位A1、A0和一位读/写操作位构成。对 于 AT24C256,命令字为“10100”,同一串行总线上可以连接4个设备,由地址线 A1,A0加以区分。如只有一个AT24C256,A1,A0都取 0。最低位为1表示读操作
向 AT24C256发送设备地址字并接到应答信号后,需要发送2个8位地址来选择 要写数据的地址,AT24C256接收到这个地址,应答一个零信号,然后根据时钟写8 位数据到AT24C256。存储器接收到数据后返回一个应答信号。写数据结束, AT24C256进入内部计时的写周期。在写循环过程中所有的输入都不能进行,直到 写结束,EEPROM才响应
我们得到代码:
void AT24C256_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
IIC_Send_Byte(0XA0); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);//发送高地址
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%256); //发送低地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //发送字节
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
delay_ms(10);
}
2写页
写页 AT24C256 具有64字节作为一页的写页功能,可以一次性写入一页。写页 的初始化过程与写字节的方法基本相同。不同的是写入一个字节后,微控制器不 发停止状态命令,而是在应答信号后,接着输入63个字节。每一个字节接收到 后,EEPROM照样输出一个为零的应答信号。因为一页只有64个单元,所以数据字 的地址低6位接收到一个字节后会自动加1,高位地址不变,即页地址不变。当内 部产生的地址到页边界时,接下来的字节要放至该页的开始。如果发送至E2PROM 的数据超过 64字节,则最早写的字节将被覆盖。