linux下i2c调试神器i2c-tools安装及使用

i2c-tools介绍

在嵌入式linux开发中,有时候需要确认i2c硬件是否正常连接,设备是否正常工作,设备的地址是多少等等,这里我们就需要使用一个用于测试I2C总线的工具——i2c-tools。

i2c-tools是一个专门调试i2c的开源工具,可获取挂载的设备及设备地址,还可以读写I2C设备寄存器。调试新的设备驱动时,难免要反复修改寄存器,然后看结果现象。传统的做法是修改驱动代码寄存器值->编译->下载->运行->看结果。这一过程比较费时间,而每次需要改的可能只是 1 个 bit,这种情况下 i2c-tools 简直就是神器。

下面我们就对这个工具的安装和使用做个简单介绍。

i2c-tools 官方说明:

https://i2c.wiki.kernel.org/index.php/I2C_Tools

工具源码下载地址:

https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/

i2c-tools工具包括:

i2cdetect:用于扫描 i2c 总线上的设备,并显示地址。
i2cset:设置i2c设备某个寄存器的值。
i2cget:读取i2c设备某个寄存器的值。
i2cdump:读取某个i2c设备所有寄存器的值。
i2ctransfer:一次性读写多个字节。

工具命令介绍:
    i2cdetect:检测i2c芯片
    i2cdump:查看寄存器值
    i2cget:获取单个寄存器值(8位寄存器)
    i2cset:设置单个寄存器值(8位寄存器)
    i2ctransfer:一次传输多字节数据(16位寄存器)
参数介绍:
    -y:禁用交互模式。
    -f:强制访问设备。
    -r:写入后立即读回该值。

注:i2c-tools 原理是通过操作  /dev 路径 i2c-× 设备文件完成,因此你的 kernel 必须开启了 CONFIG_I2C_CHARDEV 配置,否者会报找不到节点。  

在设备上也可以通过目标板终端输入:ls /sys/bus/i2c/devices查看i2c设备节点信息。看到的i2c-0,i2c-1,指的是i2c总线节点,i2c从设备都是挂载在总线节点下的。

工具编译

工具源码,使用以下命令进行编译

make CC=arm-linux-gnueabihf-gcc USE_STATIC_LIB=1

USE_STATIC_LIB 的意思是使用静态编译。编译完成后,会在tools目录下产生i2cdetect,i2cdump,i2cget,i2cset,i2ctransfer五个产物。将这些可执行文件拷贝到设备上。

不加 USE_STATIC_LIB 编译选项,会使用动态链接的方式编译。编译完成后需要拷贝i2c-tools-4.3/lib 目录下的libi2c.so.0动态库到设备上的/usr/bin 目录下。编译会生成五个工具:i2cdetect、i2cset、i2cget、i2cdump、i2ctransfer,拷贝到开发板中就可以使用。

i2c-tools使用方法

i2cdetect:查询开发板包含的i2c总线和外设,看以下命令:

i2cdetect -l

探测开发板包含的i2c总线。

i2cdetect -y -r 0

探测i2c-0总线上挂载的外设,参数-y表示取消交互模式,直接执行命令。

i2cdetect -y -r 1

探测i2c-1总线上挂载的外设,UU表示该设备已经被Linux内核驱动占用,探测程序会略过该设备。下图所示,从设备地址分别是0x0c和0x1a。 UU表示设备地址的从设备被驱动占用,卸载对应的驱动后,UU就会变成数据。-- 表示该地址被检测,但是没有应答。

 i2cset:设置i2c设备单个寄存器的值,看几个命令:

i2cset -y -f 0 0x57 0x00 0x10
i2cset -y -f 0 0x57 0x01 0x11
i2cset -y -f 0 0x57 0x02 0x12
i2cset -y -f 0 0x57 0x03 0x13

下面以i2cset -y -f 0 0x57 0x00 0x10为例进行分析
参数含义:
-y 取消交互模式,直接执行命令
-f 强制访问该设备
0 表示i2c总线编号
0x57 表示i2c设备地址
0x00 表示寄存器地址
0x10 表示待写入的值
i2cget:查看i2c设备单个寄存器的值,看几个命令:

i2cget -y -f 0 0x57 0x00

以 i2cget -y -f 0 0x57 0x00为例进行分析,参数含义:
-y 取消交互模式,直接执行命令
-f 强制访问该设备
0 表示i2c总线编号
0x57 表示i2c设备地址
0x00 表示寄存器地址

 i2cdump:查看i2c设备所有寄存器的值,看以下命令:

i2cdump -y -f 1 0x32

参数含义:
-y 取消交互过程,直接执行命令
-f 强制访问该设备
1 表示i2c总线编号
0x32 表示i2c设备地址

其他资源

Linux内核i2c-tools命令

i2c-tools工具的安装和使用简单介绍-电子发烧友网

https://www.cnblogs.com/ITY996/p/16894380.html

https://www.cnblogs.com/liuwanpeng/p/7346558.html

Linux下I2C-tools工具使用_i2cdetect_深海带鲤鱼的博客-CSDN博客 

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

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

相关文章

SpringCloudAlibaba微服务实战系列(三)Sentinel1.8.0+流控

SpringCloudAlibaba–Sentinel Sentinel被称为分布式系统的流量防卫兵,是阿里开源流量框架,从服务限流、降级、熔断等多个纬度保护服务。Sentinel同时提供了简洁易用的控制台,可以看到接入应用的秒级数据,并可以在控制台设置一些…

北航投资已投企业四象科技成功发射三颗卫星

1箭4星!2023年7月23日10时50分,我国在太原卫星发射中心使用长征二号丁运载火箭,成功将四象科技“矿大南湖号”SAR遥感卫星、“虹口复兴号”光学遥感卫星、“中电农创号”热红外遥感卫星以及银河航天灵犀03星共4颗卫星发射升空,卫星…

C语言中的函数(超详细)

C语言中的函数(超详细) 一、函数概述二、C语言中函数的分类1.库函数2.自定义函数三、函数的参数1.实际参数(实参)2.形式参数(形参)四、函数的调用1.传值调用2.传址调用五、函数的嵌套调用和链式访问1.嵌套调…

人机交互与人机混合智能的区别

人机交互和人机融合智能是两个相关但不完全相同的概念: 人机交互是指人与计算机之间的信息交流和互动过程。它关注的是如何设计和实现用户友好的界面,以便人们能够方便、高效地与计算机进行沟通和操作。人机交互通常强调用户体验和界面设计,旨…

基于Java+SpringBoot+vue前后端分离新闻推荐系统设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

第五章 传输层

第五章 传输层 5.1 运输层的功能 运输层功能: 运输层为应用进程之间提供 端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。 运输层还要对收到的报文进行差错检测。 运输层提供面向连接和无连接的服务 ​ 从通信和信息处理的角度看…

linux V4L2子系统——v4l2架构(1)之整体架构

概述 V4L(Video for Linux)是Linux内核中关于视频设备的API接口,涉及视频设备的音频和视频信息采集及处理、视频设备的控制。V4L出现于Linux内核2.1版本,经过修改bug和添加功能,Linux内核2.5版本推出了V4L2&#xff08…

基于包围框回归的目标检测网络原理及Tensorflow实现

对象检测是对图像内的对象进行分类和定位。 换句话说,它是图像分类和对象定位的结合。 构建用于图像分类的机器学习模型更简单,我在我的一篇文章中对此进行了描述。 然而,图像分类器无法准确判断对象在图像内的位置。 为了实现这一目标&#…

全光谱对眼睛视力好不好?全光谱对眼睛的影响

什么是全光谱?全光谱指的是光谱中包含紫外光、可见光、红外光的光谱曲线,并且在可见光部分中红绿蓝的比例与阳光近似,显色指数Ra接近于100的光谱。与普通LED相比,全光谱LED光谱更加连续,色域更广泛。简单来说&#xff…

【javaSE】初识Java

目录 Java是什么 Java语言发展简史 初识Java的main方法 运行Java程序 JDK、JRE、JVM之间的关系 Java中的标识符 Java是什么 Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义. 不仅如此,Java还是一个有一系列计算机软件和规…

K8s使用Ceph作为后端存储

Ceph概述 部署Ceph集群 Ceph存储使用 Pod使用Ceph持久化数据 Ceph监控 Rook部署Ceph Ceph概述 Ceph介绍 Ceph架构 Ceph核心概念 Ceph介绍 Ceph是一个开源的分布式存储系统,具有高扩展性、高性能、高可靠性等特点,提 供良好的性能、可靠性和可扩展性。…

2023 数字生态发展大会,和鲸 ModelWhale 入选中国信通院“铸基计划”《高质量数字化转型产品及服务全景图》

7月27日,由中国信通院主办的“2023数字生态发展大会”暨中国信通院“铸基计划”年中会议在北京召开。本次大会重磅发布了《高质量数字化转型产品及服务全景图(2023)》,和鲸科技旗下数据科学协同平台 ModelWhale 成功入选&#xff…

【论文阅读】DEPIMPACT:反向传播系统依赖对攻击调查的影响(USENIX-2022)

Fang P, Gao P, Liu C, et al. Back-Propagating System Dependency Impact for Attack Investigation[C]//31st USENIX Security Symposium (USENIX Security 22). 2022: 2461-2478. 攻击调查、关键边、入口点 开源:GitHub - usenixsub/DepImpact 目录 1. 摘要2. 引…

深度学习入门教学——神经网络

深度学习就是训练神经网络。 1、神经网络 举个最简单的例子,以下是一个使用线性回归来预测房屋价格的函数。这样一个用于预测房屋价格的函数被称作是一单个神经元。大一点的神经网络,就是将这些单个神经元叠加起来。例如:神经网络根据多个相…

如何往MySQL中插入100万条数据?

需求 现在有一个 数据量 为100万的数据样本 100w_data.sql 其数据格式如下,截取最后十条数据 999991,XxGdnLZObA999991,XxGdnLZObA,XxGdnLZObA,2020-3-18,1 999992,TBBchSKobC999992,TBBchSKobC,TBBchSKobC,2020-9-8,2 999993,rfwgLkYhUz999993,rfwgLkYhUz,rfwgLk…

重发布及路由策略

目录 重发布 作用 条件 规则 名词解释点 点 向 单点重发布 双点重发布 路由策略 控制层流量和数据层流量 抓流量 ACL列表 前缀列表( ip-prefix) 实例演示 做策略 过滤策略(过滤器-策略) 路由策略(route-policy) 基本配置 路由策略使用 配置实验 重发布 在…

3、线性数据结构

线性数据结构,从名字可以看出,和“线”脱离不了关系。 那么从“线”联想,水平的,我们可以想到食堂打饭排的队伍,垂直的,我们可以联想到书桌上层叠摆放的书籍。 打饭的队伍一般遵循“先来先服务”的原则&a…

低成本32位单片机空调内风机方案

空调内风机方案主控芯片采用低成本32位单片机MM32SPIN0230,内部集成了具有灵动特色的电机控制功能:高阶4路互补PWM、注入功能的高精度ADC、轨到轨运放、轮询比较器、32位针对霍尔传感器的捕获时钟、以及硬件除法器和DMA等电机算法加速引擎。 该方案具有…

Windows 不同方式打开的cmd/dos窗口属性配置不同

文章目录 1. 默认值(控制台窗口)属性2. "C:\Windows\System32\cmd.exe" 属性3. "命令提示符"属性4. 自定义某标题cmd窗口属性5. cmd快捷方式的属性总结 最近在写某个批处理脚本时,意外发现 Windows系统中,在不…

通过cmake工程生成visual studio解决方案

1、前言 visual studio是一个很强大的开发工具,这个工具主要是通过解决方案对我们的源码进行编译等操作。但是我们很多时候拿到的可能并不是一个直接的解决方案,可能是是一个cmake工程,那么这个时候我们就需要通过cmake工程生成解决方案&…