AT24C02芯片使用介绍

这篇具有很好参考价值的文章主要介绍了AT24C02芯片使用介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AT24C02简介

      AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节,有一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有专门的写保护功能。应用于AT24C02制造过程的先进CMOS技术实质上减少了器件的功耗。

 AT24C02芯片使用介绍          AT24C02芯片使用介绍

AT24C02特性

      1、采用I2C 总线传输数据。

      2、工作电压范围:1.8V ~6.0V。

      3、采用低功耗CMOS 技术制造。

      4、当WP 为高电平时,AT24C02进入写保护状态。

      5、页写缓冲器。

      6、自定时擦写周期。

      7、1,000,000 编程/擦除周期。

      8、寿命长,可保存数据100 年。

      9、2种封装:8脚DIP SOIC 或TSSOP 封装。

      10、温度范围:商业级、工业级和汽车级。 

AT24C02管脚描述

AT24C02芯片使用介绍AT24C02芯片使用介绍

      1、SCL 串行时钟管脚

      AT24C02串行时钟输入管脚用于产生该器件所有数据发送或接收的时钟,SCL 串行时钟管脚是一个输入管脚。

      2、SDA 串行数据

      AT24C02的双向串行数据管脚SDA,用于该器件所有数据的发送或接收。SDA 管脚是一个开漏输出管脚。

      3、A0、A1、A2 器件地址输入端

      这3个输入管脚用于多个器件级联时设置器件地址,当这些管脚悬空时默认值为0。AT24C02 最大可级联8个器件。如果只有一个AT24C02被总线寻址,这三个地址输入脚(A0、A1、A2 )可悬空或连接到Vss 或 GND。

      4、WP写保护

      如果WP管脚连接到Vcc,AT24C02中所有的内容都被写保护只能读。当WP管脚连接到Vss 或 GND 或悬空时,允许AT24C02器件进行正常的读/写操作。

      5、VCC管脚

      AT24C02的VCC管脚接+1.8V~+6.0V 工作电压的正极。

     6、VSS管脚

      AT24C02的VSS管脚接+1.8V~+6.0V 工作电压的负极(即GND)。

AT24C02的器件寻址

      AT24C02的芯片地址为1010,其地址控制字格式为1010A2A1A0R/W。

AT24C02芯片使用介绍

       A2,A1,A0为可编程地址选择位(这3位必须与相应的硬件接线输入引脚相比较,对应AT24C02的管脚1、2 和3)。A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码,即为该AT24C02器件的地址码。R/W为AT24C02读写控制位:为1,表示对AT24C02进行读操作;为0,表示对AT24C02进行写操作。

AT24C02写操作

      在字节写模式下主器件发送起始命令和从器件地址信息(R/W 位置零)给从器件。在从器件产生应答信号后,主器件发AT24C02的字节地址,主器件在收到从器件的另一个应答信号后,再发送数据到被寻址的存储单元。AT24C02再次应答,并在主器件产生停止信号后开始内部数据的擦写,在内部擦写过程中AT24C02不再应答主器件的任何请求。

AT24C02芯片使用介绍

      页写操作的启动和字节写是相同的。不同在于主器件在第一个数据字节被写入后并不产生停止信号。主器件可以发送多达7 (1K/2K)或15 (4K, 8K, 16K)个额外的字节。每发送一个字节数据后AT24C02会产生一个应答位并将字节地址低位加1,而高位保持不变。

      当AT24C02内部接收的数据字节到达页面边界时,后续的数据字节会被放置在同一页面的开头(即开头原有的数据字节会被覆盖掉)。 AT24C02芯片使用介绍

读操作

      对AT24C02的读操作的初始化方式和写操作时一样,只是把R/W 位置为1。有三种不同的读操作方式:立即地址读、选择读和连续读。

      立即地址读

      AT24C02的地址计数器内容为最后操作字节的地址加1。也就是说如果上次读/写的操作地址为N,则立即读的地址从地址N+1开始。但当N+1超过页面边界时,将会“翻转”到0(即从当前页的最后一个字节翻转到同一页的第一个字节),且继续输出数据。

      AT24C02接收到从器件地址信号后(R/W 位置1),它首先发送一个应答信号,然后发送一个8位字节数据。主器件不需发送一个应答信号,但要产生一个停止信号。

AT24C02芯片使用介绍

选择性读

      选择性读操作允许主器件对从器件寄存器的任意字节进行读操作。主器件首先通过发送起始信号、从器件地址和它想读取的字节数据的地址执行一个伪写操作。在从器件应答之后,主器件重新发送起始信号和从器件地址,此时R/W 位置1,AT24C02响应并发送应答信号,然后输出所要求的一个8位字节数据,主器件不发送应答信号但产生一个停止信号。

      选择读时序

 AT24C02芯片使用介绍

连续读

      连续读操作可通过立即读或选择性读操作启动。在AT24C02发送完一个8 位字节数据后,主器件产生一个应答信号来响应,告知AT24C02,主器件要求更多的数据。对应每个主器件产生的应答信号,AT24C02将发送一个8 位数据字节。当主器件不发送应答信号而发送停止位时结束此操作。

      当读取的字节超过页面边界时,地址计数器将翻转到零,并继续输出数据字节。

AT24C02芯片使用介绍

一个例程:

/****************EEPROM读写多个数据*****************   

*单片机型号:STC89C52RC,频率:11.0592M

*开发环境:KEIL

*功能:EEPROM读写多个数据,根据数据点亮LED

***********************************************************/

#include<reg51.h>

#define uint unsigned int

#define uchar unsigned char

sbit sda = P2^0;                        

sbit scl = P2^1;

sbit LED = P1^0;

uchar code data1[40] = {

                         0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,

                         0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,

                         0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,

                         0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,

                         0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff

                        };

uchar buffer[40];                         //用于缓存从24c02中读取的数据。    

                 

void delay1(uint z)

{

 uchar x,x1;

 for(;z>0;z--)

 {

  for(x=0;x<114;x++)

  {for(x1=0;x1<1;x1++);}

 }

}

void delay_5us()

{

 int i;

 for(i=0;i<1;i++){;}

}

void delay(int In,int Out)              //定义延时函数 

{

 int i,j;

 for(i=0;i<In;i++)

 {for(j=0;j<Out;j++){;}}

}

void star()                                    //开始

{

 sda=1;delay_5us();

 scl=1;delay_5us();

 sda=0;delay_5us();

}

void stop()                                 //停止

{

 sda=0;delay_5us();

 scl=1;delay_5us();

 sda=1;delay_5us();

}

void ack()                                //应答

{

 uchar z=0;

 while((sda==1)&&(z<50))z++;

 scl=0;

 delay_5us();

}

//写一个数据函数

//器件写地址 slave_write_address

//字节地址 byte_address

//待写入数据 data_data

void write(uchar slave_write_address,uchar byte_address,uchar data_data)

//写一个数据

{

 uchar temp,temp1,i,ii;

 star();                                              //开始

 for(ii=0;ii<3;ii++)                             //按顺序送:器件写地址,字节地址,数据

 {

  if(ii==0)

  {

   temp=slave_write_address;        //送器件写地址

   temp1=slave_write_address;

  }

  else if(ii==1)

  {

   temp=byte_address;                  //送字节地址

   temp1=byte_address;

  }

  else if(ii==2)

  {

   temp=data_data;                      //送数据

   temp1=data_data;

  }

  for(i=0;i<8;i++)

  {

   scl=0;

   delay_5us();                             //5us延时

   temp=temp1;

   temp=temp&0x80;                   //相与后,把不相关的位清零     

  if(temp==0x80)                 

  //根据前面相与后,判断temp是否等于0x80,是则该位为 1

    sda=1;

    else

    sda=0;

    delay_5us();                           //5us延时

    scl=1;

    delay_5us();                           //5us延时

    scl=0;

    delay_5us();                           //5us延时

    temp1=temp1<<1;                 //向左移出1位

   }

   sda=1;

   delay_5us();                            //5us延时

   scl=1;

   delay_5us();                            //5us延时

   ack();

  }

  stop();                                       //停止

 }

//读一个数据函数

//器件写地址 slave_write_address

//器件读地址 slave_read_address

//字节地址 byte_address

//读出的数据 data_data

uchar read(uchar slave_write_address,uchar byte_address,uchar slave_read_address)

//读一个数据

{

 uchar temp,temp1,i,ii,x,data_data;

 star();                                                            //开始

 for(ii=0;ii<3;ii++)                     

 //按顺序送:器件写地址,字节地址,器件读地址

 {

  if(ii==0)

  {

   temp=slave_write_address;                       //送器件写地址

   temp1=slave_write_address;

  }

  else if(ii==1)

  {

   temp=byte_address;                                  //送字节地址

   temp1=byte_address;

  }

  else if(ii==2)

  {

   star();                                                         //开始

   temp=slave_read_address;                       //送器件读地址

   temp1=slave_read_address;

  }

for(i=0;i<8;i++)                                              //开始读数据

  {

   scl=0;

   delay_5us();

   temp=temp1;

   temp=temp&0x80;                                    //相与后,把不相关的位清零

   if(temp==0x80)                         

   //根据前面相与后,判断temp是否等于0x80,是则该位为 1

   sda=1;

   else

   sda=0;

   delay_5us();

   scl=1;

   delay_5us();

   scl=0;

   delay_5us();

   temp1=temp1<<1;                         //向左移出1位

  }

  sda=1;

  delay_5us();

  scl=1;

  delay_5us();

  ack();                                               //应答

 }

 for(x=0;x<8;x++)

 {

  data_data=data_data<<1;                 //向左移入1位

  sda=1;

  delay_5us();

  scl=0;

  delay_5us();

  scl=1;

  delay_5us();

  if(sda==1)                                   //判断 数据线是否是高电平

  data_data|=0x01;                        //把读到的数据或0X01

 }

 ack();                                           //应答

 stop();                                          //停止

 return data_data;                        //返回读到的数据 

}

void main()

{

 uchar i;

 for(i=0;i<=39;i++)

 {

  write(0xa0,i,data1[i]);

  delay1(20);

  LED = ~LED;                

 }

 LED=0;delay(50,1000);

 LED=1;

 delay(50,1000);   

 for(i=0;i<=39;i++)

 {

  buffer[i]=read(0xa0,i,0xa1);delay1(20);

  LED=~LED;

 }

 LED=0;delay(50,1000);

 LED=1;delay(50,1000);

 LED=0;delay(50,1000);

 LED=1;delay(50,1000);

 for(i=0;i<=39;i++)

 {

  P1=buffer[i];

  delay(50,1000);

 }

 while(1);

}

与例程对应的电路图

AT24C02芯片使用介绍AT24C02芯片使用介绍

 文章来源地址https://www.toymoban.com/news/detail-412828.html

 

到了这里,关于AT24C02芯片使用介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32——AT24C02(EEPROM )

    1、简介 AT24C02是一种2 Kb(256 × 8)串行电子可擦可编程只读存储器(EEPROM)芯片,支持标准I2C总线通信协议。 AT24C02的编程操作是以页为单位完成的,每次最多可编程8个连续字节。具体来说,AT24C02的一页大小为8个字节,每次写入数据时,需要确保写入的数据不跨页。因此,

    2024年04月13日
    浏览(45)
  • 【【51单片机的AT24C02】】

    AT24C02 先介绍一下存储器的知识 这里的重点肯定是I2C总线 存储器 分为2种 一种是易失性存储器RAM 还有一种是非易失性存储器ROM RAM分为 SRAM 和 DRAM Mask ROM PROM EPROM E2PROM 这几个是一个家族的 从创建之后 不能修改 然后 只能写一次 再而发展成可擦除可编程存储器EPROM E2PROM 电可擦

    2024年02月16日
    浏览(46)
  • STM32速成笔记—EEPROM(AT24C02)

    🎀 文章作者:二土电子 🌸 关注文末公众号获取其他资料和工程文件! 🐸 期待大家一起学习交流! AT24C01/02/04/08/16…是一个1K/2K/4K/8K/16K位电可擦除PROM,内部含有128/256/512/1024/2048个8位字节,AT24C01有一个8字节页写缓冲器,AT24C02/04/08/16有一个16字节页写缓冲器。电压可允许低

    2024年02月11日
    浏览(63)
  • AT24C02(I2C总线)通信的学习

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 学习AT24C02(I2C总线)芯片 RAM()存储速度较快,但容易丢失数据。ROM(Read Only Memory)存储速度较慢,但掉电不丢失数据。在使用时需要两者结合先存入RAM再转存到ROM中。 AT24C02是一种可以实现掉电不丢失

    2024年02月20日
    浏览(49)
  • EEPROM芯片(24c02)使用详解(I2C通信时序分析、操作源码分析、原理图分析)

    (1)本文主要是通过24c02芯片来讲解I2C接口的EEPROM操作方法,包含底层时序和读写的代码; (2)大部分代码是EEPROM芯片通用的,但是其中关于某些时间的要求,是和具体芯片相关的,和主控芯片和外设芯片都有关系,需要具体分析,但是逻辑顺序是不变的; (1)在嵌入式开发中,

    2024年02月09日
    浏览(65)
  • STM32MX配置EEPROM(AT24C02)------保姆级教程

    ———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动,包括ADC、UART、RS485、EEPROM(IIC)、FLASH(SPI)等等。

    2024年02月16日
    浏览(54)
  • STM32-I2C通信在AT24C02的应用

    AT24C02是一种失去电源供给后依旧能保持数据的储存器,常用来储存一些配置信息,在系统重新上电之后也可以加载。它的容量是2k bit的EEPROM存储器,采用I2C通信方式。 AT24C02支持两种写操作:字节写操作和页写操作。本实验中我们采用的是字节写操作,就是一个地址一个数据

    2024年02月09日
    浏览(53)
  • 51单片机——模拟I2C总线与AT24C02通信

    目录 一、写在前面 二、功能描述 三、主要模块介绍 3.1 I2C总线介绍 3.2 I2C总线协议 3.2.1数据有效规定 3.2.2起始信号和停止信号  3.2.3 发送应答和接收应答 3.2.4 主机发送一个字节和接收一个字节 3.3 AT24C02介绍 3.3 字节写和随机读 四、测试文件test.c 五、现象描述 AT24C02芯片有I

    2024年02月14日
    浏览(56)
  • (十一)51单片机——用AT24C02实现存储秒表数据(附成果展示)

    目录 存储器 RAM ROM 存储器简化模型 AT24C02介绍  引脚及应用电路  内部结构框图 I2C总线 I2C总线介绍 I2C电路规范 I2C时序结构 起始条件 终止条件 发送一个字节  接受一个字节  发送应答  接收应答 I2C数据帧 AT24C02数据帧 字节写 随机读 代码部分 遇到的问题  代码  硬件  

    2024年04月25日
    浏览(40)
  • STM32软件模拟实现IIC写入和读取AT24C02(STM32CubeMx配置)

    IIC:Inter Integrated Circuit,集成电路总线,是一种 同步 串行 半双工 通信总线。 在使用IIC时分为硬件IIC以及软件IIC,下图为两者的区别: 在使用IIC前先来了解一下IIC总线结构图,即下图: 从图中可以看出IIC有两个双向信号线,一根是数据线SDA,一根是时钟线SCL,并且都接上拉

    2024年02月04日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包