【I2C】基于Linux移植i2c-tool工具

这篇具有很好参考价值的文章主要介绍了【I2C】基于Linux移植i2c-tool工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 下载i2c-tool工具

i2c-tool工具下载地址:
https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/
i2ctransfer工具,Linux,linux,arm开发

2. 编译i2c-tool源码

因为我这里需要将i2c-tool移植到imx6ull嵌入式平台,所以编译时肯定需要重新指定GCC。查看i2c-tool根目录下的Makefile文件,默认为系统GCC工具编译:

CC  ?= gcc
AR  ?= ar
STRIP   ?= strip

在ubuntu编译i2c-tool源码之前,首先设置imx6ull嵌入式平台的交叉工具链,可以直接在命令行输入如下命令:

export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabihf-
export PATH=$PATH:/opt/ToolChain/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin

make时指定GCC即可:

make CC=arm-none-linux-gnueabihf-gcc AR=arm-none-linux-gnueabihf-ar STRIP=arm-none-linux-gnueabihf-strip USE_STATIC_LIB=1  

添加USE_STATIC_LIB=1是为了静态编译,因为默认为动态编译,运行程序时还需要拷贝libi2c.so。

3. i2cdetect的用法

i2cdetect命令的使用方法:

# ./i2cdetect 
Error: No i2c-bus specified!
Usage: i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST]
       i2cdetect -F I2CBUS
       i2cdetect -l
  I2CBUS is an integer or an I2C bus name
  If provided, FIRST and LAST limit the probing range.

-f:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。
-y:默认输入yes,不再询问用户确认。

  • 列出I2C所有总线
    命令如下:

    ./i2cdetect -l
    

    输出结果如下:
    i2ctransfer工具,Linux,linux,arm开发

  • 列出I2Cx总线上所有的设备
    命令如下:

    ./i2cdetect -y -a 4
    

    输出结果如下:
    i2ctransfer工具,Linux,linux,arm开发

    --表示没有该地址对应的设备,
    UU表示有该设备并且它已经有驱动程序,
    数值表示有该设备但是没有对应的设备驱动

4. i2cdump的用法

i2cdump命令的使用方法:

# ./i2cdump
Error: No i2c-bus specified!
Usage: i2cdump [-f] [-y] [-r first-last] [-a] I2CBUS ADDRESS [MODE [BANK [BANKREG]]]
  I2CBUS is an integer or an I2C bus name
  ADDRESS is an integer (0x08 - 0x77, or 0x00 - 0x7f if -a is given)
  MODE is one of:
    b (byte, default)
    w (word)
    W (word on even register addresses)
    s (SMBus block, deprecated)
    i (I2C block)
    c (consecutive byte)
    Append p for SMBus PEC

-f:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。
-y:默认输入yes,不再询问用户确认。

  • 显示I2C总线上社保的寄存器值
    显示I2C 4号总线上0x30设备的寄存器值,MODE为byte,命令如下:
    ./i2cdump -f -y 4 0x30 b
    
    输出结果如下:
    i2ctransfer工具,Linux,linux,arm开发

5. i2cget的用法

i2cget命令的使用方法:

# ./i2cget
Usage: i2cget [-f] [-y] [-a] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE [LENGTH]]]
  I2CBUS is an integer or an I2C bus name
  ADDRESS is an integer (0x08 - 0x77, or 0x00 - 0x7f if -a is given)
  MODE is one of:
    b (read byte data, default)
    w (read word data)
    c (write byte/read byte)
    s (read SMBus block data)
    i (read I2C block data)
    Append p for SMBus PEC
  LENGTH is the I2C block data length (between 1 and 32, default 32)

-f:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。
-y:默认输入yes,不再询问用户确认。

  • 从某个寄存器里面读取一个byte数据
    从i2c总线4上的0x30设备读取寄存器0x85的值,大小为1byte。默认模式的为b,这里可以省略。命令如下:
    i2cget -f -y 4 0x30 0x85
    
  • 从某个寄存器里面读取一个word数据
    从i2c总线4上的0x30设备读取寄存器0x85的值,大小为1word(1word = 2byte)。命令如下:
    i2cget -f -y 4 0x30 0x85 w
    

6. i2cset的用法

i2cset命令的使用方法:

# ./i2cset 
Usage: i2cset [-f] [-y] [-m MASK] [-r] [-a] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]
  I2CBUS is an integer or an I2C bus name
  ADDRESS is an integer (0x08 - 0x77, or 0x00 - 0x7f if -a is given)
  MODE is one of:
    c (byte, no value)
    b (byte data, default)
    w (word data)
    i (I2C block data)
    s (SMBus block data)
    Append p for SMBus PEC

-f:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。
-y:默认输入yes,不再询问用户确认。

  • 往某个寄存器里面写入一个byte数据
    往i2c总线4上的0x30设备寄存器0x85写入0x23,大小为1byte。默认模式的为b,这里可以省略。命令如下:
    i2cget -f -y 4 0x30 0x85 0x23
    
  • 往某个寄存器里面写入一个word数据
    往i2c总线4上的0x30设备读取寄存器0x85写入0x2345,大小为1word(1word = 2byte)。命令如下:
    ./i2cset -f -y 4 0x30 0x85 0x2345 w
    

7. i2ctransfer的用法

i2cgeti2cset命令使用的是SMBus协议i2ctransfer命令使用的是I2C协议。SMBus是基于I2C协议的,SMBus要求更严格,SMBus是I2C协议的子集。

i2ctransfer使用方法如下:

# ./i2ctransfer 
Usage: i2ctransfer [-f] [-y] [-v] [-V] [-a] I2CBUS DESC [DATA] [DESC [DATA]]...
  I2CBUS is an integer or an I2C bus name
  DESC describes the transfer in the form: {r|w}LENGTH[@address]
    1) read/write-flag 2) LENGTH (range 0-65535, or '?')
    3) I2C address (use last one if omitted)
  DATA are LENGTH bytes for a write message. They can be shortened by a suffix:
    = (keep value constant until LENGTH)
    + (increase value by 1 until LENGTH)
    - (decrease value by 1 until LENGTH)
    p (use pseudo random generator until LENGTH with value as seed)

Example (bus 0, read 8 byte at offset 0x64 from EEPROM at 0x50):
  # i2ctransfer 0 w1@0x50 0x64 r8
Example (same EEPROM, at offset 0x42 write 0xff 0xfe ... 0xf0):
  # i2ctransfer 0 w17@0x50 0x42 0xff-

-f:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。
-y:默认输入yes,不再询问用户确认。

  • 往某个寄存器里面写入多个数据
    往i2c总线4上的0x30设备写入3个byte数据,命令如下:

    i2ctransfer -y -f 4 w3@0x30 0x85 0x01 0x10
    

    具体说明如下:
    i2ctransfer工具,Linux,linux,arm开发

  • 从某个寄存器里面读取多个数据
    往i2c总线4上的0x30设备0x8501寄存器读取3个byte数据,命令如下:

    i2ctransfer -y -f 4 w2@0x30 0x85 0x01 r3
    

    具体说明如下:
    i2ctransfer工具,Linux,linux,arm开发文章来源地址https://www.toymoban.com/news/detail-636452.html

到了这里,关于【I2C】基于Linux移植i2c-tool工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 关于Linux下i2c-tool工具(i2cdetect/i2cget/i2cset/i2ctransfer)及memtool32工具直接操作寄存器的使用

    1. 首先本人是直接下载的i2c-tool和memtool32工具到开发板内直接使用: 2. i2cdetect命令:该命令是用于扫描板卡内i2c总线上的设备 输入./i2cdetect,会出现i2cdetect指令的语法操作说明 参数说明:         参数y:关闭交互模式,使用该参数时,不会提示警告信息。         参

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

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

    2024年02月07日
    浏览(56)
  • 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日
    浏览(52)
  • HNU-电子测试平台与工具2-I2C

    FPGA I2C接口实现 计科210X wolf 202108010XXX 报告内容将包括:     (1)如何描述组合电路、时序电路、状态机?如何编写TestBench?     (2)ModelSim工具的使用;     (3)EEPROM读写代码分析; (4)实验总结; 注意:其中(1)将在自定FSM中以实例的方式呈现,(2)将在(

    2024年04月09日
    浏览(46)
  • 什么是I2C,I2C怎么用,从实例波形分析I2C读写

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 今天分享的主题是I2C通信。接下来从I2C是什么,怎么用,以及以时钟外设读写作为实例进行分析。 I2C(Inter-Integrated Circuit) ,也可以叫IIC、I2C,译作集成电路总线,是 两线式串行通信总线 ,用于设备

    2024年01月19日
    浏览(57)
  • I2C总线 | I2C总线介绍

    目录 I2C 总线 | I2C 总线介绍 I2C 总线介绍 I2C有如下特点: I2C 总线术语 I2C 总线位传输 IIC总线数据传输 1.字节格式 2.应答响应 IIC 总线寻址方式 1.7位寻址 2.10位寻址 快速和高速模式 1.快速模式 2.高速模式 I2C ( Inter - Intergrated Circuit )总线(也称 IIC 或 I2C )是由 PHILIPS 公司开发

    2024年02月04日
    浏览(53)
  • Linux在应用层上使用I2C

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

    2024年02月02日
    浏览(46)
  • Linux驱动开发(I2C系统的重要结构体)

    本篇文章来讲解I2C系统的重要结构体,了解这些结构体对于编写I2C驱动来说是至关重要的,所以要想编写好一个I2C驱动程序那么就必须先了解这些结构体。 这里使用百问网的一张图片来讲解: 一个芯片中可以有多个I2C控制器,并且一个I2C控制器可以控制多个设备。那么在对

    2024年02月07日
    浏览(47)
  • Linux驱动开发之i2c框架讲解到例程

            本篇章在rk3399平台上,基于设备树的i2c驱动开发。i2c直接使用硬件i2c总线,体系结构分为3部分:I2C 核心、I2C 总线驱动和I2C 设备驱动。 I2C 核心 (i2c-core.c)提供了I2C 总线驱动和设备驱动的注册、注销方法等。我们主要了解Linux中i2c的基本框架,分为 i2c主机驱动开发

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

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

    2024年02月14日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包