<Linux开发> linux开发工具-之-I2C TOOLS工具使用

news2024/11/22 14:51:58

<Linux开发> linux开发工具-之-I2C TOOLS工具使用

<Android开发> Android开发工具- 之-I2C TOOLS工具使用
<Linux开发>驱动开发 -之- Linux I2C 驱动

一 前言

在笔者的另一篇文章 <Android开发> Android开发工具- 之-I2C TOOLS工具使用讲解过,如何在android上使用I2C TOOLS工具。本文主要是分析如何在linux开发板上使用I2C TOOLS工具,整体使用和android基本一致,差一点主要在编译这一块。毕竟不同项目编译还是有一定差异的;接下来我们就来看看如何将I2C TOOLS工具移植到linux开发板上。

二 获取I2C工具源码

下载地址:I2C_TOOLS
打开后如下:
在这里插入图片描述
笔者选择了4.3版本,如下:
在这里插入图片描述
下载得到的是一个源码包。
在这里插入图片描述
读者根据自己想要的版本下来即可,下载完成后使用如下命令解压:

tar -xvf i2c-tools-4.3.tar.gz

解压后内容如下:
在这里插入图片描述

三 编译I2C工具源码

前面获取得到源码后,我们就需要使用交叉编译工具,进行编译,然后将编译后生成的执行文件放到设备中,即可。
整体的流程其实和平常Linux开发的流程基本是一样的。
接下来我们看看如何编译i2c-tools。

下载i2c-tools并解压后如下图:
在这里插入图片描述
使用编辑工具打开Makefile文件,笔者使用vscode。
打开后根据Linux板子的类型选择32位还是64位的交叉编译工具。然后新增以下内容:

32位设备添加:

bindir	+= /usr/local/arm/gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf/bin
ARCH = arm
CC =   arm-linux-gnueabihf-gcc

64位设备添加:

bindir	+= /usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
ARCH = arm
CC =  aarch64-linux-gnu-gcc

在这里插入图片描述
第28行:指定包含交叉工具的路径,交叉编译工具下载:linaro;下载后解压到指定目录下;笔者使用“tar -xvf gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf.tar.xz -C /usr/local/arm”解压到该目录。

第29行:执行架构,Linux开发板,当然是arm了;

第30行:指定gcc编译工具,这里指向交叉编译工具。即 /usr/local/arm/gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc

第33行:指定包含交叉工具的路径,交叉编译工具下载:linaro;下载后解压到指定目录下;笔者使用“tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /usr/local/arm”解压到该目录。

第34行:执行架构,Linux开发板,当然是arm了;

第35行:指定gcc编译工具,这里指向交叉编译工具。即 /usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc

添加好编译参数后,打开终端,并执行"make",如下:
在这里插入图片描述
可看到输出内容,在tools目录下生成我们所需要的工具文件。

进入tools目录查看文件信息;
在这里插入图片描述
使用file命令可查看文件属性,可看出 生成的i2cset是 32位,ARM的可执行文件。

如果是用64位交叉编译则是如下图:
在这里插入图片描述

编译得到的工具文件有:i2cdetect、i2cset、i2cdump、i2cget、i2ctransfer这几个工具文件,我们将这几个文件放到设备中即可使用。

四 I2C工具使用

3.1 准备工具文件

将2cdetect、i2cset、i2cdump、i2cget、i2ctransfer这几个工具文件放到设备中,我们将其放到系统bin目录下;以及libi2c.so,命令如下:

//移植执行文件
cd i2c-tools-4.3/tools
cp i2cdetect ../../../nfs/buildrootfs/bin/
cp i2cset ../../../nfs/buildrootfs/bin/
cp i2cdump ../../../nfs/buildrootfs/bin/
cp i2cget ../../../nfs/buildrootfs/bin/
cp i2ctransfer ../../../nfs/buildrootfs/bin/

//移植libi2c.so
cd ../lib
cp libi2c.so ../../../nfs/buildrootfs/lib/
cp libi2c.so.0 ../../../nfs/buildrootfs/lib/
cp libi2c.so.0.1.1 ../../../nfs/buildrootfs/lib/

3.2 i2c-tool使用测试

本次测试是基于I.MX6ULL平台验证。笔者设备上i2c-0挂了一个三合一环境传感器:AP3216C,详细可查看:<Linux开发>驱动开发 -之- Linux I2C 驱动

1)用i2cdetect检测有几组i2c总线在系统上
命令:

i2cdetect -l

在这里插入图片描述
所查询的两个I2C控制器 与设备树中描述一致。
在这里插入图片描述

2)用i2cdetect检测挂载在i2c-1总线上器件,
命令:

i2cdetect -r -y 1

在这里插入图片描述

其中:
1:表示检测i2c-1上的挂载情况
检测i2c-0上的挂载情况
在这里插入图片描述

3)用i2cdump查看器件所有寄存器的值,这个命令可以查看器件所有寄存器的值,在实际测试时很好用
命令:

i2cdump -f -y 0 0x1e

其中 :
0: 表示I2C-0这个总线;
0x1e:表示总线上 设备地址为0x1e的这个设备;
在这里插入图片描述

4)用i2cset来设置单个寄存器值
命令:

i2cset -f -y 0 0x1e 0x00 0x04   //复位器件
i2cset -f -y 0 0x1e 0x00 0x03   //启动三合一环境传感器转换

其中 :
0: 表示I2C-0这个总线;
0x1e:表示总线上 设备地址为0x1e的这个设备;
0x00:操作的寄存器地址
0x04:当前操作的寄存器到写入的值

进行上述配置后传感器会启动数据转换,接着使用“i2cdump -f -y 0 0x1e”查看转换后的数据即可,如下:
在这里插入图片描述
0X0A 0X0B 寄存器:红外线强度(IR)、0x0C 0X0D寄存器:环境光强度(ALS)、0X0E 0X0F寄存器:接近距离(PS) 这三个环境参数。

4)用i2cget来获取单个寄存器值
命令:

i2cget -f -y 0 0x1e 0x0A
i2cget -f -y 0 0x1e 0x0B
i2cget -f -y 0 0x1e 0x0C
i2cget -f -y 0 0x1e 0x0D
i2cget -f -y 0 0x1e 0x0E
i2cget -f -y 0 0x1e 0x0F

其中 :
0: 表示I2C-0这个总线;
0x1e:表示总线上 设备地址为0x1e的这个设备;
0x0A:操作的寄存器地址

在这里插入图片描述

5)i2ctransfer 使用,i2ctransfer支持16位/32位寄存器的读写,i2cset和i2cget只能读取8位的寄存器。所以i2ctransfer可以替代i2cset和i2cget
(1) 往i2c-0上0x1E器件 0x0000寄存器 写0x01

$i2ctransfer -f -y 0 w3@0x1E 0x00 0x00 0x01

(2) 在i2c-0上0x1E器件 0x000A寄存器 读取6个字节数据

i2ctransfer -f -y 0 w2@0x1E 0x00 0x0A r6

因为笔者使用的外设是8位寄存器的所以就没有演示了。

五 总结

善于使用工具可以有效提交我们测试验证外设的可用性 和错误性。帮助我们快速开发外设使用。

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

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

相关文章

行为树(BEHAVIOR TREES)及其工业应用

顾名思义,行为树是描述事物(人,动物,机器人,虚拟角色等等)行为的树形结构。游戏行业使用行为树为角色行为建模。现在行为树建模技术正在向其它领域渗透,比如工业产线编排,机器人控制…

UKF无损卡尔曼滤波

摘要——卡尔曼滤波器为估计工程系统的状态提供了一项重要技术。由于非线性卡尔曼滤波器有多种变体,因此缺乏针对特定研究和工程应用的滤波器选择指南。 这就需要深入讨论不同非线性卡尔曼滤波器的复杂性。 实际状态估计应用特别感兴趣的是扩展卡尔曼滤波器 (EKF) 和…

五、DQL-1.概述

一、DQL介绍 Data Query Language 数据查询语言 用来查询数据库中表的记录。 查询关键字:SELECT 二、语法

TortoiseGit 入门指南11:还原与重置

Git 就像个时光机器,能让我们还原到任何提交。 还原未提交的更改 假如我们在查看一个干净的代码仓库,干净意味着工作区中的文件保持着最后一次提交的状态,没有修改。在查看的过程中,我们有意或无意的修改了工作区中的文件&#…

《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(4)-Charles如何设置捕获会话

1.简介 前边几篇宏哥介绍了Charles界面内容以及作用。今天宏哥就讲解和分享如何设置Charles后,我们就可以愉快地捕获会话,进行抓包了。因为上一篇许多小伙伴看到宏哥的Charles可以分开看到request和response,而自己的却看不到,因…

WEB:FlatScience

背景知识 sql注入 SQLite数据库知识 SQLite3注入方法 题目 用dirsearch进行扫描,下面几个关键目录:robots.txt,login.php,admin.php,剩下的目录就是一些pdf格式的论文了 一个一个访问并查看源代码,在查看l…

23款奔驰S400豪华型升级4D旋转高音,提升车内氛围

奔驰加装4D旋转高音,让高音“有型有色”,高端4D环绕立体声音响系统的视觉效果同样令人印象深刻:系统启动时,安装在前车门后视镜三角板中的两个高音头会与同色车内氛围灯一块亮起,同时向外旋出10mm至最佳效果位置,以提高…

【AutoGluon_01】自动机器学习框架的安装与示例

文章目录 一、安装二、示例一 AutoGluon预测目标数据1、导入数据2、训练3、预测4、评估5、小结 三、示例二 AutoGluon多模态预测(Multimodal Prediction)1、导入数据2、训练3、预测4、评估 四、示例三 AutoGluon进行时间序列预测1、导入数据2、训练3、预…

【redis】redis管道简述

redis管道可以一次性发送多条命令。 命令示例如下: [xxxlocalhost ~]$ echo -e "set k4 99\nincr k4\nget k4" | nc localhost 6379 \OK :100 $3 100下面先简述一下这条命令的组成,再简述一下管道的常用场景和注意事项。 首先,|是…

跨越山海,爱在滇西|拓数派为滇西孩子点亮科学梦想

近日,拓数派在共青团浙江大学委员会、景东县教育体育局和景东团县委等单位指导下开展“爱在滇西”2023年公益助学活动,并携手浙大国际科创中心、浙大微纳电子学院、启真科技控股公司和北京德恒律所共同向景东浙大求是中学捐赠爱心助学金,用于…

微信小程序的目录解析--【浅入深出系列002】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择先说总目录经常碰到的文件(目录)最最常见的目录pages次最常用的就是images 目录 操作起来真正的操作 配套资源 本系列校训 用免费公开视频,卷…

OpenCVForUnity(八)文本与随机数

文章目录 前言putText (绘制文本)randn (正态分布随机数)randu(均匀分布随机数)randShuffle (数组随机重排)结语 前言 本教程将介绍如何使用随机数生成器类RNG以及从均匀分布中获取随…

LIMA:小规模监督数据指令微调

论文标题:LIMA: Less Is More for Alignment 论文链接:https://arxiv.org/abs/2305.11206 论文来源:Meta AI 一、概述 语言模型在大规模语料上以预测下一个token的方式预训练,使它们能够学习可迁移到几乎任何语言理解或生成任务的…

让小程序动起来-轮播图的两种方式--【浅入深出系列003】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择啥是轮播图轮播图的关键代码最常见的轮播图代码便于理解的轮播代码两种轮播代码的比较 实际操练第一步,就是找到文件。第二步,先改动一下最显眼…

全源最短路Johnson算法

最短路Johnson算法( O ( n m l o g m ) O(nmlogm) O(nmlogm)) 可以求任意两点最短路, 新图的边权改造为: w ( x , y ) h ( x ) − h ( y ) w(x,y)h(x)-h(y) w(x,y)h(x)−h(y) 构造的新图 d 1 ( x , y ) d ( x , y ) h ( x ) − h ( y ) d1(x,y)d(x,y…

java学习02

一、基本数据类型 Java有两大数据类型,内置数据类型和引用数据类型。 内置数据类型 Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 byte&#xff1…

leetcode:704. 二分查找(python3解法)

难度:简单 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9…

人工智能发展前夜,基于控制论的杂谈

谢邀。 目录 《What the Frogs Eye Tells the Frogs Brain?》简介我是怎么理解这篇文章的?被后世频繁引用的「青蛙」从「青蛙」再重新转向控制论 《What the Frog’s Eye Tells the Frog’s Brain?》简介 帕斯克在实践和理论中,将人类的适应性行为引入…

集成算法的参数空间与网格优化

目录 1. 探索参数空间 1.1 学习曲线 1.2. 决策树对象Tree 2. 使用网格搜索在随机森林上进行调参 1. 探索参数空间 随机森林集成算法的超参数种类繁多、取值丰富,且参数之间会相互影响、共同作用于算法的最终结果,因此集成算法的调参是一个难度很高的过…

JavaSwing+MySQL的聊天系统设计

点击以下链接获取源码: https://download.csdn.net/download/qq_64505944/88055544 JDK1.8、MySQL5.7 功能:类似于QQ软件的聊天系统,可以进行登录注册聊天发信息等功能