读写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代表不同的容量。

AT24CXXXbit容量Byte容量
AT24C011Kbit128Byte
AT24C022Kbit256Byte
AT24C044Kbit512Byte
AT24C088Kbit1024Byte
AT24C1616Kbit2048Byte
AT24C3232Kbit4096Byte
AT24C6464Kbit8192Byte
AT24C128128Kbit16384Byte
AT24C256256Kbit32768Byte
AT24C512512Kbit65536Byte

2.AT24CXXX页与页内单元

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

AT24CXXXByte容量页数页内字节单元数
AT24C01128Byte16页8Byte
AT24C02256Byte32页8Byte
AT24C04512Byte32页16Byte
AT24C081024Byte64页16Byte
AT24C162048Byte128页16Byte
AT24C324096Byte128页32Byte
AT24C648192Byte256页32Byte
AT24C12816384Byte256页64Byte
AT24C25632768Byte512页64Byte
AT24C51265536Byte512页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
AT24C01128Byte7bit在这里插入图片描述
AT24C02256Byte8bit在这里插入图片描述
AT24C04512Byte9bit在这里插入图片描述
AT24C081024Byte10bit在这里插入图片描述
AT24C162048Byte11bit在这里插入图片描述
AT24C324096Byte12bit在这里插入图片描述
AT24C648192Byte13bit在这里插入图片描述
AT24C12816384Byte14bit在这里插入图片描述
AT24C25632768Byte15bit在这里插入图片描述
AT24C51265536Byte16bit在这里插入图片描述

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)

AT24CXXXByte容量页数页内字节单元数页地址 页内偏移地址
AT24C01128Byte16页8Byte在这里插入图片描述
AT24C02256Byte32页8Byte在这里插入图片描述
AT24C04512Byte32页16Byte在这里插入图片描述
AT24C081024Byte64页16Byte在这里插入图片描述
AT24C162048Byte128页16Byte在这里插入图片描述
AT24C324096Byte128页32Byte在这里插入图片描述
AT24C648192Byte256页32Byte在这里插入图片描述
AT24C12816384Byte256页64Byte在这里插入图片描述
AT24C25632768Byte512页64Byte在这里插入图片描述
AT24C51265536Byte512页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协议详解

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

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

  • 40
    点赞
  • 199
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
### 回答1: Linux at24c512是一个在Linux操作系统上使用的EEPROM设备驱动程序,可以用于读写AT24C512系列芯片。AT24C512是一款串行EEPROM芯片,容量为512Kbit,可以存储大约64KB的数据。 在Linux系统中,驱动程序被用于管理和控制硬件设备。AT24C512驱动程序允许用户通过Linux内核提供的接口来读写AT24C512芯片中的数据。这样,用户就可以在Linux系统中方便地使用AT24C512芯片进行数据存储和读取操作。 通过使用AT24C512驱动程序,用户可以通过简单的Linux命令或编程接口来读写AT24C512芯片中的数据。这为用户提供了一个灵活的方式来进行数据存储和管理。用户可以选择使用命令行工具,如dd或i2c-tools,或编写自己的应用程序来与AT24C512芯片进行交互。 与其他Linux驱动程序类似,AT24C512驱动程序也需要与相关的硬件设备连接并配置正确的引脚连接。通过在Linux内核中加载AT24C512驱动程序,操作系统就可以正确地识别和控制该硬件设备。 总之,Linux at24c512是一个用于管理和控制AT24C512芯片的设备驱动程序。通过使用这个驱动程序,用户可以在Linux系统中方便地读写AT24C512芯片中的数据。这为用户提供了一种灵活的方式来进行数据存储和管理。 ### 回答2: AT24C512是一种EEPROM(Electrically Erasable Programmable Read-Only Memory)芯片,它具有512K位的存储容量。在Linux操作系统中,可以使用相应的驱动程序来读取和写入AT24C512芯片中的数据。 在使用AT24C512芯片之前,需要先加载相应的内核模块。Linux系统已经提供了at24驱动程序,可以通过modprobe命令加载该驱动模块。加载成功后,系统会自动创建一个与AT24C512芯片对应的设备节点,通常是/dev/at24。 通过该设备节点,可以使用工具或者编写相应的程序来访问和操作AT24C512芯片。常用的工具有i2cset和i2cget命令,可以通过这两个命令向指定地址写入数据或者读取数据。具体命令格式可以通过man命令查看。 在编写程序时,可以使用Linux提供的I2C接口库如libi2c-dev来实现对AT24C512芯片的读写操作。首先需要打开I2C总线,在打开设备的过程中需要指定设备地址和总线号。打开成功后,可以使用相应的读写函数来操作芯片的数据。 例如,在C语言中可以使用open函数打开设备,使用ioctl函数来设置设备地址和总线号。然后就可以使用read和write函数来读写芯片的数据。读取时需要指定读取的起始地址和读取的长度,写入时需要指定写入的起始地址和写入的数据。 总体来说,使用Linux操作系统可以方便地访问和操作AT24C512芯片。无论是使用工具还是编写程序,都可以通过相应的命令或者API来读取和写入芯片中的数据。 ### 回答3: Linux at24c512是指Linux操作系统中使用的一种支持at24c512芯片的驱动程序。at24c512是一款24CXXX系列的串行EEPROM芯片,容量为512K。在Linux中,通过at24c512驱动程序,可以通过I2C总线与at24c512芯片进行通信,实现对芯片的读取和写入操作。 在Linux系统中,我们可以使用命令`i2cdetect`来检测I2C总线上是否连接有at24c512设备。如果检测到设备的地址,就说明我们可以通过I2C总线与at24c512进行通信。 在Linux操作系统中,通常需要加载at24c512驱动模块,以便能够使用该芯片。加载驱动模块的命令是`modprobe at24`。加载成功后,系统会根据硬件信息自动识别和分配设备节点。 一旦驱动加载成功,并且设备节点创建完成,我们就可以在用户空间操作at24c512芯片了。通过查看文件系统的`/sys/class/i2c-dev`目录,我们可以找到at24c512设备节点的信息。 在用户空间,我们可以使用`i2cget`和`i2cset`命令来读取和写入at24c512芯片的数据。例如,使用`i2cget -y 1 0x50 0x00`命令可以读取at24c512芯片地址0x00处的数据。 除了通过命令行工具,还可以通过C或Python等编程语言编写程序,使用相应的库函数来进行at24c512芯片的操作。 总之,Linux at24c512是指Linux操作系统中使用的支持at24c512芯片的驱动程序,通过它可以实现对at24c512芯片的读取和写入操作。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字硬鉴

你的鼓励就是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值