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

<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.mzph.cn/news/4074.shtml

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

相关文章

MySQL 第七天作业 nosql作业

作业一:string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作命令 1、 string类型数据的命令操作: (1) 设置键值: set key1 re…

Spring Boot集成Redisson实现分布式锁

Spring Boot集成Redisson实现分布式锁 在分布式系统中,为保证数据的一致性和并发访问的安全性,我们经常会使用分布式锁来协调多个节点之间对共享资源的访问。Redisson是一个基于Redis的Java驻内存数据网格(In-Memory Data Grid)和…

centos 安装pyzbar

需求: 运行程序报错 ImportError: Unable to find zbar shared library 进程: 直接使用yum 安装 yum install python-devel && yum install zbar-devel 有时候会能成功,大多数时候python-devel 能成功但是 zbar-devel 会失败 下载…

TCP四次挥手过程

TCP 断开连接是通过四次挥手方式。 双方都可以主动断开连接,断开连接后主机中的「资源」将被释放, 刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求,过程如下图: 第一次挥手:客户端打算关闭…

Ae 效果:CC Mr. Smoothie

风格化/CC Mr. Smoothie Stylize/CC Mr. Smoothie CC Mr. Smoothie(平滑先生)效果可以从一个图层上的两个点进行颜色采样,并将这个两点之间的颜色重映射到另一个图层上,可通过控制重映射的平滑度从而创建迷幻的外观效果。 ◆ ◆ …

JVM中的堆和栈到底存储了什么

JVM数据区 先上一张Java虚拟机运行时数据区中堆、栈以及方法区存储数据的概要图,如下所示: 然后我们来具体解析一下堆和栈 堆 堆是存储时的单位,对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享&#…

基于 ChatGPT 的 helm 入门

1. 写在最前面 公司最近在推业务上云(底层为 k8s 管理),平台侧为了简化业务侧部署的复杂度,基于 helm 、chart 等提供了一个发布平台。 发布平台的使用使业务侧在不了解 helm 、chart 等工具的时候,「只要点点」就可…

在DELL/HP server的UEFI mode下指定ISO安装Ubuntu

1.重启系统 在蓝色界面出现提示后选择F2进入 然后保存设置即可 下面是惠普server的iol5界面 输入f9进入system utilities 选择ISO 选择reset

微服务系列文章 之 SpringCloud中遇到的一些bug

1、There was a problem with the instance info replicator 错误原因: 该服务尝试将自己作为客服端注册解决办法: 在application.yml配置文件中,设置 # 注册Eureka服务 eureka:client:# Eureka服务注册中心会将自己作为客户端来尝试注册它自…

Django实现接口自动化平台(十四)测试用例模块Testcases序列化器及视图【持续更新中】

相关文章: Django实现接口自动化平台(十三)接口模块Interfaces序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客 本章是项目的一个分解,查看本章内容时,要结合整体项目代码来看: python django…

Debian 12上如何关闭nobody共享文件夹,一个能让INSCODE AI 创作助手不知所措的小问题

这个问题之前在Debian 10和11上都没有遇到过,换上Debian 12后Samba的设置就出现了状况,装上Samba后什么都没有设置就在局域网可以看到: 根据之前的经验在/etc/samba/smb.conf里查了很久也没有看出所以然来,后来又问了INSCODE AI…

Waves 14 Complete对Mac和Windows系统的最低要求

Waves 14 Complete是一款功能齐全的音频编辑软件,适用于音乐制作、音频工程和声音设计等领域。它提供了一系列强大的工具和效果,帮助用户在音频处理过程中实现专业水平的效果和混音。 Waves 14 Complete包含了多个实用的插件,如均衡器、压缩…

【100天精通python】Day5:python 基本语句,流程控制语句

目录 1. 条件语句 1.1 if语句 1.2 if-else语句 1.3 if-elif-else语句 2 循环语句 2.1 for循环 2.2 while循环: 3 跳转语句 3.1 break语句 3.2 continue语句 3.3 pass语句 4 异常处理语句(try-except语句) 5 语句嵌套 5.1 条…

unity 调用C++ dll 操作升级套娃函数调用

之前一直以为C生成dll,在unity中调用时要把传出去的值设置在主函数中,以参数或反回值的形式。 当然在DLL工程中可以说没有主函数,那个可以运行一个函数,其会调用其他函数从而一直调其他相关函数。 那问题是在层级是二或三------…

前端工程中的设计模式应用

本文旨在系统性介绍一下23种设计模式,给出通俗易懂的案例、结构图及代码示例,这也是我自身学习理解的过程。或许其中的几种设计模式写的并不是很清晰明了易懂,更详细的可根据提到的参考文献进行深入学习。 什么是设计模式 设计模式这个概念是…

Java解决new date出现的时区问题(差8小时)

1、设置当前时区 SimpleDateFormat format new SimpleDateFormat("yyyy/MM/dd"); format.setTimeZone(TimeZone.getTimeZone("GMT8:00")); 2、设置全局时区 创建一个全局配置类,用于配置项目全局时区。 这样就不用专门在各个地方设置时区了…

干货!3个技巧让你轻松增强客户实时聊天的体验感

在当今竞争激烈的商业环境中,提供出色的客户服务成为企业成功的关键要素之一。尤其是在实时聊天平台上,为客户提供优质的体验感,对于建立良好的客户关系和提高销售转化率至关重要。如果你还在苦恼如何增强用户体验感,苦恼如何增加…

剑指offer刷题笔记--Num51-60

1--数组中的逆序对&#xff08;51&#xff09; 主要思路&#xff1a; 基于归并排序&#xff0c;视频讲解参考&#xff1a;数组中的逆序对 #include <iostream> #include <vector>class Solution { public:int reversePairs(std::vector<int>& nums) {if(…

iOS-Block

Blocks的学习 Block的分类 Block根据其类型可以分为三类&#xff1a; 全局Block&#xff08;NSGlobalBlock&#xff09;栈Block&#xff08;NSMallocBlock&#xff09;堆Block&#xff08;NSStackBlock&#xff09; 而其区分的规则为&#xff1a; 如果没有引用局部变量&…

arping命令 ip地址冲突检测 根据ip查mac地址

arping命令介绍 arping 命令主要用来获取ip对应的mac地址&#xff0c;更新本地arp缓存表。平时主要用来探测ip地址是否冲突即同一个网络里&#xff0c;同一个ip不同mac地址的情况。ip地址冲突将导致网络故障。 arping常用命令参数 arping [参数] ip -U 强制更新邻近主机的a…