at24c02模块怎么用_AI8C模块参数

at24c02模块怎么用_AI8C模块参数AT24C02模块概述:  该文主要描述了,AT24C02简介、AT24C02特性、硬件原理图、管脚描述、从器件地址、写周期限制、读写操作时序。1、AT24C02简介  AT24C01/02/04/08/16是一个1K/2K/4K/8K/16K位(AT24C02大小为256字节)串行CMOSE2PROM内部含有128/256/512/1024/2048个8位字节,CATALYST公…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定


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);//确保写完成
}

Jetbrains全家桶1年46,售后保障稳定

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;
  }
}

  
  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223050.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 三分钟学习Java泛型中T、E、K、V、?的含义

    点击上方☝Java编程技术乐园,轻松关注!及时获取有趣有料的技术文章做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!泛型是Java中一个非常重要的内容,对于Jav…

    2022年2月28日
    66
  • c++面试选择题_C语言经典笔试题

    c++面试选择题_C语言经典笔试题1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要…

    2022年8月26日
    3
  • python趣味编程100例pdf(python游戏趣味编程)

    1 Python基础知识1.1简介1.2诞生1.3应用1.4优点2 开发环境配置2.1Python下载与安装2.2VSCode安装2.3VSCode辅助插件3 VSCode使用3.1Python文件创建3.2简单输出代码测试4 输出与变量4.1Python的输出语句4.2Python的变量及类型4.3输出变量案例练习5 输入与判断5.1Python的输入语句5.2…

    2022年4月17日
    619
  • 邮箱发送验证码和短信发送验证码的学习笔记

    邮箱发送验证码和短信发送验证码的学习笔记邮箱发送验证码和短信发送验证码

    2022年10月12日
    0
  • stm32 sd卡读写_sd卡引脚定义图

    stm32 sd卡读写_sd卡引脚定义图SD卡   SD卡(SecureDigitalMemoryCard)即:安全数码卡,它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。   SD卡按容量分类,可以分为3类:SD卡、SDHC卡、SDXC…

    2022年10月3日
    0
  • 解决redis雪崩_redis 雪崩

    解决redis雪崩_redis 雪崩缓存雪崩指的是缓存失效了,导致大量的请求直接访问数据库,数据库压力就大了,很容易发生宕机的情况,然后和数据库相关的系统都受到了影响,这就是雪崩。缓存失效->数据库宕机->所有系统出现问题,连锁反应。缓存失效原因:1、redis集群大面积故障2、缓存过期解决方案:1、redis策略,redis高可用设计。2、redis策略,在给缓存加过期时间时,尽量错峰,避免同一时间所有缓存失效。3、访问数据库策略,访问数据库时加锁,单线程访问,可能会导致…

    2022年9月14日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号