EEPROM(24CXX)存储芯片介绍
EEPROM简介
EEPROM介绍
EEPROM (Electrically Erasable Programmable read only memory),带电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。EEPROM常用来存储一些配置信息,以便系统重新上电的时候加载之。EEPOM 芯片最常用的通讯方式就是 I 2C 协议
24CXX简介
AT24XX芯片容量
XX表示:01、02、04、16、32、64、…..
单位: Kbit
AT24XX芯片引脚
24C65设备地址
24CXX的设备地址:
24CXX的设备地址为7位:
高4位恒定为 1010
低3位取决于A0-A2的电平状态
注:一般主机在读写24CXX都是把设备地址连同读写位组合成一个字节一起发送
24C65硬件原理图
电气连线
设备地址:
读地址:1010 0001即 0xA1
写地址:1010 0000即 0xA0
24C65读写时序
I2C读写EEPROM实例
电气原理图
cubemx配置
实例代码
宏定义和全局变量
#define ReadAddr 0xA1
#define WriteAddr 0xA0
uint8_t Wbuf[20] = {"eeprom test is ok"};
uint8_t Rbuf[20] = {0};
AT24CXX驱动代码编写
/*****AT24CXX写数据函数*****/
void eeprom_write(uint16_t MemAddr, uint8_t *Wbuf, uint16_t len)
{
while(len--){
while(HAL_I2C_Mem_Write(&hi2c1, WriteAddr, MemAddr, I2C_MEMADD_SIZE_16BIT, Wbuf, 1, 100) != HAL_OK);
MemAddr++;
Wbuf++;
}
}
/*****AT24CXX读数据函数*****/
void eeprom_read(uint16_t MemAddr, uint8_t *Rbuf, uint16_t len)
{
while(HAL_I2C_Mem_Read(&hi2c1, ReadAddr, MemAddr, I2C_MEMADD_SIZE_16BIT, Rbuf, len, 100) != HAL_OK);
}
注:写数据只能一个字节一个字节的写入,读数据则不需要
main函数中实现
printf("usart is init\n");
eeprom_write(0, Wbuf, sizeof(Wbuf));
HAL_Delay(500);
eeprom_read(0, Rbuf, sizeof(Rbuf));
printf("READ:%s\n", Rbuf);
实验现象