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

这篇具有很好参考价值的文章主要介绍了<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工具使用,Linux开发工具,linux,驱动开发,arm开发
笔者选择了4.3版本,如下:
<Linux开发> linux开发工具-之-I2C TOOLS工具使用,Linux开发工具,linux,驱动开发,arm开发
下载得到的是一个源码包。
<Linux开发> linux开发工具-之-I2C TOOLS工具使用,Linux开发工具,linux,驱动开发,arm开发
读者根据自己想要的版本下来即可,下载完成后使用如下命令解压:

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

解压后内容如下:
<Linux开发> linux开发工具-之-I2C TOOLS工具使用,Linux开发工具,linux,驱动开发,arm开发

三 编译I2C工具源码

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

下载i2c-tools并解压后如下图:
<Linux开发> linux开发工具-之-I2C TOOLS工具使用,Linux开发工具,linux,驱动开发,arm开发
使用编辑工具打开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工具使用,Linux开发工具,linux,驱动开发,arm开发
第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工具使用,Linux开发工具,linux,驱动开发,arm开发
可看到输出内容,在tools目录下生成我们所需要的工具文件。

进入tools目录查看文件信息;
<Linux开发> linux开发工具-之-I2C TOOLS工具使用,Linux开发工具,linux,驱动开发,arm开发
使用file命令可查看文件属性,可看出 生成的i2cset是 32位,ARM的可执行文件。

如果是用64位交叉编译则是如下图:
<Linux开发> linux开发工具-之-I2C TOOLS工具使用,Linux开发工具,linux,驱动开发,arm开发

编译得到的工具文件有: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

<Linux开发> linux开发工具-之-I2C TOOLS工具使用,Linux开发工具,linux,驱动开发,arm开发
所查询的两个I2C控制器 与设备树中描述一致。
<Linux开发> linux开发工具-之-I2C TOOLS工具使用,Linux开发工具,linux,驱动开发,arm开发

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

i2cdetect -r -y 1

<Linux开发> linux开发工具-之-I2C TOOLS工具使用,Linux开发工具,linux,驱动开发,arm开发

其中:
1:表示检测i2c-1上的挂载情况
检测i2c-0上的挂载情况
<Linux开发> linux开发工具-之-I2C TOOLS工具使用,Linux开发工具,linux,驱动开发,arm开发

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

i2cdump -f -y 0 0x1e

其中 :
0: 表示I2C-0这个总线;
0x1e:表示总线上 设备地址为0x1e的这个设备;
<Linux开发> linux开发工具-之-I2C TOOLS工具使用,Linux开发工具,linux,驱动开发,arm开发

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工具使用,Linux开发工具,linux,驱动开发,arm开发
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工具使用,Linux开发工具,linux,驱动开发,arm开发

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

五 总结

善于使用工具可以有效提交我们测试验证外设的可用性 和错误性。帮助我们快速开发外设使用。文章来源地址https://www.toymoban.com/news/detail-586559.html

到了这里,关于<Linux开发> linux开发工具-之-I2C TOOLS工具使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux在应用层上使用I2C

    通常情况下i2c读写一般是在kernel中使用,但是在应用层上一样可以使用。在应用上可以通过读写/dev/i2c-x这个节点从而控制i2c接口进行读写数据。 通常一个SOC有多个I2C控制器,假设有这个SOC有3个控制器,我们会在/dev目录下看到i2c-0、i2c-1、i2c-2,计数从0开始。 1.首先使用的时

    2024年02月02日
    浏览(31)
  • 详解AT24CXX驱动开发(linux platform tree - i2c应用)

    目录 概述 1 认识AT24Cxx 1.1 AT24CXX的特性 1.2 AT24CXX描述 1.2.1 引脚 1.2.2 容量描述 1.2.3 设备地址 1.3 操作时序 1.3.1 写单个字节时序 1.3.2 写page字节时序 1.3.3 读取当前数据时序 1.3.4 随机读取数据 1.3.5 连续读取多个数据 2 驱动开发 2.1 硬件接口 2.2 代码实现 2.2.1 查看设备信息 2.2.2 编写

    2024年02月22日
    浏览(33)
  • linux i2c驱动开发之最简单入门:设备树与驱动的匹配

    1在设备树中声明我们的模拟I2C设备: i2c的设备加入是必须放在某个i2c的总线下面的,我们这里是放在 i2c7下面。 可以直接在设备树搜索i2c7,然后把status 修改为okay,然后再加入设备信息. 这里我们指定和驱动匹配的字符串是 myi2c-dev,在bus segment 上分配的地址是 0x70 。 当然这

    2024年02月16日
    浏览(32)
  • I2C知识大全系列四 —— I2C驱动之Linux下的I2C

    Linux 系统定义了 I2C 驱动体系结构。在 Linux 系统中, I2C 驱动由三部分组成,即 I2C 核心 、 I2C 总线驱动 和 I2C 设备驱动 。这三部分相互协作,形成了非常通用、可适应性很强的 I2C 框架。 I2C核心 I2C 核心提供了 I2C 总线驱动 和 设备驱动 的 注册 、 注销方法 , I2C 通信方法

    2024年02月07日
    浏览(37)
  • Linux设备驱动开发学习笔记(等待队列,锁,字符驱动程序,设备树,i2C...)

    container_of函数可以通过结构体的成员变量检索出整个结构体 函数原型: 内核开发者只实现了循环双链表,因为这个结构能够实现FIFO和LIFO,并且内核开发者要保持最少代码。 为了支持链表,代码中要添加的头文件是linux/list.h。内核中链表实现核心部分的数据结构 是struct li

    2024年01月22日
    浏览(38)
  • Linux Kernel 4.19+内核使用GPIO模拟I2C的方法

    1.修改内核配置文件,使内核支持GPIO模拟I2C 2.对应的dts里面增加GPIO模拟I2C的设备树 编译后烧写,会发现/dev下多了一个i2c总线,多出来的那个就是了。

    2024年02月16日
    浏览(34)
  • 【分析笔记】Linux I2C-Tools 使用踩坑笔记

    在调试 I2C 器件时,我一般习惯于使用 i2cdetect 工具来确认芯片是否有应答,通常有应答之后,就会开始着手移植或者编写对应的驱动程序,但是在调试 sgp41 传感器时却不灵了。 在连续完成多个 I2C 器件的调试和驱动开发之后,最后一个 sgp41 传感器却一直无法被检测到。在使

    2024年02月06日
    浏览(29)
  • Linux I2C 驱动实验

    目录 一、Linux I2C 驱动简介 1、I2C 总线驱动 2、I2C 设备驱动 1、 i2c_client 结构体 2、 i2c_driver 结构体 二、硬件分析 三、设备树编写 1、pinctrl_i2c1 2、在 i2c1 节点追加 ap3216c 子节点 3、验证 四、 代码编写 1、makefile 2、ap3216c.h  3、ap3216c.c ①、头文件 ②、驱动出入口  ③、 i2c驱动

    2024年02月08日
    浏览(41)
  • 【IMX6ULL驱动开发学习】10.Linux I2C驱动实战:AT24C02驱动设计流程

    前情回顾:【IMX6ULL驱动开发学习】09.Linux之I2C框架简介和驱动程序模板_阿龙还在写代码的博客-CSDN博客 目录 一、修改设备树(设备树用来指定引脚资源) 二、编写驱动 2.1 i2c_drv_read 2.2 i2c_drv_write 2.3 完整驱动程序 三、上机测试 放在哪个I2C控制器下面 AT24C02的I2C设备地址(查

    2024年02月11日
    浏览(36)
  • Linux I2C驱动分析2 - 通过设备树添加设备

    一. I2C通过设备树添加设备         通过设备可以向I2C总线添加I2C设备,设备树举例如下:         设备树中在I2C总线下添加了一个oled0.98设备,oled在I2C总线中的地址为0x3c。可以在/sys/bus/platform下看到这个设备。 二. I2C驱动代码 三. I2C应用代码         以上的代码功能是首

    2024年02月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包