0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

EEPROM芯片24C02的字节写时序和字节读时序

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-05-16 15:09 次阅读


24C02芯片介绍
EEPROM (Electrically Erasable Programmable read only memory),带电可擦可编程只读存储器——一种掉电后数据不丢失的存储芯片。

24Cxx芯片是EEPROM芯片的一种,它是基于IIC总线的存储器件,遵循二线制协议,由于其具有接口方便,体积小,数据掉电不丢失等特点,在仪器仪表工业自动化控制中得到大量的应用。24Cxx在电路的作用主要是在掉电的情况下保存数据。

本文使用的是24C02芯片,总容量是2k个bit(256个字节)。这里芯片名称里的02代表着总容量。

24C02芯片的引脚分布和具体的作用见下图:

pYYBAGKB926Ae-GaAAA9F3D-YBA581.png24C02 引脚图
引脚名称 说明
A0-A2 地址输入线
SDA 数据线
SCL 时钟线
WP 写保护
GND、VCC 供电


下图是本文中24C02和STM32的引脚连接图:

poYBAGKB-DiAXBfyAAEhRMSpQRw767.png引脚连接图

从图中可以看出:A0、A1、A2都为0。

对于并联在一条IIC总线上的每个IC都有唯一的地址。那么看一下从器件地址,可以看出对于不同大小的24Cxx,具有不同的从器件地址。由于24C02为2k容量,也就是说只需要参考图中第一行的内容:

pYYBAGKB-FiACV9iAACMQdZpGhw408.png设备地址

根据图中的内容:如果是写24C02的时候,从器件地址为10100000(0xA0);读24C02的时候,从器件地址为10100001(0xA1)。

24C02芯片的时序图
这部分的内容应结合上文:I2C总线的数据传送的内容一起理解。

24C02字节写时序

poYBAGKB-I2AZmvcAACKyy8epDA520.png写时序


对24C02芯片进行写字节操作的时候,步骤如下:

(1) 开始位,后面紧跟从器件地址位(0xA0),等待应答,这是为了在IIC总线上确定24C02的从地址位置;
(2) 确定操作24C02的地址,等待应答,也就是将字节写入到24C02中256个字节中的位置;
(3) 确定需要写入24C02芯片的字节,等待应答,停止位。
24C02字节读时序

poYBAGKB-M2AfPqfAADJWM6fWGA088.png读时序


对24C02芯片进行读字节操作的时候,步骤如下:

(1)开始位,后面紧跟从器件地址位(0xA0),等待应答,这是为了在IIC总线上确定24C02的从地址位置;
(2)确定操作24C02的地址,等待应答,也就是从24C02中256个字节中读取字节的位置;
(3)再次开始位,后面紧跟从器件地址位(0xA1),等待应答;
(4)获取从24C02芯片中读取的字节,发出非应答信号,停止位。

进行数据传送时,在SCL为高电平期间,SDA线上电平必须保持稳定,只有SCL为低时,才允许SDA线上电平改变状态。并且每个字节传送时都是高位在前;
对于应答信号,ACK=0时为有效应答位,说明从机已经成功接收到该字节,若为1则说明接受不成功;
如果从机需要延迟下一个数据字节开始传送的时间,可以通过把SCL电平拉低并保持来强制主机进入等待状态;
主机完成一次通信后还想继续占用总线在进行一次通信,而又不释放总线,就要利用重启动信号。它既作为前一次数据传输的结束,又作为后一次传输的开始;
总线冲突时,按“低电平优先”的仲裁原则,把总线判给在数据线上先发送低电平的主器件;
在特殊情况下,若需禁止所有发生在I2C总线上的通信,可采用封锁或关闭总线,具体操作为在总线上的任一器件将SCL锁定在低电平即可;
SDA仲裁和SCL时钟同步处理过程没有先后关系,而是同时进行的。
读取24C02芯片程序

#define AT24C01  127
#define AT24C02  255
#define AT24C04  511
#define AT24C08  1023
#define AT24C16  2047
#define AT24C32  4095
#define AT24C64     8191
#define AT24C128 16383
#define AT24C256 32767  
//Mini STM32开发板使用的是24c02,所以定义EE_TYPE为AT24C02
#define EE_TYPE AT24C02
//初始化IIC接口
void AT24CXX_Init(void)
{
IIC_Init();
}
//在AT24CXX指定地址读出一个数据
//ReadAddr:开始读数的地址  
//返回值  :读到的数据
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{      
u8 temp=0;                          
       IIC_Start();  
if(EE_TYPE>AT24C16)            //为了兼容24Cxx中其他的版本
{
 IIC_Send_Byte(0XA0);    //发送写命令
 IIC_Wait_Ack();
 IIC_Send_Byte(ReadAddr>>8);    //发送高地址
 IIC_Wait_Ack();   
}else      IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //发送器件地址0XA0,写数据   

IIC_Wait_Ack(); 
       IIC_Send_Byte(ReadAddr%256);   //发送低地址
IIC_Wait_Ack();     
IIC_Start();        
IIC_Send_Byte(0XA1);           //进入接收模式      
IIC_Wait_Ack();  
       temp=IIC_Read_Byte(0);     //读一个字节,非应答信号信号    
       IIC_Stop();        //产生一个停止条件     
return temp;
}
//在AT24CXX指定地址写入一个数据
//WriteAddr  :写入数据的目的地址    
//DataToWrite:要写入的数据
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{                                
       IIC_Start();  
if(EE_TYPE>AT24C16)
{
 IIC_Send_Byte(0XA0);     //发送写命令
 IIC_Wait_Ack();
 IIC_Send_Byte(WriteAddr>>8);    //发送高地址
 }else
{
 IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   //发送器件地址0XA0,写数据 
}  
IIC_Wait_Ack();    
       IIC_Send_Byte(WriteAddr%256);   //发送低地址
IIC_Wait_Ack();                    
IIC_Send_Byte(DataToWrite);     //发送字节          
IIC_Wait_Ack();            
       IIC_Stop();    //产生一个停止条件 
delay_ms(10);  
}
//在AT24CXX里面的指定地址开始写入长度为Len的数据
//该函数用于写入16bit或者32bit的数据.
//WriteAddr  :开始写入的地址  
//DataToWrite:数据数组首地址
//Len        :要写入数据的长度2,4
void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len)
{   
u8 t;
for(t=0;t>(8*t))&0xff);
}                
}

//在AT24CXX里面的指定地址开始读出长度为Len的数据
//该函数用于读出16bit或者32bit的数据.
//ReadAddr   :开始读出的地址 
//返回值     :数据
//Len        :要读出数据的长度2,4
u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len)
{   
u8 t;
u32 temp=0;
for(t=0;t
;t++)>;t++)>

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • EEPROM
    +关注

    关注

    9

    文章

    926

    浏览量

    80306
  • 存储芯片
    +关注

    关注

    11

    文章

    796

    浏览量

    42443
  • IIC总线
    +关注

    关注

    1

    文章

    65

    浏览量

    20152
收藏 人收藏

    评论

    相关推荐

    24C02驱动【掉电保存】

    24C02是一个2Kbit的串行EEPROM存储芯片,可存储256个字节数据。工作电压范围为1.8V到6.0V,具有低功耗CMOS技术,自定时擦写周期,1000000次编程/擦除周期,
    的头像 发表于 07-17 09:24 994次阅读
    <b class='flag-5'>24C02</b>驱动【掉电保存】

    24C02的连续读和

    最近在用24C02,可在网上找到的总是单个字节24c02读写,想一串字符一直没搞明白...不过最终功夫不负有心人,还是弄好了开是上传上来和大家交流一下~{:soso_e100:}初
    发表于 08-23 12:53

    24C02程序不能正常工作

    高手们:我写了一段利用IIC总线,向24C02固定地址中写入一字节数据,然后 马上此这个字节,但是这段程序得到的结果是错误的,请帮忙找一下错误, 谢谢.......附件中有keil源
    发表于 08-26 21:15

    请问24C02是16Byte缓冲的吗?

    众所周知,I2C EEPROM可以按字节访问,也可以按页访问。24C02一般缓冲区是8Byte,24C04以上的大容量ROM缓冲区有16/3
    发表于 09-16 23:41

    EEPROM字节读写操作时序相关资料下载

    不完全一样,ATMEL 公司的 24C02 的这个写入时间最高不超过 5 ms。在往非易失区域的过程,EEPR
    发表于 11-24 07:01

    如何解决AT24C02数据读取问题的

    AT24C02的读写操作**说明:**最近我在做基于EEPROM存储器24c02存储的电子锁时遇到了一些问题:每次向24C02写入数据的时候没出现什么问题,可以正常写入。但是每次读取
    发表于 01-12 07:08

    24C02芯片的相关资料分享

    202007每月一练 的板子上还有一个24C02芯片没有教程,今天介绍一下24C02这个芯片的驱动方法。串行
    发表于 01-21 11:51

    EEPROM字节读写操作时序介绍

    文章目录EEPROM介绍EEPROM字节读写操作时序EEPROM 数据流程
    发表于 01-26 06:43

    24c01/24c02中文资料

    24c01/24c02是一个1K/2K/4K/8K/16K 位串行CMOS E2PROM, 内部含有128/256/512/1024/2048 个8 位字节,CATALYST 公司的先进CMOS 技术实质上减少了器件的功耗.CA
    发表于 10-07 12:43 4948次下载

    写入一个字节24c02并读出来验证

    写入一个字节24c02并读出来验证 本课的程序已经包含了上一颗的内容,增加了读
    发表于 08-09 22:01 3047次阅读
    写入一个<b class='flag-5'>字节</b>到<b class='flag-5'>24c02</b>并读出来验证

    写一个字节24c02中(源程序)

    写一个字节24c02中(源程序) 24c02是一个非挥发eeprom存储器器件,采用的IIC总线技术。24c02在许多试验中都有出现。
    发表于 08-11 19:17 2795次阅读

    24C02中IIC总线的应答信号(ACK)时序图分析

    24C02中IIC总线的应答信号(ACK)时序图分析,很好的单片机学习资料。
    发表于 03-21 17:30 93次下载

    使用51单片机进行EEPROM存储器24C02读取存储多字节的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机进行EEPROM存储器24C02读取存储多字节的程序免费下载。
    发表于 06-05 17:51 15次下载
    使用51单片机进行<b class='flag-5'>EEPROM</b>存储器<b class='flag-5'>24C02</b>读取存储多<b class='flag-5'>字节</b>的程序免费下载

    单片机:EEPROM字节读写操作时序

    文章目录EEPROM字节读写操作时序EEPROM字节读写操作时序我们读取
    发表于 11-16 14:21 8次下载
    单片机:<b class='flag-5'>EEPROM</b> 多<b class='flag-5'>字节</b>读写操作<b class='flag-5'>时序</b>

    24C02 EEPROM 51汇编程序设计

    最近在学习汇编完成常用芯片的控制,并预留一些接口。24C02是我购买的开发板上的芯片,故先从他入手。(更新中)24C02数据手册理解推荐的数据手册2
    发表于 11-23 09:51 5次下载
    <b class='flag-5'>24C02</b> <b class='flag-5'>EEPROM</b> 51汇编程序设计