精华内容
下载资源
问答
  • 在Arduino项目中使用Atmels EEPROM AT24C32 / AT24C64 / AT24C128 / AT24C256 / AT24C512的库。 有关定义和差异的信息,请参见 。 由Christian Paul撰写,2014年-2015年。该软件根据MIT许可条款发行。 有关详细信息...
  • <div><p>at24c04, at24c08 and at24c16 have a special data address representation, the high-order bits are inserted into the device address. <p>Signed-off-by: fengch </p><p>该提问来源于开源项目:...
  • 这是基于STM32设计的AT24C02与AT24C08_EEPROM存储芯片驱动代码,包含了IIC模拟时序、IIC硬件时序两种方式驱动。 包含了AT24C02、AT24C08两款芯片的代码。
  • C51 读写 AT24C04 源代码及 AT24C04 测试程序 一 C51 读 写 AT24C04 源 代 码 /*=============================================*/ /*/ /; 起动 24C01 时序*/ void Start { SCL=1; SDA=1; SDA=0; SCL=0; } /*/ /; ...
  • EEPROM AT24C08

    2018-08-29 18:25:23
    AT24C02A AT24C04A AT24C08A AT24C08B 2-Wire Serial EEPROM
  • 根据AT24C02的手册读写AT24C02

    千次阅读 2017-11-21 12:55:32
    1.从起始地址连续读出AT24C02中256个字节中的数据。采用的是Random read的时序读取的。 //连续读(Randem读的时序) AT24C04_Start(); //起始信号 AT24C04_SendByte(AT24_Address); //发送设备地址+写信号 ack=...

    1.从起始地址连续读出AT24C02中256个字节中的数据。采用的是Random read的时序读取的。

     //连续读(Randem读的时序)

    AT24C04_Start();            //起始信号

     AT24C04_SendByte(AT24_Address);     //发送设备地址+写信号

    ack=check();

    AT24C04_SendByte(0x00);     //发送存储单元地址

    ack=check();

    AT24C04_Start();            //起始信号

    AT24C04_SendByte(AT24_Address+1);     //发送设备地址+读信号

    ack=check();

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

     {

       temp1[i]= AT24C04_RecvByte(); //自己创建的数组用来接收存储的数据

       if (i == 255)

       {

           AT24C04_SendACK(1);//最后一个数据需要回NAK

       }

       else

       {

          AT24C04_SendACK(0);//回应ACK

        } 

       }

      AT24C04_Stop();               //停止信号

    2.     用Byte Write时序把0xa0写入到0x01的地址中

    AT24C04_Start();                    //起始信号

    AT24C04_SendByte(AT24_Address);     //发送设备地址+写信号

    ack =check();

    AT24C04_SendByte(0x01);             //发送存储单元地址0x01

    ack=check();

    AT24C04_SendByte(0x0a);            //发送要写入的数据0x0a

    ack=check();

     AT24C04_Stop();

    3.用Page Write时序来写一页数据到AT24C02中,切记存储单元地址一定要是8的倍数

    AT24C04_Start();                    //起始信号

    AT24C04_SendByte(AT24_Address);     //发送设备地址+写信号

    ack=check();

    AT24C04_SendByte(0x18);                 //发送存储单元地址,0x18,换为10进制为24,也就是第4页的起始地址
     ack=check();
    for(i=0;i<8;i++)
    {
           AT24C04_SendByte(10);//写入一页,8个10
           ack=check();
     }

     AT24C04_Stop();

    4.用Current Address Read的时序来读,上次最后一个数据存在哪里,则从哪个地址的后一个地址开始读

    AT24C04_Start(); 

    AT24C04_SendByte(AT24_Address+1);

    ack=check();

    temp1[0]= AT24C04_RecvByte();

    AT24C04_SendACK(1);//最后一个数据需要回NAK

    5.用Sequential Read 时序从当前地址连续读256个数,如果当前地址不是从0开始则读不够256个

    AT24C04_Start();

    AT24C04_SendByte(AT24_Address+1);

    ack=check();

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

     {

      temp1[i]= AT24C04_RecvByte();

      if (i == 255)

      {

      AT24C04_SendACK(1);//最后一个数据需要回NAK

      }

      else

      {

         AT24C04_SendACK(0);//回应ACK

    }

    AT24C04_Stop();               //停止信号

    }

    6.附start(),stop(),ack(), check(),AT24C04_SendByte(),AT24C04_RecvByte()代码

     

    void AT24C04_Start()

    {

        SDA = 1;                    //拉高数据线

        SCL = 1;                    //拉高时钟线

        Delay5us();                 //延时

        SDA = 0;                    //产生下降沿

        Delay5us();                 //延时

        SCL = 0;                    //拉低时钟线

    }

     

    void AT24C04_Stop()

    {

        SDA = 0;                    //拉低数据线

        SCL = 1;                    //拉高时钟线

        Delay5us();                 //延时

        SDA = 1;                    //产生上升沿

        Delay5us();                 //延时

    }

     

    void AT24C04_SendACK(bit ack)

    {

        SDA = ack;                  //写应答信号

        SCL = 1;                    //拉高时钟线

        Delay5us();                 //延时

        SCL = 0;                    //拉低时钟线

        Delay5us();                 //延时

    }

     

    unsigned char check(void)

    {

    //    SDA =1; //释放SDA线

        SCL=1; //拉高时钟线

        Delay5us();//延时

      CY = SDA;//读应答信号

        SCL=0; //拉低时钟线

        Delay5us();   //延时

        return CY;

    }

     

    void AT24C04_SendByte(unsigned char dat)

    {

        unsigned char i;

     

        for (i=0; i<8; i++)         //8位计数器

        {

            dat <<= 1;              //移出数据的最高位

            SDA = CY;               //送数据口

            SCL = 1;                //拉高时钟线

            Delay5us();             //延时

            SCL = 0;                //拉低时钟线

            Delay5us();             //延时

        }

    }

     

    unsigned char AT24C04_RecvByte()

    {

        unsigned char i;

        unsigned char dat = 0;

     

        SDA = 1;                    //使能内部上拉,准备读取数据

        for (i=0; i<8; i++)         //8位计数器

        {

            dat <<= 1;

            SCL = 1;                //拉高时钟线

            Delay5us();             //延时

            dat |= SDA;             //读数据

            SCL = 0;                //拉低时钟线

            Delay5us();             //延时

        }

     

        return dat;

    }

    展开全文
  • at24c02 at24c512 资料总集(中英文都有)
  • AT24C512C_h.h AT24C512C Arduino 库 这个库是免费软件; 您可以根据自由软件基金会发布的 GNU 宽松通用公共许可证的条款重新分发和/或修改它; 许可证的 2.1 版,或(由您选择)任何更高版本。 分发该库是希望它会...
  • AT24C01~AT24C256通用读写程序(C51),为AT24C01~AT24C256的读写程序,各人可根据自己的需要应用。 在buf1中填入需要写入的内容,buf2的大小可根据需要定义。 addr可根据使用的芯片选择,可从任何位置读写,只要在...
  • AT24C512与AT24C512B的区别

    千次阅读 2016-07-24 08:57:44
    AT24C512与AT24C512B的区别 eerun 发表 前几日公司采购人员说现在AT24C512要停产了,替代型号为AT24C512B,因为公司产品中使用该器件较多,因此专门又研究了一下这两个芯片,发现还是有...
    AT24C512与AT24C512B的区别
    eerun 发表

    前几日公司采购人员说现在AT24C512要停产了,替代型号为AT24C512B,因为公司产品中使用该器件较多,因此专门又研究了一下这两个芯片,发现还是有很多地方不同的。
    (1)AT24C512输入电压有2个等级,1.8V和2.7V。2.7输入电压为2.7V-5.5V
       AT24C512B输入电压有2个等级,1.8V和2.5V。2.5V的输入电压为为2.5V-3.6V。
       如果产品中使用的是5V等级的,在以后的产品中就必须要改版了。
    (2)AT24C512在5V供电时,SCL时钟频率才能到1MHZ,在3.3V供电时,只能达到400K,AT24C512B在3.3V供电时即可达到1MHZ。
    (3)AT24C512只有两个地址线A0,A1,最多可并联4片,内部下拉到GND。如果VCC上的耦合电容<3pF,悬空可以认为是连接到GND;如果VCC上的耦合电容>3pF,建议将引脚直接下拉到GND。 AT24C512B有三个地址线A0,A1,A2,最多可并联8片,内部下拉到GND。由于耦合电容的原因,ATMEL建议将其连接到一个确认的状态。如果采用上拉电阻,建议为10K。
    (4)tBUF – time the bus must be free before a new transmission can start,即从本次结束到下次起始之间的最小间隔,对AT24C512B在3.3V供电时,这个时间最小为0.5us,是确定的;而对5V的AT24C512,这个时间最小为0.5us,该时间是没有100%测试的。
    (5)对于因为掉电或系统复位导致的传输中断,AT24C512B提供一个软复位模式:A:发送一个起始位;B:发送9个时钟脉冲;C:再发送一个起始位和一个停止位;这样器件就为下一次数据传输做好了准备。
    AT24C512的步骤为:A:发送9个时钟脉冲;B:在SCL发送脉冲的过程中,在SCL为高电平的时候,检测SDA是否为高电平,如果是高电平,那么C:在SDA为高电平时,发送一个起始位。
     
    另外:AT24C512B芯片上的标示为ATMLH(X)(XX),其中第一个(X)代表生产年份,(XX)代表日期。如果凭ATMLHxxx查资料,是查不到的。。。呵呵。
     
    希望对大家有所帮助。
    展开全文
  • AT24C02芯片手册

    2018-07-27 17:44:51
    at24c02 EEPROM 芯片手册 at24c02 EEPROM 芯片手册at24c02 EEPROM 芯片手册
  • AT24C02SC.pdf

    2020-04-22 19:51:38
    AT24C02SC-EEPROM数据手册 AT24C02SC-EEPROM数据手册 AT24C02SC-EEPROM数据手册
  • AT24C02.zip

    2020-03-30 11:30:51
    内部包含两份AT24C02以及扩展AT24C0X\ AT24CXX.文档讲解详细,错误率低。包含笔记。
  • AT24C02(I2C总线)_AT24C02数据存储&秒表(定时器扫描按键数码管)小白极客的51单片机笔记(自用)第一部分—存储器介绍第二部分—AT24C02存储芯片介绍第三部分—I2C总线介绍(重点)第四部分—AT24C02数据帧...

    小白极客的51单片机笔记(自用)

    这篇文章写于本人大二暑假实习的面试前,因为觉得这部分的内容很重要又自觉自己无法看一遍就能全部理解并记忆,于是写下了人生中值得纪念的第一篇博客,因为是给自己用的知识点整理文章,所以较为粗糙,如有错误请尽情指出。

    第一部分—存储器介绍

    存储器分易失性存储器/RAM,与非易失性存储器/ROM
    前者分为SRAM(静态RAM)与DRAM(动态RAM)两种,优点是存储速度特别快,缺点是掉电丢失,这是它最为鲜明的缺点。
    后者有Mask ROM(掩膜ROM)、PROM(可编程ROM)、EPROM(可擦除可编程ROM)、E2PROM(电可擦除可编程ROM)、Flash(闪存)、硬盘(软盘、光盘等), 优点是掉电不丢失,缺点是存储比较慢

    RAM

    1. SRAM(静态RAM) ,内部的存储结构是锁存器,是一个D触发器,用电路来存储数据,是所有存储器中最快的一个,一般用于电脑CPU高速缓存,单片机里面也是SRAM,比如定义的变量就存储在SRAM里面,特殊功能寄存器也是一种SRAM。它的容量较小成本较高。
    2. DRAM(动态RAM) 用电容来存储数据,我们知道电容充完电后显示高电平,放完电后显示低电平。但是因为这个电容它集成度特别高所以容值特别小,因为电容存在漏电现象,所以在存储数据后很快就会漏电漏完了。所以我们要给它配一个扫描电路,每隔一段时间就读取它的数据,并给它重新充电,每隔一段时间刷新一下,补上那些因为漏电现象所丢失的电能,所以它叫动态RAM,因为它要动态刷新。但是DRAM相比SRAM成本更低,容量更大,包括电脑里面的内存条和手机里面的运行内存都是动态RAM。

    ROM

    1. MaskROM(掩膜ROM) 最早的ROM,在刚开始做出来后仅仅依靠电路来存储数据,芯片成品无法更改,可以保证掉电不丢失,ROM得名于此,即read only memory;
    2. PROM(可编程ROM) 相对于上一代而言,PROM是可写入的,缺点是只能写入一次,PROM生产出来以后,第一次写好,以后就永远是这个数据从,无法再进行更改;
    3. EPROM(可擦除可编程ROM) 是PROM的升级版,生产出来后我们也可以对它进行编程,同时也可以再编程结束后将它清除成编程前的状态,但是需要紫外线将其照射三十分钟才可将其擦除。同时“ROM”这个词已经成为了一个广义的概念,掉电不丢失的非易失性存储器都概括为ROM;
    4. E2PROM(电可擦除可编程ROM) 本节的AT24C02就是一种E2PROM,在5V的低压电的情况下,几毫秒就可将其擦除,但应用不是特别广泛;
    5. Flash(闪存) 功能十分强大,应用十分广泛,包括单片机的程序存储器、U盘、内存卡、电脑的固态硬盘和手机里用来存储的介质全部都采用的Flash;
    6. 硬盘(软盘、光盘等) 像是电脑里的机械硬盘,它是靠磁介质来存储信息的,软盘是早期电脑刚出来时候的产品,容量也很小,现在都被淘汰了,现在的电脑都是从C盘开始的,在早期的时候,A盘和B盘就是留给软盘的,光盘是用光信号存储的。

    第二部分—AT24C02存储芯片介绍

    AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息。
    存储介质:E2PROM
    通讯接口:I2C总线
    容量:256字节

    引脚及应用电路
    在这里插入图片描述
    在这里插入图片描述
    内部结构框图
    在这里插入图片描述
    X DEC-译码器,左边是地址线,输入译码器又回来
    SERIAL MUX-串行数据选择端,借助Y DEC(Y译码器)通过D(out)/ACK LOGIC一位一位的输出出去;
    DATA WORD ADDR/COUNTER-用来设置地址,内部设有存储地址的寄存器,每写入或读出一个地址,这个寄存器会自动加一,如果读出不指定地址的话,它默认把寄存器的数据拿出来

    第三部分—I2C总线介绍(重难点)

    I2C总线介绍

    1. I2C总线(Inter IC bus)是由Philips公司开发的一种通用数据总线。
    2. 两根通信线:SCL(Serial Clock串行时钟线)、SDA(Seriak Data串行数据线)。
    3. 同步、半双工,带数据应答。
      *注:同步(因为它有单独的时钟线)、半双工(SDA只有一根线,并且还要来回通信)
    4. 通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度。
      *注

    I2C电路规范

    • 所有I2C设备的SCL连在一起,SDA连在一起
    • 设备的SCL和SDA均要配置成开漏输出模式
      *开漏输出模式-断开时引脚成浮空状态(电路断开,电压不稳定)
    • SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右
    • 开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题
      在这里插入图片描述

    I2C时序结构

    • 起始条件:SCL高电平期间,SDA从高电平切换到低电平

    • 终止条件:SCL高电平期间,SDA从低电平切换到高电平
      在这里插入图片描述

    • 发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位在前),然后拉高SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节
      画叉的地方表示时序是不确定的

    • 接收一个字节:SCL低电平期间,从机将数据位依次放到SDA总线上(高位在前),然后拉高SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)在这里插入图片描述
      *把SDA置1,相当于释放,释放的时候,主机是完全不干预通讯线的,换言之就是主机将线的控制权交给了从机,紫色代表从机控制着总线

    • 发送应答:在接收完一个字节之后,主机在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

    • 接收应答:在发送完一个字节之后,主机在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)
      在这里插入图片描述

    I2C数据帧

    • 发送一帧数据
    1. 首先发送一个Start
    2. S:SLAVE ADDRESS+W——发送一个字节数据(I2C规定,在Start之后第一个字节数据一定要发从机地址+读写位,前四位——A6、A5、A4、A3——是固定端1010)
    3. 每发送一个字节之后都要跟一个acceptance acknowledge(接收应答),从机应该给我应答(给我发0)
    4. S:BYTE 1 ——接着就可以发送第一个字节数据了
    5. 。。。
    6. S:BYTE n
    7. RA:0
    8. P
    • 完成任务:向谁发什么

    在这里插入图片描述

    • 接收一帧数据
    1. 首先发送一个Start
    2. S:SLAVE ADDRESS+R——发送一个字节数据(一旦我们发送了READ这个字节,我们就默认代表我们已经把总线的控制权交给从机了)
    3. RA:0
    4. R:BYTE 1 ——接着就可以接收第一个字节数据了
    5. SA:0(接收应答)
    6. .。。。
    7. R:BYTE n
    8. SA:1(一般发分应答)
    9. P
    • 完成任务:向谁收什么

    在这里插入图片描述

    • 先发送再接收数据帧(复合格式)
      *发送一帧数据(去掉STOP)和接收一帧数据的拼接
      在这里插入图片描述
    • 向谁收指定的什么

    第四部分—AT24C02数据帧

    在这里插入图片描述在这里插入图片描述

    • AT24C02的固定地址为1010,可配置地址本开发板上位000,所以SLAVE ADDRESS+W为0xA0(1010 000 0),SLAVE ADDDRESS+R为0xA1(1010 000 1)

    • 字节写:在”字地址“处写入”数据“
      在这里插入图片描述

    • 随机读:读出在“字地址”处的数据
      在这里插入图片描述

    第五部分—编写程序

    位声明——通过查看开发板原理图的EEPROM模块发现,SCL、SDA分别接在P2_1和P2_0,之后定义六个函数。
    第一个函数——void I2C_Star(void)
    首先在默认的情况下,SCL和SDA都是持续高电平,也就是空闲状态,因为没有人去动I2C总线。
    但是在复合格式这个时序里,S(开始)可能是在RA之后被调用而不是在空闲时间里被被调用,因为RA之后SDA可能是高电平也可能是低电平,所以在S在整个帧里能够拼上,所以我们先把SDA置1,因为SDA可能是0也可能是1,而其他拼图结束的时候SCL都是0,一般我们都是在SCL低电平的时候变换数据所以我们先确保SDA=1,然后再把SCL拉高(SCL=1),这样就确保了在start之前SCL和SDA都是高电平然后再把SDA、SCL拉低,这样S就结束了。

    void I2C_Star(void)
    {
    	I2C_SDA=1;
    	I2C_SCL=1;
    	I2C_SDA=0;
    	I2C_SCL=0;
    }
    
    

    第二个函数——void I2C_Stop(void)
    P可能会跟在RA:0也可能跟在SA:1后面,说明停止之前SDA可能是0也可能是1,所以在停止之前我们需要保证SDA是0,所以先将SDA拉低,再把SCL拉高,再把SDA拉高。

    void I2C_Stop(void)
    {
    	I2C_SDA=0;
    	I2C_SCL=1;
    	I2C_SDA=1;
    }
    

    第三个函数——void I2C_SendByte(unsigned char Byte)
    把SDA的电平变为SDA的最高位,再分别把SCL置高置低。但是我们把SCL置高后立马置低了,主机能不能在这期间读取到数据呢,我们在这里可以参考下AT24C02手册的交流电气特性。从中得知时钟频率,SCL在VCC=5V的情况下最大值是1000KHZ(1MHZ),而单片机IO口翻转最快也就是1微秒翻转一下,周期也就是500HZ,所以时钟拉高后立马拉低也不会超过最大时钟。

    void I2C_SendByte(unsigned char Byte)
    {
    	unsigned char i;
    	for(i=0;i<8;i++)
    	{
    	I2C_SDA=Byte&(0x80>>1);			 //把Byte最高位取出来,赋给SDA
        I2C_SCL=1;
        I2C_SCL=0;
    	}
    }
    

    第四个函数——unsigned char I2C_ReceiveByte(void)
    在接收之前需要将SDA置1,释放总线。将SCL置高,如果SDA读取的是1,则把Byte的最高位置1,将SCL置0,以上循环8次,则接收一个字节。

    unsigned char I2C_ReceiveByte(void)
    {
     	unsigned char i,Byte=0x00;
    	I2C_SDA=1;
    	if(i=0;i<8;i++)
    	{
    	I2C_SCL=1;
    	if(I2C_SDA){Byte|=(0x80>>i);}		//相当于如果SDA读取的是1,则把Byte的最高位置1
        I2C_SCL=0;
    	}
    	return Byte;
    } 
    

    第五个函数——void I2C_SendAck(unsigned char AckBit) //发送应答
    让SDA=应答位,然后把SCL拉高再拉低。

    void I2C_SendAck(unsigned char AckBit)    //发送应答
    {
    	I2C_SDA=AckBit;
    	I2C_SCL=1;
    	I2C_SCL=0;
    }
    

    第六个函数——unsigned char I2C_ReceiveAck(void)
    主机先释放SDA,再把SCL拉高

    unsigned char I2C_ReceiveAck(void)
    {
    	unsigned char AckBit;
    	I2C_SDA=1;
    	I2C_SCL=1;
    	AckBit=I2C_SDA;
    	I2C_SCL=0;
    	retuen AckBit;
    }
    
    展开全文
  • AT24C02例程

    2019-05-06 15:08:13
    全国大学生电子设计竞赛常见功能模块例程:AT24C02例程
  • AT24C01芯片资料

    2013-07-23 19:22:11
    AT24C01 AT24C02 AT24C04 AT24C08 AT24C16
  • AT24C04.zip

    2021-03-06 12:15:03
    基于STM32 存储芯片AT24C04的读取,可以接移植使用
  • AT24C1024手册

    2020-01-02 23:01:44
    AT24C1024可以存储1M比特,即128K字节数据。可以通过I2C进行读写。共有八个管脚。可以利用地址同时访问多个存储芯片。
  • AT24C04 EEPROM

    2018-11-19 10:01:57
    AT24C04,EEPROM的芯片,想要研究的可以下载来查看下。
  • AT24C02中文手册

    2018-11-27 10:52:15
    AT24C02中文手册
  • AT24C02模块

    千次阅读 2020-02-05 20:19:17
    AT24C02模块 概述:   该文主要描述了,AT24C02简介、AT24C02特性、硬件原理图、管脚描述、从器件地址、写周期限制、读写操作时序。 1、AT24C02简介   AT24C01/02/04/08/16是一个1K/2K/4K/8K/16K位(AT...

    AT24C02模块


    一、STM32专栏目录

    二、Linux专栏目录

    三、Android专栏目录


      AT24C08支持的时序为IIC,IIC详细介绍请看《I2C协议(模拟时序含代码)》。

    概述:
      该文主要描述了,AT24C02简介、AT24C02特性、硬件原理图、管脚描述、从器件地址、写周期限制、读写操作时序。

    1、AT24C02简介

      AT24C01/02/04/08/16是一个1K/2K/4K/8K/16K位(AT24C02大小为256字节)串行CMOS E2PROM内部含有128/256/512/1024/2048个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗AT24C01有一个8字节页写缓冲器 AT24C02/04/08/16有一个16字节页写缓冲器该器件通过I2C总线接口进行操作有一个专门的写保护功能。

    2、AT24C02特性

      ①、与 400KHz I2C 总线兼容
      ②、1.8 到 6.0 伏工作电压范围
      ③、低功耗 CMOS 技术
      ④、写保护功能 当 WP 为高电平时进入写保护状态
      ⑥、页写缓冲器
      ⑦、自定时擦写周期
      ⑧、1,000,000编程/擦除周期
      ⑨、可保存数据100年

    3、硬件原理图

    在这里插入图片描述
    4、管脚描述

    在这里插入图片描述
      A0、A1、A2、三个脚不同的电平可以形成不同的地址,最多8种。原理图中A0、A1、A2、三个脚全部接地,也就是硬件决定不可更改,默认为A0=0、A1=0、A2=0。同时写保护脚WP(原理图中为HOLD),也是接地。因此默认也是关闭写保护的。

    5、从器件地址
    在这里插入图片描述
    1. A0、A1和A2对应器件的管脚1、2和3
    2. P0、P1、P2对应存储阵列地址字地址。
    3. R/W为读写方向位,1为读,0为写。

      对应AT24C02硬件原理图而言,A0、A1、A2、三个脚被硬件接地,即A0=0、A1=0、A2=0。所以AT24C02读地址为1010 0001(0xA1),AT24C02写地址为1010 0000(0xA0)。
      这里再简单的介绍一下P0、P1、P2的含义,对于AT24C02而言大小为256字节,而对于AT24C08而言大小为1024(4*256)字节。假如P0=0、P1=0,即代表选中第一个256字节的首地址,P0=0、P1=0,即代表选中第一个256的首地址,P0=1、P1=0,即代表选中第二个256的首地址,以此类推。

    6、写周期限制在这里插入图片描述
      写周期时间是指从一个写时序的有效停止信号到内部编程/擦除周期结束的这一段时间。在写周期期间,总线接口电路禁能,SDA保持为高电平,器件不响应外部操作。
      简单的说就是,当向AT24C02执行写操作时,从发出写命令到写完成最多10ms。因此在写程序时,每次写操作后都延迟10ms以保证稳定。

    7、读写操作时序

    7.1、向指定地址写一个字节
    在这里插入图片描述

    /*
    函数功能:向AT24c02指定地址写一字节数据
    */
    void At24c02_Write_OneByte(u8 addr,u8 data)
    {
      IIC_Start();
      IIC_Write_Byte(At24c02_Write_Addr);//发送写地址0XA0
      if(IIC_Check_Ack())return ;
      IIC_Write_Byte(addr);
      if(IIC_Check_Ack())return ;
      IIC_Write_Byte(data);
      if(IIC_Check_Ack())return ;
      IIC_Stop();
      delay_ms(10);//确保写完成
    }

    7.2、向指定地址开始读数据
    在这里插入图片描述

    /*
    函数功能:向AT24c02指定地址开始读数据
    */
    void At24c02_Read_Data(u8 addr,u8 *data,u8 len) 
    {
     u8 i=0;
      IIC_Start();
      IIC_Write_Byte(At24c02_Write_Addr);//发送写地址0XA0
      if(IIC_Check_Ack())return ;
      IIC_Write_Byte(addr);//写数据的地址
      if(IIC_Check_Ack())return ;
      IIC_Start();
      IIC_Write_Byte(At24c02_Read_Addr);//发送读地址0XA1
      if(IIC_Check_Ack())return ;
      for(i=0;i<len;i++)
      {
       data[i]=IIC_Read_Byte();
       if(i==len-1)IIC_Send_Ack(1);
       else IIC_Send_Ack(0);
      }
      IIC_Stop(); 
    }

    7.3、页写

    在这里插入图片描述
     用页写 AT24C01可一次写入8个字节数据 AT24C02/04/08/16可以一次写入16个字节的数据,页写操作的启动和字节写一样,不同在于传送了一字节数据后并不产生停止信号,主器件被允许发送停止信号P,AT24C01 P=7,AT24C02/04/08/16 P=15个额外的字节,每发送一个字节数据后AT24C01/02/04/08/16 产生一个应答位并将字节地址低位加1,高位保持不变。如果在发送停止信号之前主器件发送超过P+1个字节地址计数器将自动翻转,先前写入的数据被覆盖。
      简单的说,AT24C01一页为8字节,AT24C01/02/04/08/16为16字节。对于AT24C02而言,在一页内,每写一个字节写指针+1,当大于16字节时,又回到第一个字节的位置,先前写入的数据将会被覆盖。

    /*
    函数功能:对AT24C02指定地址页内写数据
    */
    void At24c02_Write_Page(u8 addr,u8 *data,u8 len)
    {
      u8 i=0;
      IIC_Start();
      IIC_Write_Byte(At24c02_Write_Addr);//发送写地址0XA0
      if(IIC_Check_Ack())return ;
      IIC_Write_Byte(addr);//写数据的地址
      if(IIC_Check_Ack())return ;
      for(i=0;i<len;i++)
      {
       IIC_Write_Byte(*data++);/
       if(IIC_Check_Ack())return ;
      }
      IIC_Stop();
      delay_ms(10);
    }

    7.4、向指定地址跨页写数据

    /*
    函数功能:对AT24C02指定地址跨页写数据
    */
    void At24c02_Write_Data(u8 addr,u8 *data,u8 len)
    {
      u8 write_len=16-addr%16;//起始页剩下的空间
      if(write_len>len)write_len=len;
      while(1)
      {
       At24c02_Write_Page(addr,data,write_len);
       if(write_len==len)break;
       addr+=write_len;
       data+=write_len;
       len-=write_len;
       if(len>16)write_len=16;
       else write_len=len;
      }
    }

      
      

    展开全文
  • AT24c02电路图

    2020-07-15 04:50:40
    本文主要为AT24c02电路图,下面一起来学习一下
  • at24c02系列和at24c256系列的比较

    千次阅读 2014-05-16 15:41:23
    at24c02系列包括的有: at24c256系列包括的有:
  • 驱动AT24C256

    2018-01-19 12:30:36
    基于LPC2292的AT24C256驱动程序,详细的介绍了II2C的使用方法!
  • at24c0芯片

    2017-07-17 10:38:25
    51单片机控制芯片at24c02,程序已经调试好,自带仿真。
  • AT24C02驱动

    2014-08-20 19:56:44
    AT24C02存储芯片的驱动程序,以及AT24C02存储芯片的资料内容。
  • 用C语言写的AT24C系列的EPROM读写程序,适用于刚学单片机编程的初学者
  • AT24C256 STM32F103 例程

    2021-05-19 09:08:25
    AT24C256 STM32F103 例程
  • AT24C04时序

    2020-09-02 16:38:40
    AT24C02 E2PROM芯片详解 利用AT24C02进行数据存储 24C02存储器的基本原理与应用 E2PROM

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,312
精华内容 1,324
关键字:

at24c