读写EEPROM_AT24CXXX

读写EEPROM_AT24CXXX

概述: 最近一个小的项目需要单片机驱动OLED上显示30张以上的BMP图片,所选单片机Flash较小存不下这30张图片,于是捡起了身边的EEPROM*–*,选用芯片为AT24C256。

说明: 照片分辨率为128×64,格式为BMP,一张照片所需的存储单元128×64=8192bit (1024Byte)。
30张照片所需的存储空间为30×1024=30720Byte。
AT24C256存储单元为32768×8bit,及可存储32768Byte,刚好存储这30张照片。

注意: 芯片手册所谓的256K,指的是256Kbit而不是256KByte。1Kbit=1024bit,即256K=256×1024bit=262144bit=32768Byte
通俗的讲比如我们定义的一个8bit数据

手册下载官网https://www.microchip.com/


1.AT24CXXX容量

  AT24C01,AT24C02,AT24C04,AT24C08,AT24C16,AT24C32,AT24C64,AT24C128,AT24C256…不同的xxx代表不同的容量。

AT24CXXX bit容量 Byte容量
AT24C01 1Kbit 128Byte
AT24C02 2Kbit 256Byte
AT24C04 4Kbit 512Byte
AT24C08 8Kbit 1024Byte
AT24C16 16Kbit 2048Byte
AT24C32 32Kbit 4096Byte
AT24C64 64Kbit 8192Byte
AT24C128 128Kbit 16384Byte
AT24C256 256Kbit 32768Byte
AT24C512 512Kbit 65536Byte

2.AT24CXXX页与页内单元

  总容量(Byte容量) = 页数 × 页内字节单元数。

AT24CXXX Byte容量 页数 页内字节单元数
AT24C01 128Byte 16页 8Byte
AT24C02 256Byte 32页 8Byte
AT24C04 512Byte 32页 16Byte
AT24C08 1024Byte 64页 16Byte
AT24C16 2048Byte 128页 16Byte
AT24C32 4096Byte 128页 32Byte
AT24C64 8192Byte 256页 32Byte
AT24C128 16384Byte 256页 64Byte
AT24C256 32768Byte 512页 64Byte
AT24C512 65536Byte 512页 128Byte

3.AT24CXXXX寻址方式(不是IIC地址,是存储器内部寻址)

  对AT24CXXX进行读写操作时,都得先访问存储地址、比如AT24C01写一个字节的IIC时序:
在这里插入图片描述
  先发送设备地址,收到应答后再发送需要写数据的地址(WORD ADDRESS)。AT24C01容量为128Byte则WORD ADDRESS只需要7bit就可以覆盖128Byte的数据地址。通俗的讲就是128Byte就占用了128个地址,一个7bit的数据范围为(0-127)刚好128,所以128Byte的字节地址需要一个7bit的数据来表示。
AT24CXXX 字节地址如下(*表示无效位):

AT24CXXX 容量(Byte) WORD ADDRESS(占用bit数) WORD ADDRESS
AT24C01 128Byte 7bit 在这里插入图片描述
AT24C02 256Byte 8bit 在这里插入图片描述
AT24C04 512Byte 9bit 在这里插入图片描述
AT24C08 1024Byte 10bit 在这里插入图片描述
AT24C16 2048Byte 11bit 在这里插入图片描述
AT24C32 4096Byte 12bit 在这里插入图片描述
AT24C64 8192Byte 13bit 在这里插入图片描述
AT24C128 16384Byte 14bit 在这里插入图片描述
AT24C256 32768Byte 15bit 在这里插入图片描述
AT24C512 65536Byte 16bit 在这里插入图片描述

4.AT24CXXX页地址与页内单元地址

  比如AT24C256有512页每页64个字节,15bit的地址数据对其寻址,低6bit(D5-D0)为页内字节单元地址,高9bit(D14-D6)为页地址。
在这里插入图片描述
如第16页开始写,则WORD ADDRESS = 0x0400(0000 0100 0000 0000
0:地址无效位
000 0100 00:9位页地址
00 0000:6位页内字节单元地址
下表如AT24C01
16页:需要4bit寻址(2^4=16)
8Byte:需要3bit寻址(2^3=8)

AT24CXXX Byte容量 页数 页内字节单元数 页地址 页内偏移地址
AT24C01 128Byte 16页 8Byte 在这里插入图片描述
AT24C02 256Byte 32页 8Byte 在这里插入图片描述
AT24C04 512Byte 32页 16Byte 在这里插入图片描述
AT24C08 1024Byte 64页 16Byte 在这里插入图片描述
AT24C16 2048Byte 128页 16Byte 在这里插入图片描述
AT24C32 4096Byte 128页 32Byte 在这里插入图片描述
AT24C64 8192Byte 256页 32Byte 在这里插入图片描述
AT24C128 16384Byte 256页 64Byte 在这里插入图片描述
AT24C256 32768Byte 512页 64Byte 在这里插入图片描述
AT24C512 65536Byte 512页 128Byte 在这里插入图片描述

查看手册
AT24C01字节寻址需一个7bit地址:
在这里插入图片描述
AT24C128字节寻址需一个14bit地址:
在这里插入图片描述
以此类推,其实就是上面总结的那张表。

5.AT24CXXX IIC地址

  IIC通信需要先向从设备发送设备地址,AT24CXXX芯片上有A2、A1、A0引脚,通过这三个引脚我们就可以自定义AT24CXXX芯片的通信地址。
在这里插入图片描述
地址构成如下(手册上都会有写),比如A2、A1、A0接地,则IIC写地址为1010 0000(0xA0),读地址为1010 0001(0xA1),有关IIC地址详情请看IIC协议详解
在这里插入图片描述

6.AT24CXXX 数据的读写

AT24C256为例

字节写

在这里插入图片描述

按页写

在这里插入图片描述
★注意:
  往AT24CXXX中写数据时,每写一个Byte的数据页内地址+1,当前页写满后会重新覆盖掉这一页前面的数据,而不会自动跳转到下一页,但是读会自动翻页。
具体看手册:
在这里插入图片描述

如何翻页写

  按页写其实就是执行一次下面的时序,也就是发送一次从机设备和字节地址最大就可以写入64字节的数据,如果要连写多页,就重新按照以下时序发送从机地址和字节地址等。
在这里插入图片描述

有以下模式,和写差不多
在这里插入图片描述
在这里插入图片描述

7.读写代码

没时间整理了,要不参考:IIC协议详解

注意:不同的芯片读写会不同,具体查看相应的手册。

★★★如有错误欢迎指导!!!

猜你喜欢

转载自blog.csdn.net/qq_40147893/article/details/107815959