在现代电子系统中,非易失性存储器(如EEPROM)被广泛应用于数据保存和配置管理。24C04是一款容量为512字节的I²C接口EEPROM芯片,具有低成本、小封装和易于集成的特点。本文将介绍如何正确使用24C04 EEPROM,并提供一个简单的程序示例来帮助开发者快速上手。
一、24C04 EEPROM 的基本特性
1. 容量与地址空间
24C04拥有512字节的存储空间,通过I²C总线进行通信。其内部地址范围为0x0000至0x01FF。
2. 工作电压
支持2.7V~5.5V的工作电压范围,适用于多种嵌入式平台。
3. 通信协议
使用标准I²C协议(两线制SCL和SDA),支持100kHz的标准模式或400kHz的快速模式。
4. 特点
- 非易失性存储器,断电后数据不会丢失。
- 自动页写入功能,可提高数据写入效率。
- 提供硬件写保护引脚(WP),用于防止意外擦除或修改。
二、硬件连接
以下是典型的硬件连接方式:
- SCL:连接到主控设备的I²C时钟引脚。
- SDA:连接到主控设备的I²C数据引脚。
- VCC:连接电源(2.7V~5.5V)。
- GND:接地。
- WP:若不需要写保护,可以接高电平;否则接低电平。
三、程序设计思路
为了实现对24C04 EEPROM的操作,我们需要编写一个能够初始化I²C总线并完成读写操作的程序。以下是一个基于STM32微控制器的示例代码。
1. 初始化 I²C 总线
首先,需要配置I²C外设以确保通信正常。以下是一个简化的初始化函数:
```c
include "stm32f1xx_hal.h"
void MX_I2C1_Init(void) {
__HAL_RCC_I2C1_CLK_ENABLE(); // 启用I²C1时钟
I2C_HandleTypeDef hi2c1;
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000; // 设置I²C速度为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;
HAL_I2C_Init(&hi2c1);
}
```
2. 写入数据到 EEPROM
写入数据时,需注意分页操作(每页64字节)。以下是一个写入函数:
```c
void WriteToEEPROM(uint16_t address, uint8_t data, uint16_t length) {
uint8_t buffer[65]; // 每次最多写入64字节
uint16_t index = 0;
while (length > 0) {
uint16_t pageLength = (length > 64) ? 64 : length; // 当前页剩余长度
buffer[0] = (address >> 8) & 0xFF; // 高地址
buffer[1] = address & 0xFF;// 低地址
for (uint16_t i = 0; i < pageLength; i++) {
buffer[i + 2] = data[index++];
}
HAL_I2C_Master_Transmit(&hi2c1, 0xA0, buffer, pageLength + 2, HAL_MAX_DELAY);
address += pageLength;
length -= pageLength;
}
}
```
3. 从 EEPROM 读取数据
读取数据时,只需指定起始地址和目标缓冲区即可:
```c
void ReadFromEEPROM(uint16_t address, uint8_t buffer, uint16_t length) {
uint8_t cmd[2];
cmd[0] = (address >> 8) & 0xFF; // 高地址
cmd[1] = address & 0xFF;// 低地址
HAL_I2C_Master_Transmit(&hi2c1, 0xA0, cmd, 2, HAL_MAX_DELAY);
HAL_I2C_Master_Receive(&hi2c1, 0xA0, buffer, length, HAL_MAX_DELAY);
}
```
四、注意事项
1. 地址越界检查
在读写操作之前,应确保地址在合法范围内(0x0000~0x01FF)。
2. 写保护
如果设置了写保护(WP引脚拉低),任何写操作都会失败。
3. 初始化顺序
确保I²C总线初始化完成后,再执行读写操作。
通过以上步骤,您可以轻松实现对24C04 EEPROM的基本操作。该芯片因其简单易用的特点,在许多项目中得到了广泛应用。希望本文能为您提供实用的帮助!