总线学习6--I2C(EEPROM)

鉴于I2C的项目还是很多,所以又多做了一个试验。

1 环境说明

主控还是树莓派Pico。eeprom用的是之前买的AT24C02。 软件环境还是老朋友micropython。

接线是这样接的。

24C02 PinPico Pin
VCC3.3V
GNDGND
SDAGP16
SCLGP17

2 代码

代码如下:

from machine import Pin, I2C
import time# 初始化I2C接口 (GP0 - SDA, GP1 - SCL)
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=400000)# EEPROM的I2C地址,一般为0x50
EEPROM_I2C_ADDRESS = 0x50def eeprom_write(address, data):"""向EEPROM的指定地址写入数据。:param address: EEPROM地址:param data: 要写入的字节数据(一个字节)"""if not 0 <= address <= 255:raise ValueError("地址超出范围")# 发送地址和数据i2c.writeto(EEPROM_I2C_ADDRESS, bytearray([address, data]))# 等待写入完成time.sleep(0.01)# 示例:将数据0xAB写入地址0x10
eeprom_write(0x10, 0xAB)def eeprom_read(address):"""从EEPROM的指定地址读取数据。:param address: EEPROM地址:return: 读取到的数据字节"""if not 0 <= address <= 255:raise ValueError("地址超出范围")# 发送要读取的地址i2c.writeto(EEPROM_I2C_ADDRESS, bytearray([address]))# 读取一个字节的数据data = i2c.readfrom(EEPROM_I2C_ADDRESS, 1)return data[0]# 示例:从地址0x10读取数据
read_data = eeprom_read(0x10)
print("读取到的数据: ", hex(read_data))

注释写的很好,这里就不多解释了。。

3 波形分析

抓到的波形和命令。

1 eeprom_write(0x10, 0xAB)

可以看到。

开始和结束略过。。。

第一段就是1010 0000,第一段比较特殊,地址是7位,所以是101 0000,就是0x50,也就是24C02的设备地址,这个一般是厂商就设置好的。然后是读写位,1是读0是写,这里就是写。最后面跟了一个拉高的ACK。

第二段是0001 0000。这里就是0x10,表明写在地址0x10。

第三段是1010 1011。就是AB,表示将AB写进去。

稍微特别的是好像第二个byte之后,不管是时钟还是数据线,都有点紊乱。虽然不影响结果,还是有点怪。。。

2 read_data = eeprom_read(0x10)

 读的操作要麻烦一些,有4个byte。首先写入地址,再去读。可以看到,这里读写区分很严格,读就是读,写就是写。

首先还是地址,1010 0000。和上面一模一样,不多解释了。

第二个就是写地址,0001 0000,和上面也是一样。

然后是读取的命令,1010 0001,地址还是0x50,但是读写位变成了1,也就是要读了。

最后是eeprom返回的数据,1010 1011,就是0xAB。

4 小结

看看AT24C02这个芯片。

还是来自于美的的Atmel,24C02可以提供2Kb(256字节)的存储容量。存储器按字节进行组织,每个字节可以独立读写。每次写入操作的时间通常在5ms到10ms之间。

试了一下随机读取,原始的数据都是0xFF。

2K就是256*8。也就是说地址范围是0到FF。按照一个汉字两个字节,这个芯片也就是能存1000字的文章,差不多一篇高考作文。。。确实只能存储一些参数和配置的信息

不过用来存储一些个人秘密信息还是很nice。你自己的一些绝密信息存进去,我敢说99.99%的人是没法读出来的。。。

5 对比flash

最后看看eeprom和flash的区别:

存储单元操作按字节(Byte)擦除和写入按块(Block)擦除,按字节/页写入
擦除方式单字节擦除整块擦除
写入方式单字节写入通常按页写入(如256字节)
读写速度写入速度较慢,通常5ms到10ms/字节写入速度较快,通常几十微秒到几毫秒/页
擦除速度无需整体擦除,擦除时间按字节计算擦除速度较慢,通常几毫秒到几百毫秒/块
使用寿命100,000到1,000,000次擦写100,000次擦写
存储容量通常较小(几Kb到几Mb)通常较大(几Mb到几Gb)
功耗较低较高
应用场景配置数据、小数据块存储、频繁更新的数据大容量数据存储,如固态硬盘、嵌入式存储等
数据保持时间通常为10年以上通常为10年以上
工作电压1.8V到5.5V2.7V到3.6V 或 1.8V到3.6V
擦除单位单字节单块(如4KB, 64KB, 128KB等)

flash的速度快,一般起码就得用SPI了。。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Python学习日记-5] Python中的注释

[Python学习日记-5] Python中的注释 简介 注释的示例和使用说明 代码注释原则 简介 随着学习的深入。用不了多久&#xff0c;你就可以写上千甚至上万行的复杂代码啦&#xff0c;有些代码你花了很久写出来&#xff0c;但过了些天再回去看&#xff0c;发现竟然看不懂了&#x…

【wsl】wsl + vscode 中使用 typora 打开 markdown 文件

vscode 连接好wsl 使用Open in External App 一个五星好评的插件Open in External App则可以在vscode中用typora打开md文件&#xff0c;不仅如此&#xff0c;还有设定其他应用打开相应的文件&#xff0c;比如chrome打开html。插件食用方法也比较简单&#xff0c;安装后&#…

Linux 软件编程学习第十一天

1.管道&#xff1a; 进程间通信最简单的形式 2.信号&#xff1a; 内核层和用户层通信的一种方式 1.信号类型&#xff1a; 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 1…

gitea docker 快捷安装部署

前言 在前一篇博文&#xff08;什么是 Gitea&#xff1f;&#xff09;中&#xff0c;我们详细介绍了gitea的功能特性&#xff0c;以及其与其它git服务器之间的特性多维度对比。 在本文中&#xff0c;我们将详细介绍gitea的快捷安装部署&#xff0c;docker方式&#xff01; 1…

Linux磁盘管理与文件系统(二):实用工具和命令、fdisk分区示例

文章目录 4、查看或管理磁盘分区-fdisk格式选项示例 4、示例&#xff1a;使用 fdisk 命令创建分区需求操作步骤 5、创建文件系统-mkfs格式常用选项示例创建其他类型的文件系统 6、创建文件系统-mkswap格式常用选项示例拓展&#xff1a;关闭和启用交换分区拓展&#xff1a;swap分…

Visual Studio Code搭建VUE开发环境

Vue.js 是一款易学易用&#xff0c;性能出色&#xff0c;适用场景丰富的 Web 前端框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;提供容易上手的 API 和一流的文档。可以用来开启PC网页、移动端网页页面、小程序等等 实验环境 VS Code 1.88.1Node 20.16.0Vue3.2…

趋动科技联合超聚变,让超融合彻底释放算力潜能

近日&#xff0c;趋动科技联合超聚变推出基于FusionOne HCI超融合的AI算力资源池化解决方案。该方案基于业内领先的AI算力资源池化技术&#xff0c;实现智能调度、异构算力融合管理等功能&#xff0c;让客户能够低成本获取AI算力&#xff0c;便捷使用AI算力&#xff0c;加速AI业…

AI学习记录 - transformer的Embedding层

创作不易&#xff0c;免费的赞 前面有介绍了GPT2如何进行token化的过程&#xff0c;现在讲下transformer的Embedding层 Embedding层就是一个巨大的矩阵&#xff0c;边长分别是词汇表长度和词向量维度&#xff0c;矩阵里面的每一个数字都是一个随机初始化的&#xff0c;或者是…

TinyWebserver的复现与改进(1):服务器环境的搭建与测试

计划开一个新坑, 主要是复现qinguoyi/TinyWebServer项目&#xff0c;并且使用其它模块提升性能。 本文开发服务器配置&#xff1a;腾讯云轻量级服务器&#xff0c;CPU - 2核 内存 - 2GB&#xff0c;操作系统 Ubuntu Server 18.04.1 LTS 64bit 打开端口 需要打开服务器3306、80…

常见硬件工程师面试题(四)

大家好&#xff0c;我是山羊君Goat。 对于硬件工程师&#xff0c;学习的东西主要和电路硬件相关&#xff0c;所以在硬件工程师的面试中&#xff0c;对于经验是十分看重的&#xff0c;像PCB设计&#xff0c;电路设计原理&#xff0c;模拟电路&#xff0c;数字电路等等相关的知识…

DriftingBlues2靶机渗透测试

DriftingBlues2靶机 文章目录 DriftingBlues2靶机信息收集FTP渗透web渗透权限提升靶机总结 信息收集 nmap扫描得到21,22和80端口&#xff0c;其中21ftp协议可以使用匿名用户登录 使用目录扫描一下网站&#xff0c;得到了blog目录 FTP渗透 匿名用户登录进去&#xff0c;发现…

WPF篇(8)- Button按钮

1. 用法解析 Button因为继承了ButtonBase&#xff0c;而ButtonBase又继承了ContentControl&#xff0c;所以&#xff0c;Button可以通过设置Content属性来设置要显示的内容。例如 <Button Content"确定"/>我们使用Button的时机&#xff0c;通常是鼠标点击事件…

补录:day023-回溯法

40.组合II 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 思路:组合题目二&#xff0c;这个题…

2024世界机器人大会将于8月21日至25日在京举行

2024年的世界机器人大会预定于8月21日至25日&#xff0c;在北京经济技术开发区的北人亦创国际会展中心隆重举办。 本届大会以“共育新质生产力 共享智能新未来”为核心主题&#xff0c;将汇聚来自全球超过300位的机器人行业专家、国际组织代表、杰出科学家以及企业家&#xff0…

【云原生】Prometheus Pushgateway使用详解

目录 一、前言 二、Pushgateway概述 2.1 什么是Pushgateway 2.1.1 Pushgateway在Prometheus中的位置 2.2 为什么需要Pushgateway 2.3 Pushgateway作用 2.4 Pushgateway 工作原理 2.5 Pushgateway 使用场景 2.6 Pushgateway 优缺点 三、Pushgateway 部署 3.1 二进制安…

ip透传及实例

IP 透传介绍 “IP 透传”&#xff08;IP Passthrough&#xff09;是一种网络配置方式&#xff0c;指的是将网络服务提供商分配给用户的公网 IP 地址直接传递或分配给用户设备&#xff0c;而不是经过网络地址转换&#xff08;NAT&#xff09;处理。 在传统的网络环境中&#xf…

HTML5+JavaScript绘制彩虹和云朵

HTML5JavaScript绘制彩虹和云朵 彩虹&#xff0c;简称虹&#xff0c;是气象中的一种光学现象&#xff0c;当太阳光照射到半空中的水滴&#xff0c;光线被折射及反射&#xff0c;在天空上形成拱形的七彩光谱&#xff0c;由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…

Qt WebEngine基于WebEngineScript注入js脚本

在之前的文章中&#xff0c;我们介绍了Qt WebEngine注入js的用法&#xff0c;及runJavaScript()的用法&#xff0c;该方法主要是用在页面加载完成后&#xff0c;为了和网页做一些交互时使用。有时候需要监听网页加载完成的一些状态或信息&#xff0c;则需要网页加载前注入js来实…

VSCODE platformio ESP32-S3 内置 JTAG 接口断点单步调试笔记

ESP32 S3的两种JTAG调试方法 ESP32 S3的有两种JTAG调试方法&#xff0c;直接连接板子上的JTAG引脚进行调试&#xff0c;或者用ESP32-S3 内置 JTAG 接口进行调试&#xff0c;这些方法有助于开发者在开发过程中进行更深入的调试。 1、ESP32-S3 内置 JTAG 接口 使用 ESP32-S3 内…

VSCode Markdown Preview Enhanced启用PlantumlL支持

目录 VSCode Markdown Preview Enhanced启用Plantuml支持安装Java下载Plantuml最新版本jar文件配置Markdown Preview Enhanced中Plantuml Jar Path路径 VSCode Markdown Preview Enhanced启用Plantuml支持 当需要Markdown支持PlantUML语法显示支持时&#xff0c;需要进行如下设…