- AT24C32或AT24C64两款芯片容量不一样,其他都一样。程序无法动态识别容量
- AT24C32容量32K,地址范围0x~0x7FFF.
- AT24C64容量64K,地址范围0x~0xFFFF
电气参数
-
电压2.7V-5.5V
-
IIC通信
-
有引脚控制数据保护
-
有引脚可以配置IIC的地址。
-
每个page 32字节
-
1百万次写入
-
100年存放
-
容量有两个型号AT24C32/64 提供32,768/65,536 bits ,也就是4096字节(4k字节)或8192字节(8K字节)
-
使用16bit来确定存储的地址
-
设备地址,如果引脚A0~A2都接地,则IIC地址为0x50.
操作步骤
写入
分为两种
- 按字节写入
- 按page写入,一次最多写入32字节
读取
分为3种
- 当前地址读取
- 随机地址读取
- 连续读取,连续读取可以一直读
EEPROM和flash有个最大的区别:
EEPROM在写入前不需要擦除page,直接写入就行
Flash 在写入前,需要擦除,且擦除是按照page进行的。比如spi flash。
时序
写入时序
按1个字节写入时序
按page写入时序
读取时序
在当前位置读取时序
随机读取时序
顺序读取时序
附上完整代码
AT24CXX_driver.c
#include <stdio.h>
#include "esp_log.h"
#include "AT24CXX_driver.h"
#include "driver/i2c.h"
#include <string.h>
static const char *TAG = "AT24CXX-driver";
#define I2C_MASTER_SCL_IO CONFIG_I2C_MASTER_SCL /*!< GPIO number used for I2C master clock */
#define I2C_MASTER_SDA_IO CONFIG_I2C_MASTER_SDA /*!< GPIO number used for I2C master data */
#define I2C_MASTER_NUM 0 /*!< I2C master i2c port number, the number of i2c peripheral interfaces available will depend on the chip */
#define I2C_MASTER_FREQ_HZ 100000 /*!< I2C master clock frequency */
#define I2C_MASTER_TX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
#define I2C_MASTER_RX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
#define I2C_MASTER_TIMEOUT_MS 1000
#define AT24CXX_I2C_ADDR 0x50 /*!< Slave address of the MPU9250 sensor */
esp_err_t at24cxx_init(void)
{
int ret;
// 初始化iic
int i2c_master_port = I2C_MASTER_NUM;
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = I2C_MASTER_SDA_IO,
.scl_io_num = I2C_MASTER_SCL_IO,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_pullup_en