【mcuclub】数据存储AT24C02

2023-11-19

一、实物图

二、原理图

编号 名称 功能
1 A0

地址输入。A2、A1和A0是器件地址输入引脚。

24C02/32/64使用A2、A1和AO输入引脚作为硬件地址,总线上可同时级联8个24C02/32/64器件。

24C04使用A2和A1输入引脚作为硬件地址,总线上可同时级联4个24CO4器件,A0为空脚,可接地。

24C08使用A2输入引脚作为硬件地址,总线上可同时级联2个24C08器件,AO和A1为空脚,可接地。

24C16未使用器件地址引脚,总线上最多只可连接一个16K器件,A2、A1和A0为空脚,可接地。

2 A1
3 A2
4 GND 电源地
5 SDA 串行地址和数据输入/输出。SDA是双向串行数据传输引脚,漏极开路,需要外接上拉电阻到VCC(典型值10k)。
6 SCL 串行时钟输入。SCL同步数据传输,上升沿数据写入,下降沿数据读出。
7 WP 写保护。WP引脚提供硬件数据保护。当WP接地时,允许数据正常读写操作;当WP接VCC时,写保护,只读。
8 VCC 电源正(1.8~5.5V)

三、简介

AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,内含256*8位存储空间;具有工作电压宽(1.8V~5.5V):擦写次数多(大于10000次):写入速度快(小于10ms),抗干扰能力强,数据不易丢失,体积小等特点。并且它是采用I2C总线式进行数据读写的串行操作,只占用很少的资源和I/O线。

四、内部结构框图

五、寻址方式

AT24C02的存储容量为2K bit,内容分成32页,每页8Byte,共256Byte,操作时有两种寻址方式:芯片寻址和片内子地址寻址。

(1)芯片寻址:AT24C02的芯片地址为1010,其地址控制字格式为1010 A2 A1 A0 R/W。其中A2,A1,A0可编程地址选择位。A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码,即为该器件的地址码。R/W为芯片读写控制位,该位为0,表示芯片进行写操作;该位为1,表示芯片进行读操作。

(2)片内子地址寻址:芯片寻址可对内部256Byte中的任意一个进行读/写操作,其寻址范围为00~FF,共256个寻址单位。

六、通信协议(I2C通信)

1、I2C总线介绍

<1>I2C总线(Inter IC bus)是由Philips公司开发的一种通用数据总线。

<2>两根通信线:SCL(Serial Clock串行时钟线)、SDA(Serial Data串行数据线)。

<3>同步、半双工,带数据应答。

*注:同步(因为它有单独的时钟线)、半双工(SDA只有一根线,并且还要来回通信)

<4>通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度。

2、I2C电路规范

<1>所有I2C设备的SCL连在一起,SDA连在一起

<2>设备的SCL和SDA均要配置成开漏输出模式(硬件IIC)

*开漏输出模式——断开时引脚成浮空状态(电路断开,电压不稳定)

<3>SCL和SDA各添加一个上拉电阻,阻值一般为4.7K~10K左右

<4>开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题。

3、I2C时序结构

起始信号:SCL高电平期间,SDA从高电平切换到低电平

停止信号:SCL高电平期间,SDA从低电平切换到高电平

代码如下:

/****

*******I2C总线启动信号

*****/

void AT24C02_IIC_Start(void)

{

   AT24C02_SDA = 1;

   AT24C02_SCL = 1;

   AT24C02_IIC_Delay(DELAY_TIME);

   AT24C02_SDA = 0;

   AT24C02_IIC_Delay(DELAY_TIME);

   AT24C02_SCL = 0;

}

/****

*******I2C总线停止信号

*****/

void AT24C02_IIC_Stop(void)

{

   AT24C02_SDA = 0;

   AT24C02_SCL = 1;

   AT24C02_IIC_Delay(DELAY_TIME);

   AT24C02_SDA = 1;

   AT24C02_IIC_Delay(DELAY_TIME);

}

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

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

代码如下:

/****

*******发送应答或非应答信号

*****/

void AT24C02_IIC_SendAck(bit ackbit)

{

   AT24C02_SCL = 0;

   AT24C02_SDA = ackbit;

   AT24C02_IIC_Delay(DELAY_TIME);

   AT24C02_SCL = 1;

   AT24C02_IIC_Delay(DELAY_TIME);

   AT24C02_SCL = 0;

   AT24C02_SDA = 1;

   AT24C02_IIC_Delay(DELAY_TIME);

}

/****

*******等待应答信号

*****/

bit AT24C02_IIC_WaitAck(void)

{

   bit ackbit;

   AT24C02_SDA = 1;

   AT24C02_SCL = 1;

   AT24C02_IIC_Delay(DELAY_TIME);

   ackbit = AT24C02_SDA;

   AT24C02_SCL = 0;

   AT24C02_IIC_Delay(DELAY_TIME);

   return ackbit;

}

发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位在前),然后拉高SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节。

代码如下:

/****

*******I2C总线发送一个字节数据

*****/

void AT24C02_IIC_SendByte(uchar byte)

{

   uchar i;

   AT24C02_SCL = 0;

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

   {

      if(byte & 0x80)

         AT24C02_SDA = 1;

      else

         AT24C02_SDA = 0;

      AT24C02_IIC_Delay(DELAY_TIME);

      AT24C02_SCL = 1;

      AT24C02_IIC_Delay(DELAY_TIME);

      AT24C02_SCL = 0;

      AT24C02_IIC_Delay(DELAY_TIME);

      byte <<= 1;

   }

   AT24C02_IIC_WaitAck();

}

接收一个字节:SCL低电平期间,从机将数据位依次放到SDA总线上(高位在前),然后拉高SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)

代码如下:

/****

*******I2C总线接收一个字节数据

*****/

uchar AT24C02_IIC_RecByte(bit ackbit)

{

   uchar i, dat;

   AT24C02_SDA = 1;

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

   {

      AT24C02_SCL = 1;

      AT24C02_IIC_Delay(DELAY_TIME);

      dat <<= 1;

      if(AT24C02_SDA)

         dat |= 1;

      AT24C02_SCL = 0;

      AT24C02_IIC_Delay(DELAY_TIME);

   }

   AT24C02_IIC_SendAck(ackbit);

   return dat;

}

4、AT24C02数据帧

AT24C02的固定地址为1010,本设计A2 A1 A0都接地,所以SLAVE ADDRESS+W为0xA0(1010 000 0),SLAVE ADDDRESS+R为0xA1(1010 000 1)

字节写:在“字地址”处写入“数据”

代码如下:

/****

*******向AT24C02的地址address中写入一个字节的数据

*****/

void At24c02_Write_Data(uchar address,uchar dat)

{

   AT24C02_IIC_Start();

   AT24C02_IIC_SendByte(AT24C02_SlaveAddress);

   AT24C02_IIC_SendByte(address);

   AT24C02_IIC_SendByte(dat);

   AT24C02_IIC_Stop();

}

随机读:读出在“字地址”处的“数据”

代码如下:

/****

*******从AT24C02的地址address中读取一个字节的数据

*****/

uchar At24c02_Read_Data(uchar address)

{

   uchar dat;

   AT24C02_IIC_Start();

   AT24C02_IIC_SendByte(AT24C02_SlaveAddress);

   AT24C02_IIC_SendByte(address);

   AT24C02_IIC_Start();

   AT24C02_IIC_SendByte(AT24C02_SlaveAddress + 1);

   dat = AT24C02_IIC_RecByte(AT24C02_ACK);

   AT24C02_IIC_Stop();

   return(dat);

}

七、流程设计

首先初始化引脚,然后判断是写数据还是读数据,如果是写数据,则首先启动I2C总线,然后发送器件写地址,等待应答,接下来发送数据地址,等待应答,再接下来写入数据,等待应答,最后关闭I2C总线。如果是读数据,则首先启动I2C总线,然后发送器件写地址,等待应答,接下来发送目标地址,等待应答,再次启动I2C总线,然后发送器件读地址,等待应答,接下来读取数据,发送应答,最后关闭I2C总线。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【mcuclub】数据存储AT24C02 的相关文章

  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 高速风筒方案中的共膜电感--【其利天下技术】

    我们知道 高速吹风筒的电源采用的是日常我们用的市电 市电是高压交流电源 所以高压电路的噪声是比较大的 为了使产品符合安规要求 我们的电路设计必须要符合安规设计 所以这也是高速吹风筒为什么要加安规电容和共模电感的主要原因 那么什么是共膜电感呢
  • 【雕爷学编程】Arduino智慧农业之养殖水质监测与控制

    Arduino是一个开放源码的电子原型平台 它可以让你用简单的硬件和软件来创建各种互动的项目 Arduino的核心是一个微控制器板 它可以通过一系列的引脚来连接各种传感器 执行器 显示器等外部设备 Arduino的编程是基于C C 语言的
  • 【Proteus仿真】【Arduino单片机】视力保护仪

    文章目录 一 功能简介 二 软件设计 三 实验现象 联系作者 一 功能简介 本项目使用Proteus8仿真Arduino单片机控制器 使LCD1602液晶 DS18B20温度传感器 按键 蜂鸣器 继电器开关 HC05蓝牙模块等 主要功能 系
  • 串口流控(CTS/RTS)使用详解

    1 流控概念 在两个设备正常通信时 由于处理速度不同 就存在这样一个问题 有的快 有的慢 在某些情况下 就可能导致丢失数据的情况 如台式机与单片机之间的通讯 接收端数据缓冲区已满 则此时继续发送来的数据就会丢失 流控制能解决这个问题 当接收
  • allegro画PCB如何更新元件的PCB封装

    allegro画PCB如何更新元件的PCB封装 一 更新单个器件的PCB封装 首先菜单栏选择Place gt Update Symbols 如下图 注意此案例是更新了C0805封装 中更新封装 就将上图第二个红色方框中的勾选即可 二 更新某
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • stm32毕设分享 stm32单片机酒精浓度酒驾检测系统 - 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 硬件设计 MQ 3酒精乙醇传感器模块 SIM800C模块 5 软件说明 系统框图
  • 【MCU简单且容易理解的工作原理】

    SOC是啥 System on Chip 一个芯片 但是片上有好多东西的意思 市面上的AI芯片 包括你知道的麒麟xxx 骁龙xxx等等一些列手机芯片都是SOC 对于SOC设计者来讲 显然要知道码农们码出来的一行行代码是如何在SOC上跑起来的
  • 2.4G SOC收发芯片XL2412P,适用于无线键鼠,遥控器等多种场景

    XL2412P芯片是 款高性能低功耗的SOC集成无线收发芯片 集成MO核MCU 工作在2 400 2 483GHz世界通用ISM频段 该芯片集成了射频接收器 射频发射器 频率综合器 GFSK 调制器 GFSK解调器等功能模块 并且支持一对多
  • 普冉32位单片机 PY32C642,M0+内核,1.7 V ~ 5.5 V宽工作电压

    PY32C642 单片机采用高性能的 32 位 ARM Cortex M0 内核 宽电压工作范围 嵌入 24Kbytes Flash 和 3 Kbytes SRAM 存储器 最高工作频率 24 MHz 包含多种不同封装类型产品 工作温度范围
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • 世微 AP2402降压恒流驱动IC LED刹车灯方案 全亮 半亮 瀑闪

    AP2402 是一款 PWM 工作模式 高效 率 外围简单 内置功率管 适用于 5 100V 输入的高精度降压 LED 恒流驱动芯片 输 出功率可达 15W 电流 1 5A AP2402 可实现三段功能切换 通过 MODE1 2 3 切换三
  • 世微AP9196 DC-DC 升压恒流电源管理芯 电解水驱动电源应用线路

    AP9196 是一系列外围电路简洁的宽调光比升压调光恒流驱动器 适用于 3 40V 输入电压范围的 LED照明领域 AP9196 采用我司专利算法 可以实现高精度的恒流效果 输出电流恒流精度 3 电压工作范围为5 40V 可以轻松满足锂电池
  • 为什么C语言没有被C++所取代呢?

    今日话题 为什么C语言没有被C 所取代呢 C 的复杂编译器实现和嵌入式平台的限制 使C语言保持了其地位 嵌入式系统多数仅支持C 即使支持C 也会限制某些功能 尤其是异常处理和RTTI 此外 C 引入的功能增加了二进制文件大小和运行时内存占用
  • 会stm32有机会进大公司吗?

    今日话题 会stm32有机会进大公司吗 我本科期间参与了飞思卡尔和电赛等比赛 使用过多种单片机 但渐渐发现单片机只是其中的一小部分 不要过分迷恋所谓的单片机基础和技巧 更值得深入研究的是C语言 如果你对此感兴趣 我愿意无偿分享一个资源包 其
  • 物联网项目分享 Stm32单片机的音乐播放器设计 - 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉
  • Freertos低功耗管理

    空闲任务中的低功耗Tickless处理 在整个系统运行得过程中 其中大部分时间都是在执行空闲任务的 空闲任务之所以执行 因为在系统中的其他任务处于阻塞或者被挂起时才会执行 因此可以将空闲任务的执行时间转换成低功耗模式 在其他任务解除阻塞而准
  • 太阳诱电 | 电容器为什么会发热?什么是纹波电流

    电容器中存在寄生于电极和电介质的电阻成分 当纹波电流等交流电流通过电容器时 电阻的成分会产生热量 为了抑制发热 选择ESR较低的电容器非常重要 陶瓷电容器在电容器中ESR较低 非常适合抑制发热 电容器中的纹波电流主要是指电源电路中由于IC的

随机推荐

  • Active Directory 与域

    1工作场景导入 工作场景 XYZ公司是一家大型制造企业 公司有许多内设部门 车间和分厂 在全国各地有许多分公司 该公司总部信息中心有各类服务器30余台 各车间 分厂和分公司都有自己的服务器 客户机近千台 目前 该公司的各类应用大多基于Win
  • linux 查看JVM默认参数 (centos7)

    情景 之前学习过 深入了解JVM虚拟机 习得了一些JVM方面的一些知识 但是并没有相应的实战 虽然没有相应的实战 但是 咱们也得知道如何查看JVM默认参数 以及如何修改相应的JVM参数 查看命令 1 显示出JVM初始化完毕后所有跟最初的默认
  • C语言:递归实现输出一个整数的逆序

    任务描述 题目描述 编写一个递归函数 将一个整数n逆序输出 比如 n 12345 输出54321 相关知识 略 编程要求 请仔细阅读右侧代码 结合相关知识 在Begin End区域内进行代码补充 输入 一个整数n 输出 该整数的逆序 测试说
  • 蓝桥杯.卡片(模拟)

    Question Result 3181 Solve 直接模拟暴力 初始化卡片数量为2021 去模拟拼数的过程 注意点的话 我是先去判断卡片还有没有 再去减一 所以输出结果也有一个减一 因为一旦说卡片没有了 就意味着当前这个数字拼不成了 C
  • chmod 777 权限恢复问题 /etc/sudoers.d

    etc sudoers d问题 2016年07月27日 15 09 45 阅读数 1130 下述问题是由于我更改了整个 etc文件夹的权限后产生的 问题描述 sudo etc sudoers 可被任何人写 sudo no valid sud
  • tpcc mysql下载_TPCC安装和压测数据库数据表创建生成

    下载TPCC mysql root cnbugs1 git clone https github com Percona Lab tpcc mysql git 配置TPCC mysql root cnbugs1 mv tpcc mysql
  • C语言常见问题

    问题1 sizeof与strlen区别 1 sizeof sizeof 是一种单目操作符 是用来计算你所使用的操作数所占的空间字节大小 可以以类型 指针 数组和函数等作为参数 返回值类型为unsigned int 2 strlen strl
  • 面向对象高级特性

    static的含义 继承的规则 子类实例化的过程 方法的覆盖 final关键字 抽象类的特性 接口的规范 静态修饰符static static可以修饰的元素 属性 共享 方法 访问的方式 块 执行的时机 只能修饰类成员 不能修饰局部变量 静
  • vue聊天页面在进入之后信息滑动到底部位置

    这是需要实现的目标 怎么做到进入到页面之后就滑动到底部 借助两个属性 scrollHeigh 该属性是指 元素中内容 的高度 图中的意思就是全部信息所占用的总高度 scrollTop 指的是 元素中的内容 超出 元素上边界 的那部分的高度
  • Python数据可视化详解(3/5)--------patch,饼图,柱状图和点图

    水平或垂直的单条柱状图 如图 上代码 import matplotlib pyplot as plt import numpy as np fig axes plt subplots 2 1 x 1 2 3 4 5 6 data 5 4 1
  • Redis高级客户端Lettuce详解

    前提 Lettuce是一个Redis的Java驱动包 初识她的时候是使用RedisTemplate的时候遇到点问题Debug到底层的一些源码 发现spring data redis的驱动包在某个版本之后替换为Lettuce Lettuce翻
  • 测试用例的基本要素 && properties配置文件 && 测试用例的基本要素 && SpringMVC背景知识 && 按照开发阶段划分测试类型

    第 1 题 简答题 题目名称 设计测试用例 登陆页面 题目内容 请你针对登陆场景来设计测试用例 记得用脑图哦 第 2 题 简答题 题目名称 测试用例设计 淘宝购物车 题目内容 设计淘宝购物车的测试用例 尽可能多的来设计测试用例 若想不出来了
  • DataGrip配置设定

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 下载安装 二 使用步骤 1 配置成中文 2 导入旧的设定 3 常用操作 总结 前言 提示 这里可以添加本文要记录的大概内容 更换电脑 重装DataGrip
  • java通过word模板生成导出word

    java通过word模板生成导出word 生成word方法类 public class BokeWordUtils 根据模板生成新word文档 判断表格是需要替换还是需要插入 判断逻辑有 为替换 表格无 为插入 param inputUrl
  • MYSQL数据库转化成H2数据库

    mysql数据库数据导成CSV文件 H2 数据库导入CSV文件 代码如下 insert into tableName select from csvread c import data csv
  • DBCP 应用的总结(一)

    DBCP 应用的总结 1 Jar包下载 首先 下载必须的jar包 dbcp包 http jakarta apache org commons dbcp pool包 http jakarta apache org commons pool 如
  • POJ 2676 Sudoku 数独(dfs)

    POJ 2676 Sudoku 数独 dfs Sudoku is a very simple task A square table with 9 rows and 9 columns is divided to 9 smaller squ
  • Java jvm 内存溢出分析

    1 如何分析jvm内存溢出呢 我们经常用visualVm监控Jvm的内存 cpu 线程的使用情况 通常可以根据内存不断增长来判断内存是否存在不释放 但是我们不可能时时盯着去看 这里涉及jvm堆内存配置 堆内存参数配置和调优会在其他章节编写
  • 逆波兰表达式求值(C语言实现)

    实验项目 从文本文件输入任意一个语法正确的 中缀 表达式 显示并保存该表达式 利用栈结构 把上述 中缀 表达式转换成后缀表达式 并显示栈的状态变化过程和所得到的后缀表达式 利用栈结构 对上述后缀表达式进行求值 并显示栈的状态变化过程和最终结
  • 【mcuclub】数据存储AT24C02

    一 实物图 二 原理图 编号 名称 功能 1 A0 地址输入 A2 A1和A0是器件地址输入引脚 24C02 32 64使用A2 A1和AO输入引脚作为硬件地址 总线上可同时级联8个24C02 32 64器件 24C04使用A2和A1输入引