蓝桥杯篇---EEPROM内部存储地址


文章目录


前言

在EEPROM的代码中,EEPROM_Write 和 EEPROM_Read 函数的 addr 参数 表示 EEPROM 的内部存储地址,其取值范围由 EEPROM 的容量决定。以下是详细说明:


1. EEPROM 容量与地址范围

EEPROM 的容量决定了 addr 参数的有效范围 。常见的 EEPROM 容量及地址范围如下:

EEPROM 型号 容量 地址范围(16进制) 地址范围(十进制) 地址长度

24C01 128 字节 0x00 ~ 0x7F 0 ~ 127 1 字节

24C02 256 字节 0x00 ~ 0xFF 0 ~ 255 1 字节

24C04 512 字节 0x00 ~ 0x1FF 0 ~ 511 1 字节

24C08 1024 字节 0x00 ~ 0x3FF 0 ~ 1023 1 字节

24C16 2048 字节 0x00 ~ 0x7FF 0 ~ 2047 1 字节

24C32 4096 字节 0x0000 ~ 0x0FFF 0 ~ 4095 2 字节

24C64 8192 字节 0x0000 ~ 0x1FFF 0 ~ 8191 2 字节

24C128 16384 字节 0x0000 ~ 0x3FFF 0 ~ 16383 2 字节

24C256 32768 字节 0x0000 ~ 0x7FFF 0 ~ 32767 2 字节

2. 代码中的 addr 参数

在EEPROM的代码中,addr 参数为 1 字节(unsigned char 类型) ,因此适用于 小容量 EEPROM(如 24C01、24C02、24C04、24C08、24C16)。其有效范围为:

16 进制:0x00 ~ 0xFF

10 进制:0 ~ 255
示例:

对于 24C02(256 字节):

addr 可以是 0x00 ~ 0xFF。

例如:EEPROM_Write(0x10, 0x55) 表示将数据 0x55 写入地址 0x10。

3. 大容量 EEPROM 的地址扩展

如果使用 大容量 EEPROM(如 24C32、24C64、24C128、24C256),addr 需要扩展为 2 字节(unsigned int 类型) 。此时,代码需要修改为:

发送地址时,先发送高字节,再发送低字节。

c 复制代码
示例(以 24C256 为例):
void EEPROM_Write(unsigned int addr, unsigned char date) {
    I2CStart();
    I2CSendByte(0xA0);          // 发送器件地址(写模式)
    I2CWaitAck();
    I2CSendByte(addr >> 8);     // 发送高字节地址
    I2CWaitAck();
    I2CSendByte(addr & 0xFF);   // 发送低字节地址
    I2CWaitAck();
    I2CSendByte(date);          // 发送数据
    I2CWaitAck();
    I2CStop();
}

4. 地址分配建议

在实际应用中,addr 的分配应根据数据存储需求进行规划。以下是一些常见的分配方式:

系统配置

系统配置:固定地址(如 0x00 ~ 0x0F)。

用户数据

用户数据:动态地址(如 0x10 ~ 0xFF)。

日志数据

日志数据:循环地址(如 0x20 ~ 0x7F,循环覆盖)。

示例:

系统配置存储在 0x00 ~ 0x0F。

用户数据存储在 0x10 ~ 0x7F。

日志数据存储在 0x80 ~ 0xFF,循环覆盖。

5. 注意事项

地址溢出

确保 addr 不超过 EEPROM 的容量范围 ,否则可能导致数据覆盖或写入失败。

页写入限制

某些 EEPROM(如 24C02)支持页写入 (如 16 字节/页)。

跨页写入时需分多次操作。

写保护

某些 EEPROM 支持写保护功能,需通过硬件引脚或命令启用/禁用。

写延时

EEPROM 写入后需等待几毫秒(t_WR) ,确保数据写入完成。

代码中未包含写延时,实际应用中需添加:

c 复制代码
void EEPROM_Write(unsigned char addr, date) {
    // ...发送数据
    I2CStop();
    Delay_ms(5); // 添加延时
}

总结

  1. 小容量 EEPROM(如 24C02):addr 为 1 字节,范围 0x00 ~ 0xFF。
  2. 大容量 EEPROM(如 24C256):addr 为 2 字节,范围 0x0000 ~ 0x7FFF。
  3. 合理分配 addr,避免地址溢出和页写入限制。
  4. 通过合理设置 addr 参数,可以实现对 EEPROM 的高效读写操作。

相关推荐
C++ 老炮儿的技术栈3 小时前
C++ const 的3个核心作用
服务器·c语言·c++·算法·c
java_nnnn4 小时前
LeetCode刷题双指针(快乐数+盛最多水的容器)Java
算法·leetcode·职场和发展
YangYang9YangYan13 小时前
2027 秋招|数据科学与大数据技术面试项目价值回答思路,告别纯代码描述
大数据·面试·职场和发展
CoderYanger20 小时前
一轮复习——F.动态规划模型总结(入门篇)
java·开发语言·数据结构·算法·leetcode·职场和发展·动态规划
YonyouHRSaaS21 小时前
2026年10-11月AI面试选择指南:对国内主流AI面试系统进行对比,看看哪个更值得选!
人工智能·面试·职场和发展·hr·ai面试
浅念-21 小时前
动态规划专题:斐波那契数列模型 + 网格路径DP(LeetCode例题全解析)
笔记·算法·leetcode·面试·职场和发展·动态规划·推荐算法
落魄大学生之流水线上谋生计1 天前
接口测试实习指南:从基础方法到面试与现场难题
面试·职场和发展
Nil2081 天前
leetcode 279完全平方数
算法·leetcode·职场和发展
我命由我123451 天前
金融租赁极简理解
经验分享·学习·职场和发展·金融·求职招聘·职场发展·学习方法
考研保研资料分享1 天前
211工商管理保研北大光华:夏令营笔试、科研面试与人力资源复习经验
面试·职场和发展