在现代嵌入式系统中,非易失性存储器(如EEPROM)是不可或缺的一部分。其中,24C04是一种容量为512字节的I²C接口EEPROM芯片,广泛应用于数据存储场景。本文将详细介绍如何正确配置和使用24C04 EEPROM,并提供一份简洁高效的程序代码示例。
一、24C04 EEPROM 的特点
24C04 EEPROM 具有以下特性:
- 容量:512字节(64页 × 8字节/页)
- 接口:I²C协议(支持标准模式和快速模式)
- 工作电压:1.8V~5.5V
- 地址自动递增功能
- 支持断电后数据保存
由于其简单易用的特点,24C04非常适合用于记录传感器数据、设备配置参数等场景。
二、硬件连接
在实际应用中,24C04需要与微控制器通过I²C总线进行通信。以下是典型接线方式:
- SDA(数据线):连接到微控制器的SDA引脚
- SCL(时钟线):连接到微控制器的SCL引脚
- VCC:接电源(根据芯片规格选择合适的电压)
- GND:接地
- A0、A1(地址引脚):可悬空或接高电平/低电平以设置设备地址
默认情况下,24C04的设备地址为`1010000`(即`0x50`),可以通过改变A0和A1的状态来调整地址范围。
三、软件实现
以下是一个基于STM32微控制器的示例代码,展示如何读写24C04 EEPROM的数据。
1. 初始化 I²C 外设
首先,确保I²C外设已正确初始化。以下为初始化代码片段:
```c
include "stm32f1xx_hal.h"
I2C_HandleTypeDef hi2c1;
void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000; // 标准模式,100kHz
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
{
// 初始化失败处理
Error_Handler();
}
}
```
2. 写入数据
编写一个函数用于向24C04 EEPROM写入指定地址的数据:
```c
void WriteToEeprom(uint16_t address, uint8_t data)
{
uint8_t buffer[2];
buffer[0] = (address >> 8) & 0xFF; // 高字节地址
buffer[1] = address & 0xFF;// 低字节地址
HAL_I2C_Master_Transmit(&hi2c1, 0x50, buffer, 2, 100);
HAL_I2C_Master_Transmit(&hi2c1, 0x50, &data, 1, 100);
}
```
3. 读取数据
编写一个函数用于从24C04 EEPROM读取指定地址的数据:
```c
uint8_t ReadFromEeprom(uint16_t address)
{
uint8_t buffer[2], data;
buffer[0] = (address >> 8) & 0xFF; // 高字节地址
buffer[1] = address & 0xFF;// 低字节地址
HAL_I2C_Master_Transmit(&hi2c1, 0x50, buffer, 2, 100);
HAL_I2C_Master_Receive(&hi2c1, 0x50, &data, 1, 100);
return data;
}
```
四、注意事项
1. 地址范围检查:确保访问的地址不超过512字节范围。
2. 时序问题:I²C通信对时序要求较高,需保证I²C模块的时钟频率符合24C04的要求。
3. 数据完整性验证:建议每次写操作后读回数据进行校验,避免因干扰导致数据错误。
通过以上步骤,您可以轻松地在项目中集成并使用24C04 EEPROM。无论是小型传感器节点还是复杂工业控制系统,它都能胜任数据持久化任务。


