Go实现树莓派读取at24c02 eeprom读写数据

步骤

启用i2c

参考 Go实现树莓派读取bh1750光照强度

代码

package mainimport ("fmt""periph.io/x/conn/v3/i2c"
)type AT24C02Device struct {dev *i2c.Dev
}func NewAT24C02Device(addr uint16, bus i2c.BusCloser) (*AT24C02Device, error) {var (dev = &AT24C02Device{}//err error)dev.dev = &i2c.Dev{Addr: addr, Bus: bus}return dev, nil
}func (b *AT24C02Device) Init() error {return nil
}func (b *AT24C02Device) Destroy() error {b.dev = nilreturn nil
}func (b *AT24C02Device) ReadAll() ([]byte, error) {return b.read(0, 255)
}func (b *AT24C02Device) Read(startAddr, size uint) ([]byte, error) {return b.read(startAddr, (startAddr+size)-1)
}func (b *AT24C02Device) read(startAddr, endAddr uint) ([]byte, error) {var bs = []byte{byte(startAddr)}var readBytes = make([]byte, endAddr-startAddr+1)fmt.Println("size: ", endAddr-startAddr+1)err := b.dev.Tx(bs, readBytes)return readBytes, err
}func (b *AT24C02Device) EarseAllTo(v byte) error {var (bs = make([]byte, 256))for i := range bs {bs[i] = v}return b.write(0, bs)
}func (b *AT24C02Device) Write(startAddr uint, bs []byte) error {return b.write(startAddr, bs)
}func (b *AT24C02Device) write(startAddr uint, bs []byte) (err error) {var (//recvBytes  = make([]byte, 1)datLen   = len(bs)pageSize = 8 // 数据手册是 8byte, 树莓派可支持16字节/页addr     = startAddrstartIdx = 0endIdx   = pageSize - int(startAddr)%pageSize)if endIdx > datLen {endIdx = datLen}for {fmt.Println("Addr: ", addr, ", startIndex: ", startIdx, ", endIndex: ", endIdx, bs)if err = b.writePage(addr, bs[startIdx:endIdx]); nil != err {return}time.Sleep(time.Millisecond * 5)if endIdx >= datLen {break}addr += uint(pageSize)startIdx = endIdxendIdx += pageSizeif endIdx > datLen {endIdx = datLen}}return
}func (b *AT24C02Device) writePage(startAddr uint, bs []byte) error {var writeBytes = make([]byte, 1)writeBytes[0] = byte(startAddr)writeBytes = append(writeBytes, bs...)_, err := b.dev.Write(writeBytes)return err
}

测试

// 初始化硬件if _, err := host.Init(); err != nil {log.Fatal(err)}// 初始化I2Ci2cBus, err := i2creg.Open("")if err != nil {log.Fatalf("Failed to open I2C bus: %v", err)}defer i2cBus.Close()at24c02, err := NewAT24C02Device(0x51, i2cBus)if nil != err {fmt.Println(err)return}fmt.Println(at24c02.ReadAll())fmt.Println(at24c02.Read(0x00, 1))fmt.Println(at24c02.Write(0x13, []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}))

在这里插入图片描述

Note

  1. 写起始地址,数据手册是word,stm写的时候也是uint16, 而树莓派实际写地址是byte, 对于256够用, 但超过256的存储模块还没试过, 不知道怎么样的
  2. 数据手册有提过, 两次写的间隔Twr时间, 5ms, 所以两次写页时延时5ms, 否则会失败。。。
    在这里插入图片描述
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

图像融合-下游任务(目标检测、实例分割、深度估计)

下游任务: 采用目标检测、实例分割和深度估计的下游任务来验证图像融合结果质量。 文章目录 下游任务:1.目标检测2.实例分割3.深度估计Update1.目标检测 YOLOv8:https://github.com/ultralytics/ultralytics 步骤内容第一步下载项目到本地第二步安装README中项目相关的环…

LibreNMS简介

目录 1 LibreNMS简单介绍1.1 LibreNMS介绍 2 安装2.1 Ubuntu安装1、安装依赖2、添加 librenms 用户3、下载 LibreNMS4、设置权限5、安装 PHP 依赖项6、设置时区7、配置 MariaDB8、配置 PHP-FPM9、配置 Web 服务器10、启用 lnms 命令11、配置 snmpd12、cron13、启用调度程序14、…

mysql NDBcluster数据库集群介绍、部署及配置

前言: MySQL集群是一个无共享的、分布式节点架构的存储方案,旨在提供容错性和高性能。它由三个主要节点组成:管理节点(MGM)、数据节点和SQL节点。 管理节点(MGM) 定义与用途:管理节点是MySQL Cluster的控制中心,负责管理集群内的其他节点。它提供配置数据,启动和停止…

Flask gevent启动报错UnicodeDecodeError

文章目录 环境代码报错Track解决思路 环境 acondana 24.1.2python 3.7.13 32bitflask 2.2.3gevent 21.8.0 代码 port 7236 logging.basicConfig(levellogging.INFO, # 控制台打印的日志级别filename./logs/app.log, # 将日志写入log_new.log文件中filemodea, # 模式&…

【4】STM32·FreeRTOS·中断管理

目录 一、什么是中断 二、中断优先级分组设置 2.1、中断优先级基本概念 2.2、中断优先级分组 2.3、FreeRTOS中断特点 三、中断相关寄存器 3.1、系统中断优先级配置寄存器 3.2、PendSV和Systick中断优先级的配置 3.3、中断屏蔽寄存器 四、FreeRTOS中断管理实验 一、什…

阿里云服务器在线安装nginx

⛰️个人主页: 蒾酒 🔥系列专栏:《nginx实战》 目录 内容简介 安装步骤 1.root用户登录连接阿里云服务器 2.在usr/local下新建nginx目录 3.安装 1安装下载工具 2下载nginx压缩包 3解压 4安装nginx依赖的库 5编译并安装 6启动nginx 7开启…

ShellCode详解三

直接进入正题。 在完成正式的shellcode代码导出之前,我们先手动的对代码进行导出,以使各位同学更加了解其原理。 手动注入shellcode 1、我们利用DLE工具找到上一节中我们生成的PE文件的代码段位置 上述图片就是我们的代码段位置 2、利用WinHex工具我…

Appium测试之获取appPackage和appActivity

appPackage和appActivity 进行appium自动化测试非常重要的两个参数,我们所测试的APP不同,这两个参数肯定也是不一样的。那如何快速的获取这APP的这两个参数呢?我这里介绍两个方法。 import org.openqa.selenium.remote.DesiredCapabilities;i…

韩国站群服务器在全球网络架构中的重要作用?

韩国站群服务器在全球网络架构中的重要作用? 在全球互联网的蓬勃发展中,站群服务器作为网络架构的核心组成部分之一,扮演着至关重要的角色。韩国站群服务器以其卓越的技术实力、优越的地理位置、稳定的网络基础设施和强大的安全保障能力,成…

docker(二):Centos安装docker

文章目录 1、安装docker2、启动docker3、验证 官方文档:https://docs.docker.com/engine/install/centos/ 1、安装docker 下载依赖包 yum -y install gcc yum -y install gcc-c yum install -y yum-utils设置仓库 yum-config-manager --add-repo http://mirrors…

端到端将重塑智驾?获10亿美金融资,解密英国AI独角兽Wayve

‍作者 |张马也 编辑 |德新 就在前两天,英国AI公司Wayve宣布获得新一轮10.5亿美元融资,投资方为软银、英伟达和现有投资人微软,可以说是顶级豪华阵容。 作为一家英国公司,Wayve这轮融资也创造了英国AI公司有史以来最大的单笔融资…

北斗卫星在农田测量中的广泛应用

北斗卫星在农田测量中的广泛应用 随着科技的不断发展和进步,北斗卫星在农田测量中的应用也越来越广泛。北斗卫星系统是我国自行研制的卫星导航定位系统,具有全球覆盖、高精度和高可靠性的特点,是农田测量领域不可或缺的重要工具。 首先&…

Laravel框架使用图片处理简单教程

PHP图片处理扩展包使用 文中使用的是Laravel框架,更多框架扩展包请点击传送门-》更多框架集成 Intervention Image 是一个开源的 PHP 图像处理和操作 库。它提供了一个更简单也更优雅的方式来创建/编辑/组合图像,并且支持最常见的两个图像处理库 GD Library 和 Im…

静态分析-RIPS-源码解析记录-01

token流扫描重构部分,这一部分主要利用php的token解析api解析出来的token流,对其中的特定token进行删除、替换、对于特定的语法结构进行重构,保持php语法结构上的一致性 解析主要在lib/scanner.php中通过Tokenizer这个类来实现,也就是在main…

机器学习面试篇

如何理解机器学习数据集的概念 数据集是机器学习的基础,它包括了用于训练和测试模型所需的数据。数据集通常以矩阵的形式存在,其中每一行代表一个样本(或实例),每一列代表一个特征(或属性)。…

SpringAMQP Work Queue 工作队列

消息模型: 代码模拟: 相较于之前的基础队列,该队列新增了消费者 不再是一个,所以我们通过代码模拟出两个consumer消费者。在原来的消费者类里写两个方法 其中消费者1效率高 消费者2效率低 RabbitListener(queues "simple.queue")public voi…

学习网络需要认识的各种设备

网桥(bridge) 网桥工作在数据链路层,可以把多个局域网连接起来,组成一个更大的局域网 以太网中,数据链路层地址就是mac地址,网桥与集线器的区别就是,网桥会过滤mac,只有目的mac地址…

draw.io 网页版二次开发(2):开始修改代码

目录 一 说明 二 打开开发环境 1. 代码调整 2. 修改访问链接 3. 注意 三 部分功能的代码汇总 1. 保存功能 2. 菜单栏折叠按钮功能 3. 顶部菜单栏 4.在顶部菜单栏中的【文件】菜单中新增选项 (1) 方法一:单独增加 (…

calllback回调函数:同步调用,异步调用,异步回调

纯python代码的异步回调 # _*_ encoding:utf-8 _*_ import time import threading callback_value None onFlag Truedef add(a, b, num):print(f"I am the function: %s, please wait for %d" % (add.__name__, num))time.sleep(num)c a bprint("a b 1 &…

K8S搭建

文章目录 K8S搭建配置要求 安装 Kuboard-Spray加载离线资源包规划并安装集群访问集群重启Kubernetes集群Worker节点不能启动许多Pod一直Crash或不能正常访问 containerd配置网络代理 常用的 kubectl 命令: K8S搭建 安装高可用的Kubernetes集群 配置要求 对于 Kub…