<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
打开后如下:
<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第1张图片
笔者选择了4.3版本,如下:
<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第2张图片
下载得到的是一个源码包。
在这里插入图片描述
读者根据自己想要的版本下来即可,下载完成后使用如下命令解压:

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

解压后内容如下:
<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第3张图片

三 编译I2C工具源码

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

下载i2c-tools并解压后如下图:
<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第4张图片
使用编辑工具打开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

<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第5张图片
第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",如下:
<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第6张图片
可看到输出内容,在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控制器 与设备树中描述一致。
<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第7张图片

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

i2cdetect -r -y 1

<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第8张图片

其中:
1:表示检测i2c-1上的挂载情况
检测i2c-0上的挂载情况
<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第9张图片

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

i2cdump -f -y 0 0x1e

其中 :
0: 表示I2C-0这个总线;
0x1e:表示总线上 设备地址为0x1e的这个设备;
<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第10张图片

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”查看转换后的数据即可,如下:
<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第11张图片
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:操作的寄存器地址

<Linux开发> linux开发工具-之-I2C TOOLS工具使用_第12张图片

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位寄存器的所以就没有演示了。

五 总结

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

你可能感兴趣的:(Linux开发工具,linux,驱动开发,arm开发)