0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >基础知识 > eeprom存储器如何连接使用?

eeprom存储器如何连接使用?

来源:
2025-06-13
类别:基础知识
eye 2
文章创建人 拍明芯城

EEPROM(电可擦除可编程只读存储器)通过I²C、SPI或并行接口与微控制器连接,适合存储少量需要频繁更新的非易失性数据(如配置参数、校准值)。以下是连接与使用的详细步骤和示例。


一、EEPROM接口类型与选择

EEPROM通常支持以下接口,选择时需考虑微控制器资源、速度需求和硬件设计复杂度:


接口类型特点典型应用场景
I²C- 仅需2根线(SCL/SDA)
- 地址可配置(支持多设备挂载)
- 速度较慢(100kHz~400kHz)
传感器配置、设备参数存储
SPI- 4根线(MOSI/MISO/SCK/CS)
- 高速(可达MHz级)
- 需片选信号
实时数据记录、高速校准值更新
并行- 多根数据线(8/16位)
- 高速但占用引脚多
早期嵌入式系统(现较少使用)


推荐:优先选择I²C(简单)或SPI(高速),根据项目需求权衡。


二、硬件连接步骤

1. I²C接口连接(以AT24C256为例)

  • 引脚定义

    • A0/A1/A2:设备地址配置(通过跳线或焊接选择)。

    • SCL:I²C时钟线(接微控制器I²C时钟引脚)。

    • SDA:I²C数据线(接微控制器I²C数据引脚,需上拉电阻4.7kΩ)。

    • WP:写保护(接地允许写入,接VCC禁止写入)。

    • VCC/GND:电源(通常3.3V或5V)。

  • 连接示例(Arduino Uno):

AT24C256   Arduino Uno A0/A1/A2   GND(地址0x50) SCL        A5(I²C时钟) SDA        A4(I²C数据,接4.7kΩ上拉电阻) WP         GND(允许写入) VCC        5V GND        GND

2. SPI接口连接(以25LC256为例)

  • 引脚定义

    • CS:片选信号(低电平有效)。

    • SCK:SPI时钟线。

    • MOSI:主出从入数据线。

    • MISO:主入从出数据线。

    • WP:写保护(接地允许写入)。

    • HOLD:保持信号(接地或悬空)。

  • 连接示例(Arduino Uno):

QQ_1749778793056.png

三、软件配置与编程

1. I²C接口编程(Arduino示例)

#include <Wire.h> #define EEPROM_ADDRESS 0x50  // AT24C256默认地址(A0/A1/A2接地) void setup() {  Wire.begin();  Serial.begin(9600);  // 写入数据到EEPROM  uint16_t addr = 0x00;  byte dataToWrite = 0xAB;  writeEEPROM(addr, dataToWrite);  // 读取并验证  byte dataRead = readEEPROM(addr);  Serial.print("Read from EEPROM: 0x");  Serial.println(dataRead, HEX); } void loop() {} // 写入单个字节 void writeEEPROM(uint16_t addr, byte data) {  Wire.beginTransmission(EEPROM_ADDRESS);  Wire.write((addr >> 8) & 0xFF);  // 高8位地址  Wire.write(addr & 0xFF);         // 低8位地址  Wire.write(data);  Wire.endTransmission();  delay(5);  // 等待写入完成 } // 读取单个字节 byte readEEPROM(uint16_t addr) {  Wire.beginTransmission(EEPROM_ADDRESS);  Wire.write((addr >> 8) & 0xFF);  Wire.write(addr & 0xFF);  Wire.endTransmission(false);  // 重启传输(不发送停止位)  Wire.requestFrom(EEPROM_ADDRESS, 1);  if (Wire.available()) {    return Wire.read();  }  return 0xFF;  // 默认返回0xFF(未初始化) }

2. SPI接口编程(Arduino示例)

#include <SPI.h> #define CS_PIN 10  // 片选引脚 void setup() {  SPI.begin();  pinMode(CS_PIN, OUTPUT);  digitalWrite(CS_PIN, HIGH);  // 初始禁用片选  Serial.begin(9600);  // 写入数据到EEPROM  uint16_t addr = 0x00;  byte dataToWrite = 0xCD;  writeEEPROM(addr, dataToWrite);  // 读取并验证  byte dataRead = readEEPROM(addr);  Serial.print("Read from EEPROM: 0x");  Serial.println(dataRead, HEX); } void loop() {} // 写入单个字节 void writeEEPROM(uint16_t addr, byte data) {  digitalWrite(CS_PIN, LOW);  // 启用片选  // 发送写入指令(0x02) + 地址 + 数据  SPI.transfer(0x02);        // 写入指令  SPI.transfer((addr >> 8) & 0xFF);  // 高8位地址  SPI.transfer(addr & 0xFF);         // 低8位地址  SPI.transfer(data);  digitalWrite(CS_PIN, HIGH); // 禁用片选  delay(5);  // 等待写入完成 } // 读取单个字节 byte readEEPROM(uint16_t addr) {  digitalWrite(CS_PIN, LOW);  // 启用片选  // 发送读取指令(0x03) + 地址  SPI.transfer(0x03);        // 读取指令  SPI.transfer((addr >> 8) & 0xFF);  // 高8位地址  SPI.transfer(addr & 0xFF);         // 低8位地址  byte data = SPI.transfer(0x00);     // 发送空数据触发读取  digitalWrite(CS_PIN, HIGH); // 禁用片选  return data; }

四、关键注意事项

  1. 地址范围

    • 确保写入地址不超过EEPROM容量(如AT24C256为32KB,地址范围0x0000~0x7FFF)。

    • 错误示例:尝试写入地址0x8000会导致数据丢失或硬件异常。

  2. 写入时间

    • EEPROM写入需5ms左右,频繁写入可能导致性能瓶颈。

    • 优化建议:批量写入(页写入)或使用缓存机制。

  3. 写保护(WP引脚)

    • 确保WP引脚接地(允许写入),否则写入操作无效。

  4. 上拉电阻(I²C)

    • SDA/SCL需接4.7kΩ上拉电阻,否则通信可能失败。

  5. 电源稳定性

    • 写入过程中断电可能导致数据损坏,需确保电源稳定或添加超级电容。

  6. 片选信号(SPI)

    • 确保片选信号(CS)在通信期间保持低电平,结束后恢复高电平。


五、常见问题与解决方案


问题可能原因解决方案
无法读取或写入数据地址越界、I²C/SPI通信错误检查地址范围,验证硬件连接和时序
数据不一致写入未完成即读取添加延时或轮询写入完成状态
通信失败上拉电阻缺失、WP引脚错误添加上拉电阻,检查WP引脚电平
写入速度慢单字节写入使用页写入或批量操作



六、扩展应用场景

  1. 设备配置存储

    • 存储网络参数(如WiFi SSID/密码)、波特率等。

  2. 校准数据保存

    • 保存传感器校准值(如陀螺仪零偏、ADC增益)。

  3. 状态记录

    • 记录设备运行状态(如开机次数、故障代码)。


七、总结

  • 连接核心

    • I²C:SCL/SDA + 上拉电阻 + 地址配置。

    • SPI:MOSI/MISO/SCK/CS + 写保护处理。

  • 编程核心

    • 初始化接口 → 发送指令/地址 → 写入/读取数据 → 验证结果。

  • 关键点

    • 注意地址范围、写入时间、写保护和电源稳定性。

    • 优先使用页写入提高效率。

通过以上步骤和代码示例,可以快速上手EEPROM的连接与使用,并根据具体需求调整实现方式。


责任编辑:Pan

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: eeprom存储器

相关资讯

资讯推荐
云母电容公司_云母电容生产厂商

云母电容公司_云母电容生产厂商

开关三极管13007的规格参数、引脚图、开关电源电路图?三极管13007可以用什么型号替代?

开关三极管13007的规格参数、引脚图、开关电源电路图?三极管13007可以用什么型号替代?

74ls74中文资料汇总(74ls74引脚图及功能_内部结构及应用电路)

74ls74中文资料汇总(74ls74引脚图及功能_内部结构及应用电路)

芯片lm2596s开关电压调节器的中文资料_引脚图及功能_内部结构及原理图_电路图及封装

芯片lm2596s开关电压调节器的中文资料_引脚图及功能_内部结构及原理图_电路图及封装

芯片UA741运算放大器的资料及参数_引脚图及功能_电路原理图?ua741运算放大器的替代型号有哪些?

芯片UA741运算放大器的资料及参数_引脚图及功能_电路原理图?ua741运算放大器的替代型号有哪些?

28nm光刻机卡住“02专项”——对于督工部分观点的批判(睡前消息353期)

28nm光刻机卡住“02专项”——对于督工部分观点的批判(睡前消息353期)

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告