(十一)IIC总线-AT24C02-EEPROM

文章目录

  • IIC总线篇
  • AT24C02-EEPROM篇
    • 主要特性
    • 引脚说明
    • AT24Cxx用几位数据地址随机寻址的(存储器组织)
    • AT24C02设备操作
    • AT24CXX设备寻址
    • EEPROM写操作的种类
    • EEPROM读操作的种类
    • 实现单字节写
    • 实现任意读
    • 读写应用


IIC总线篇

前面介绍过了,请参考
(十)IIC总线-PCF8591-ADC/DAC

AT24C02-EEPROM篇

内容依然是来自芯片数据手册以及自己总结理解

主要特性

在这里插入图片描述
说人话:
1.有双线串行接口(IIC总线通讯)
2.保存时间周期最多需要5ms,因此连续写最好加个5ms延时
3.高可靠性:读写次数:1,000,000 次 – 数据保存:100 年

引脚说明

在这里插入图片描述

在这里插入图片描述

这里原理图大家注意一下A3A2应该是标错了

最主要就是:
SDA数据线
SCL时钟线
A2,A1,A0地址线,其中:

24C01和24C02 使用A2,A1,A0作为硬件连接的器件地址输入引脚
24C04仅使用 A2、A1 作为硬件连接的器件地址输入引脚
24C08 仅使用 A2 作为硬件连接的器件地址输入引脚
24C16 未使用作为硬件连接的器件地址输入引脚,

WP写保护位:1-禁止读写,0-允许读写(如图默认允许所以WP接GND

AT24Cxx用几位数据地址随机寻址的(存储器组织)

数据要放到哪个地址里面(数据存放的地址)

在这里插入图片描述
说人话:AT24C02里面那么多内存地址,需要一个8位的数据字地址来进行随机字寻址
AT24C02是一个2k的设备—用8位的数据字地址随机寻址(0x00-0xff)
AT24C04是一个4k的设备—用9位的数据字地址随机寻址
AT24C08是一个8k的设备—用10位的数据字地址随机寻址
AT24C16A是一个16k的设备–用11位的数据字地址随机寻址

AT24C02设备操作

在这里插入图片描述
说人话:就是一些起始信号,终止信号,应答信号,复位信号等
起始信号:必须先于任何一个指令
应答信号:在第九个时钟脉冲发送,0-应答 1-非应答

AT24CXX设备寻址

AT24CXX设备的地址(器件/设备的地址)
在这里插入图片描述
在这里插入图片描述
结合上面原理图
地址指令:0xA1
地址指令:0xA0

说明():
1k/2k的EEPROM(AT24C02) 使用 A2,A1,A0作为设备地址
4k的EEPROM(AT24C02) 使用 A2,A1作为设备地址
8k的EEPROM(AT24C02) 使用 A2作为设备地址
16k的EEPROM(AT24C02) 不使用设备地址

EEPROM写操作的种类

比赛用单字节就行,多字节采取分割的形式储存
在这里插入图片描述
俩种:一个是单字节写入,一个是页写入
这里不关心,比赛就用单字节写入,即使连续写,也可以多次单字节写入

EEPROM读操作的种类

比赛用任意地址读取(因为一般比赛都不指定地址储存数据),另外random read 处理简单

在这里插入图片描述

三种:
1.当前地址读:最后一次读或写操作期间访问的最后一个地址(不指定地址),增加1,然后一直读
2.任意地址读 :指定地址,读取
3.顺序读:由当前地址或任意地址读取来启动,然后只要EEPROM收到确认,它将继续增加数据字地址,并连续钟出顺序数据字。

实现单字节写

在这里插入图片描述

void WriteEeprom(u8 add, u8 dat)
{
	I2CStart();
	I2CSendByte(0xA0);
	I2CWaitAck();
	I2CSendByte(add);
	I2CWaitAck();
	I2CSendByte(dat);
	I2CWaitAck();
	I2CStop();
	Delay5ms();//延迟5ms		
}

实现任意读

在这里插入图片描述

u8 ReadEeprom(u8 add)
{
	u8 tmp;
	
	I2CStart();
	I2CSendByte(0xA0);
	I2CWaitAck();
	I2CSendByte(add);
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0xA1);
	I2CWaitAck();
	tmp = I2CReceiveByte();
	I2CSendAck(1);
	I2CStop();
	
	return tmp;		
}

读写应用

功能:用eeprom记录开机次数,S7短按键清除开机次数
小方法:这里用到了 一个标记法,解决了第一次开机检测问题

void EepromTask()
{
	if(ReadEeprom(0x7f)!= 213){
		WriteEeprom(0x7f,213);
		WriteEeprom(0x03,1);
		open_num = 1;
	}else{	
		open_num = ReadEeprom(0x03);
		WriteEeprom(0x03,++open_num);		
	}
}


----- 如有错误欢迎大家批评指正!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/317077.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你用 Stable Diffusion 写好提示词

Stable Diffusion 技术把 AI 图像生成提高到了一个全新高度,文生图 Text to image 生成质量很大程度上取决于你的提示词 Prompt 好不好。 前面文章写了一篇文章:一份保姆级的 Stable Diffusion 部署教程,开启你的炼丹之路 本文从“如何写好…

前端基础知识

一、脚本script 定义:脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的,脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行 作用:可以…

element:日历 / 使用记录

一、预期效果 Element - The worlds most popular Vue UI framework element默认样式 目标样式 二、Calendar 属性 参数说明类型可选值默认值value / v-model绑定值Date/string/number——range时间范围,包括开始时间与结束时间。开始时间必须是周一,…

【HuggingFace Transformer库学习笔记】基础组件学习:Evaluate

基础组件学习——Evaluate Evaluate使用指南 查看支持的评估函数 # include_community:是否添加社区实现的部分 # with_details:是否展示更多细节 evaluate.list_evaluation_modules(include_communityFalse, with_detailsTrue)加载评估函数 accuracy…

Linux终端常见用法总结

熟悉Linux终端的基础用法和常见技巧可以极大提高运维及开发人员的工作效率,笔者结合自身学习实践,总结以下终端用法供同行交流学习。 常 见 用 法 🎯 1:快捷键 1.1 Alt . 在光标位置插入上一次执行命令的最后一个参数。 1.2 Ct…

图片特效/增强GUI程序

程序下载地址:mendianyu/pictureConvert: 图片特效/增强GUI程序,借助百度接口实现人像动漫化,模糊图片变清晰等等功能 (github.com) 图片特效/增强GUI程序 借助百度接口实现人像动漫化,模糊图片变清晰等等功能 程序介绍 运行Ima…

码牛课堂首推——鸿蒙南北双向开发学习路线图标准版~

鸿蒙!鸿蒙!鸿蒙! 要说2023-2024年IT圈最火爆的名词,一定是鸿蒙! 2023年9月25日,华为发布会正式宣布2024年第一季度将推出HarmonyOS NEXT版本,这意味着鸿蒙原生应用开发将彻底摆脱Android手机系…

redis夯实之路-集群详解

Redis有单机模式和集群模式。 集群是 Redis 提供的分布式数据库方案,集群通过分片( sharding )来实现数据共享,并提供复制和故障转移。集群模式可以有多个 master 。使用集群模式可以进一步提升 Redis 性能,分布式部署实现高可用性&#xff…

【Kafka-3.x-教程】-【二】Kafka-生产者-Producer

【Kafka-3.x-教程】专栏: 【Kafka-3.x-教程】-【一】Kafka 概述、Kafka 快速入门 【Kafka-3.x-教程】-【二】Kafka-生产者-Producer 【Kafka-3.x-教程】-【三】Kafka-Broker、Kafka-Kraft 【Kafka-3.x-教程】-【四】Kafka-消费者-Consumer 【Kafka-3.x-教程】-【五…

ROS无人机开发常见错误

飞控部分 一、解锁时飞控不闪红灯,无任何反应,地面站也无报错 解决办法: 打开地面站的遥控器一栏 首先检查右下角Channel Monitor是否有识别出遥控各通道的值,如果没有,检查遥控器是否打开,遥控器和接收…

【Python】Python语言 3小时速通(有C语言基础版)

python从入门到实践 变量 message"hello world"并不需要指出变量类型 方法 tittle()#以首字母大写的形式输出单词upper()#全部大写输出lower()#全部小写输出存储数据时经常使用lower,因为无法确保数据是大写还是小写 rstrip()#输出删除字符串尾部多余…

Linux系统中使用ln命令创建软连接

大家应该和我一样,第一次听到软连接这个词时感觉好高级啊,但其实也就那么回事,你完全可以将他类比为Windows系统中的快捷方式。 链接只是一个指向,并不是物理移动,类似Windows系统的快捷方式 1.功能和语法 功能&…

C#进阶学习

目录 简单数据结构类ArrayList声明增删查改遍历装箱拆箱 Stack声明增取查改遍历装箱拆箱 Queue声明增取查改遍历 Hashtable声明增删查改遍历装箱拆箱 泛型泛型分类泛型的作用泛型约束 常用泛型数据结构类List声明增删查改遍历 Dictionary声明增删查改遍历 LinkedList声明增删查…

Seata TM管理分支事务

TM相当于一个中间商,是没有涉及到任何数据库底层操作的。 TransactionalTemplate 1、TM向TC端发起一次开启全局事务的请求 io.seata.tm.api.TransactionalTemplate#beginTransaction --> io.seata.tm.api.DefaultGlobalTransaction#begin(int, java.lang.Strin…

APM链路监控: Linux 部署 pinpoint

目录 一、实验 1.环境 2. 准备 3.HBase单机部署 4.pinpoint部署 二、问题 1.pinpoint有哪些功能 2.pinpoint架构是如何组成的 3.Linux中自带的jdk 如何设置JAVA_HOME 4. hbase启动报错 5.hbase的master启动失败 6.JPS命令如何安装和使用 一、实验 1.环境 &#x…

Centos7.9服务器编译安装Nginx1.24.0和php8.3

Centos7.9服务器编译安装Nginx1.24.0和php8.3 服务器nginx原版本有安全漏洞,需要升级,由于原始是yum源安装,通过yum直接升级,无法正常升级完成,故而需要卸载yum源,重新编译安装。 1、查看原来nginx版本,ps查看原来nginx进程,运行状态: ps aux | grep nginx ​ root …

JAVAEE——request对象(三)

1. request对象 1.1 知识点 &#xff08;1&#xff09;乱码问题的两种解决方式 &#xff08;2&#xff09;post和get提交的区别 &#xff08;3&#xff09;request接收同名参数的问题 1.2 具体内容 使用request接收参数 <%page contentType"text/html; charsetut…

一个命令查看linux系统是Centos还是Ubuntu

目 录 一、 背景介绍 二、一个命令查看linux系统的简单方法 1、 uname -a 2、cat /etc/issue 3、lsb_release -a 4、 dmesg | grep Ubuntu 一、 背景介绍 Linux 系统基本上分为两大类&#xff1a; 1. Red Hat 系列&#xff1a;包括 Red Ha…

ipv6(centos布置-亲自操刀)

这一篇本来不太想写&#xff0c;但想想&#xff0c;不写出来后面又忘记了&#xff0c;就写写看了&#xff0c; 切记&#xff0c;大家看完别去用来做别的事情哈 正文来了&#xff1a; 开始就去注册一个Ipv6隧道服务吧 在隧道信息的下方有Example IPv6 Tunnel Configurations …

openEuler安装Docker艰辛路程

文章目录 安装docker测试docker关于windows docker拉取镜像查看所有镜像删除镜像删除不在运行的进程强制删除正在运行的进程 启动docker容器服务-d测试 停止docker容器服务查看docker启动进程更新容器(没有自启动功能&#xff0c;更新为自启动)docker端口映射进入容器修改内容退…