关于外部EEPROM的使用

2014-10-211.7万
AI 快速预览详细 收起
本文介绍了一种兼容多种EEPROM型号的库文件,用于扩展Arduino内存。通过修改和调试,作者提供了一个适用于AT24C02、AT24C32和AT24C512等型号的库文件。使用时需要注意EEPROM的内存容量,并根据datasheet设置Memory_Size。这个库文件解决了不同容量EEPROM的代码兼容问题,帮助新手轻松扩展内存。
学了Arduino两个月,UNO让人尴尬的内存,让有强迫症的我感觉不自在,尝试使用外部EEPROM时,却发现很多教程之间存在一个问题——仅仅适用于一种EEPROM,2K的代码,用得到32K的就不行了~经过两个月的苦心钻研,参考各位的库文件,经过自行修改和调试,写了一个兼容性较为客观的库文件(当然,大神可以无视这句话...:L留给同样喜欢Arduino的入门新手参考)
  1. #include <AT24CXXX.h>
  2. #include <Wire.h>
  3. AT24CXXX ROM_512;
  4. void setup()
  5. {
  6.   Wire.begin();        //启动I2C通信
  7.   Serial.begin(9600);
  8.   
  9.   ROM_512.Memory_Size(512);
  10.   //512K内部地址:  0x0000——0xffff
  11.   //32K内部地址:   0x0000——0x0fff
  12.   //2K内部地址:    0x0000——0x00ff
  13. }
  14. void loop()
  15. {
  16.   byte a0 = 0xff;  byte a1 = 0xff;
  17.   
  18.   //WriteByte(硬件地址位,内部地址位,一个字节数据)
  19.   ROM_512.WriteByte(0x50 ,0x0000 ,0xaa);
  20.   ROM_512.WriteByte(0x50 ,0x00ff ,0xbb);
  21.   
  22.   //Readbyte(硬件地址位,内部地址位)  
  23.   a0 = ROM_512.ReadByte(0x50 ,0x0000);
  24.   a1 = ROM_512.ReadByte(0x50 ,0x00ff);
  25.   
  26.   Serial.print("a0=");delay(10);
  27.   Serial.println( a0,HEX );delay(1000);
  28.   Serial.print("a1=");delay(10);
  29.   Serial.println( a1,HEX );delay(1000);
  30. }
复制代码
这个是最简单的一个,使用时要注意EEPROM的内存容量(Memory_Size),自己百度对应的datasheet,查看AT24CXXX系列EEPROM的内部地址最高为多少,因为超过了,它会自动覆盖,从0x0000开始重写~目前尝试过AT24C02,AT24C32,AT24C512的EEPROM,如果你们使用过程中遇到问题请留言,大家交流一下
PS:还是别用512K以上的EEPROM,512都解决不了,还是直接上SD卡吧;P

AT24CXXX.zip

4.19 KB, 下载次数: 5598

库文件+例程

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(5)
luke02
luke02
感谢share ,我下载了,可以学习一下,
小A
小A
大神请教一个问题
能不能向 EEPROM中写入程序,让
arduino来运行?
我现在有个程序39K大小,UNO完全用不了啊!
zsh516
zsh516
方便加QQ联系吗
zsh516
zsh516
方便加QQ联系吗
zsh516
zsh516
最近遇到一个问题,也尝试了你的代码,,还是只能读数据,不能写入数据,我用的不是标准的eeprom,是集成在另一个芯片里的,还有就是,用了一块8051的调试板是可以往里面写入数据的,用arduino不行,不知道如何解决,求教
加饭
加饭
作者
回复zsh516
我也不是很专业,对于你的问题,无法给出准确的解释,但可以给你提个建议:芯片的写保护引脚是否被锁了?其次更换一下读取的地址位,看读取的数据与之前写入的是否一致~
另外查看相关数据手册,看一下该芯片的通信协议~
- 没有更多了 -