AT24C02详解(蓝桥杯单片机模块(IIC总线))

AT24C02详解(蓝桥杯单片机模块(IIC总线))文章目录特性描述引脚描述 存储组织 设备操作 IIC 设备地址写操作字节写 页写入 确认轮询 读操作确认轮询 当前地址读取 任意地址读 连续顺序读 蓝桥杯部分特性 256×8 2K IIC 接口 施密特触发器 噪声抑制用于硬件数据保护的写保护引脚 8 字节页 1K 2K 允许部分页写写周期 最大 5ms 描述 AT24C02 提供 2048 位的电可擦和可编程只读存储器 EEPROM 组织为 256 8 位字 该装置经过优化 可用于许多工业和商业应用 引脚功能 A0 A2 地址

特性

描述

在这里插入图片描述

引脚 功能
A0-A2 地址输入
SDA 串行数据
SCL 串行时钟输入
WP 写保护
NC No Connect
GND
VCC 电源

引脚描述:

  • SERIAL CLOCK (SCL):
    SCL输入用于将正边缘时钟数据输入到每个EEPROM设备,并将负边缘时钟数据输出到每个设备。

  • SERIAL DATA (SDA):
    SDA引脚是双向的,用于串行数据传输。

  • DEVICE/PAGE ADDRESSES (A2, A1, A0):
    A2、A1和AO引脚是硬接线AT24C02的设备地址输入。多达8个1K/2K设备可以在一个总线系统上被寻址。

  • WRITE PROTECT (WP):
    AT24C02有一个写保护引脚,提供硬件数据保护。当连接到地(GND)时,写保护引脚允许正常读/写操作。当引脚连接到Vcc时,就会启用Write protection特性,不允许读写。

存储组织:

AT24C02, 2K SERIAL EEPROM:
内部组织32页,每个8字节2K需要8位数据字地址用于随机字寻址也就是说有32页,每一页8Byte,每1Byte是8位,总共就是2Kbit的存储空间

设备操作(IIC)

  • 时钟和数据转换:
    SDA引脚通常与外部设备拉高。SDA引脚上的数据只能在SCL低时间段内改变。在SCL高时间段内的数据改变将表明如下定义的启动或停止条件。

  • 启动条件:
    SCL高的时候SDA从高到低的过渡是一个启动条件。

  • 停止条件:
    SCL高的SDA从低到高的转变是停止条件。在读取序列之后,stop命令将EEPROM置于备用电源模式。

  • 确认:
    所有地址和数据字都以8位字串行地传送到EEPROM或从它传送出来。EEPROM发送一个0来确认它已经接收到每个字。

  • 待机模式:
    AT24C01A/02/04/08A/16A具有低功率待机模式
    启用:
    (a)上电后
    (b)在收到停止位和完成任何内部操作后。








设备地址

写操作

字节写:

页写入:

在这里插入图片描述

确认轮询:

一旦内部计时的写周期已经开始并且EEPROM输入被禁用,确认轮询可以被启动。这包括发送一个起始条件,后面跟着设备地址字。读/写位代表所需的操作。只有当内部写周期已经完成,EEPROM才会以零响应,允许读或写序列继续。

读操作

确认轮询:

一旦内部计时的写周期已经开始并且EEPROM输入被禁用,确认轮询可以被启动。这包括发送一个起始条件,后面跟着设备地址字。读/写位代表所需的操作。只有当内部写周期已经完成,EEPROM才会以零响应,允许读或写序列继续。

读操作和写操作的初始化方式相同,只是设备地址字的读/写选择位被设置为1。读操作有三种:

  • 读当前地址
  • 任意地址读
  • 连续顺序读

当前地址读取:

内部数据字地址计数器维护上次读或写操作期间访问的最后一个地址,该地址加1。这个地址在操作之间保持有效,只要芯片电源是保持的。读取期间的地址“翻转”是从最后一个内存页的最后一个字节到第一个页的第一个字节。写过程中的地址“翻转”是从当前页的最后一个字节到同一页的第一个字节一旦具有读/写选择位设置为1的设备地址被打卡并被EEPROM确认。

在这里插入图片描述

任意地址读:

在这里插入图片描述

连续顺序读:

顺序读由当前地址读或任意地址读发起。在微控制器收到一个数据字后,它以一个确认响应。只要EEPROM收到一个确认,它就会继续增加数据字地址,并连续地以时钟的方式中断连续的数据字。当达到内存地址限制时,数据字地址将“翻转”,顺序读取将继续。顺序读操作被终止时,后跟停止条件。

在这里插入图片描述

蓝桥杯部分

因为比赛常常存的数据不是8位的数据,而是一个超过255的数字,因此这里封装函数采用连续写,和连续读,但是向上提供的接口是一样的,方便后面使用

//写函数 void v_AtW(uchar addr, uint dat) { 
    IIC_Start(); IIC_SendByte(SlaveAddrW); IIC_WaitAck(); IIC_SendByte(addr*2); IIC_WaitAck(); IIC_SendByte(dat >> 8); IIC_WaitAck(); IIC_SendByte(dat); IIC_WaitAck(); IIC_Stop(); } //读函数 uint u_AtR(uchar addr) { 
    uint _data; IIC_Start(); IIC_SendByte(SlaveAddrW); IIC_WaitAck(); IIC_SendByte(addr*2); IIC_WaitAck(); IIC_Start(); IIC_SendByte(SlaveAddrR); IIC_WaitAck(); _data = IIC_RecByte(); IIC_SendAck(0); _data = _data << 8 | IIC_RecByte(); IIC_Stop(); return _data; } 
 void main() { 
    uint saveData = 0; UartInit(); v_AtW(0, 56431); Delay500ms(); saveData = u_AtR(0); while(1) { 
    Delay500ms(); TI = 1; printf("%u", saveData); } } 

输出
在这里插入图片描述

在这里插入图片描述

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

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

(0)
上一篇 2026年3月18日 上午7:08
下一篇 2026年3月18日 上午7:08


相关推荐

  • JAVA自定义注解使用

    JAVA自定义注解使用说到注解在 java 中我们经常会看到 Override Deprecated SuppressWarn 这些注解 这些都是 JDK 自带的注解关于自定义注解 1 使用 interface 关键字定义注解 2 成员以无参方式声明 3 成员可以使用 default 指定一个默认值 4 如果只有一个成员 nbsp 成员名必须为 value 使用时可以忽略 号元注解 Targe

    2026年3月17日
    2
  • java中的反射

    java中的反射主要介绍以下几方面内容理解Class类理解Java的类加载机制学会使用ClassLoader进行类加载理解反射的机制掌握Constructor、Method、Field类的用法理解并掌

    2022年7月1日
    24
  • apache安装教程详解_Apache安装

    apache安装教程详解_Apache安装1.Apache安装1.下载apache下载链接2.将解压文件移动到目标目录(整个文件目录最好用英文不要有空格)3.命令行注册apache服务(不同于exe文件的安装)(以管理员身份打开cmdwin10)(管理员身份和普通用户身份区别)(在命令行中找到目标httpd.exe文件目录输入cdC:\wamp\Apache24\bin…

    2026年2月11日
    7
  • 阿里云上的Docker容器镜像仓库

    阿里云上的Docker容器镜像仓库去年笔者写了一篇关于如何使用 AWS 的镜像仓库 ECR 因为老东家使用 AWS 服务 今天再分享一篇类似的文章 即如何使用阿里云上的 Docker 容器镜像仓库 这两者并没有多大区别 只是在授权上的不同和收费上的不同 使用阿里云容器镜像服务需要先开通容器服务 Kubernetes 之后才可以使用容器镜像服务 可能并不准确 因为笔者也不是很了解 如果你没有特别的需求 那么使用容器镜像服务是不收费的 使用阿里云的 Kubernetes 容器服务 因为需要至少购买两个 work 节点 以及 vpc 和 NAT 日记服务 因此需要

    2026年3月16日
    3
  • python set 一些用法

    python set 一些用法

    2021年11月27日
    46
  • ClientScriptManager.RegisterStartupScript.

    ClientScriptManager.RegisterStartupScript.当我们要注册一个在页面启动的脚本时,我们会用ClientScriptManager.RegisterStartupScript。比如<%@PageLanguage=”C#”%><!DOCTYPEhtmlPUBLIC”-//W3C//DTDXHTML1.0Transitional//EN””http://www.w3.org/TR/xhtml1/D…

    2022年7月20日
    18

发表回复

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

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