Linux i2c-tool工具基础使用

一.i2cdetect

i2cdetect 是一个用户空间程序,用于扫描 I2C 总线上的设备。它输出一个表格,其中包含指定总线上检测到的设备列表。以下是 i2cdetect 的使用方法:

  1. 运行扫描

    • 要执行 I2C 扫描,请使用以下命令:
      130|rk3588_s:/ # i2cdetect -y 1
           0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
      00:          -- -- -- -- -- -- -- -- -- -- -- -- --
      10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
      20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
      30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
      40: -- -- UU -- -- -- -- -- -- -- -- -- -- -- -- --
      50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
      60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
      70: -- -- -- -- -- -- -- --
      • -y 标志禁用交互模式,允许扫描无需提示。
      • 1 指定 I2C 总线编号(根据您的设置可能需要调整)
      • UU 表示该地址被驱动占用
      • 以十六进制表示的设备地址编号会显示为 **

二.i2cdump

i2cdump 是一个用于读取 I2C 设备寄存器值的命令行工具。它可以读取指定设备地址的寄存器值,并以十六进制格式显示出来

以下是使用 i2cdump 的示例:

  1. 读取全部寄存器
    • 要读取地址为 0x42 的 I2C 设备的所有寄存器,可以运行以下命令:
      i2cdump -y 1 0x42
      

 三.i2cget

i2cget 是 Linux 系统中的一个命令行工具,用于从 I2C 设备中读取数据。I2C(Inter-Integrated Circuit)是一种串行通信协议,常用于连接各种外设和传感器1

以下是使用 i2cget 的示例:

  1. 读取特定寄存器

    • 要从 I2C 设备读取特定寄存器的值,可以使用以下语法:
      i2cget [-f] [-y] i2cbus chip-address [data-address [mode]]
      
      • -f 标志强制访问设备,即使设备已经忙碌(请谨慎使用)。
      • -y 标志关闭交互模式,对于脚本编写很有用。
      • i2cbus 指定 I2C 总线编号或名称(可通过 i2cdetect -l 列出)。
      • chip-address 是总线上芯片的地址(介于 0x08 和 0x77 之间的整数)。
      • data-address 指定要从该芯片读取的地址(介于 0x00 和 0xFF 之间的整数)。如果省略,将读取当前活动的寄存器。
      • mode(可选)指定读取的大小(例如,b 表示字节,w 表示字,s 表示 SMBus 块,i 表示 I2C 块)。
  2. 示例

    • 要从总线 1 上地址为 0x2d 的 I2C 设备读取地址为 0x11 的 8 位寄存器的值:
      i2cget 1 0x2d 0x11
      
    • 要从总线 1 上地址为 0x48 的 I2C 设备读取地址为 0x00 的 16 位寄存器的值:
      i2cget 1 0x48 0x00 w
      

四.i2cset

i2cset 命令用于向 I2C 设备写入数据。它允许您设置通过 I2C 总线可见的寄存器。以下是如何使用它的方法:

  1. 运行 i2cset 命令

    • 要向 I2C 设备的特定寄存器写入数据,使用以下语法:
      i2cset [-f] [-y] [-m mask] [-r] i2cbus chip-address data-address value [mode]
      
      • -f 标志强制访问设备,即使设备已经忙碌(请谨慎使用)。
      • -y 标志关闭交互模式,对于脚本编写很有用。
      • -m mask(可选)指定要应用的位掩码。
      • -r 标志允许读取寄存器的当前值。
      • i2cbus 指定 I2C 总线编号或名称(可通过 i2cdetect -l 列出)。
      • chip-address 是总线上芯片的地址(介于 0x08 和 0x77 之间的整数)。
      • data-address 指定要写入的芯片地址(介于 0x00 和 0xFF 之间的整数)。
      • value 是要写入的数据值(介于 0x00 和 0xFF 之间的整数)。
      • mode(可选)指定写入的大小(例如,b 表示字节,w 表示字,s 表示 SMBus 块,i 表示 I2C 块)。
  2. 示例

    • 要将值 0x42 写入总线 1 上地址为 0x2d 的 I2C 设备的地址为 0x11 的寄存器:
      i2cset 1 0x2d 0x11 0x42
      
    • 要将值 0xa5 写入总线 2 上地址为 0x31 的 I2C 设备的地址为 0x0107的寄存器:
      i2cset -fy 2 0x31 0x01 0x07 0xa5 i
    • 要将值 0x1234 写入总线 1 上地址为 0x48 的 I2C 设备的地址为 0x00 的寄存器:
      i2cset 1 0x48 0x00 0x1234 w
      

i2ctools是一个用于I2C总线通信的工具包,它提供了一组用于读取和写入I2C设备的命令行工具。其源码主要由C语言编写。 i2ctools的主要功能包括: 1. 通过i2c设备节点文件(如/dev/i2c-0)打开和关闭一个I2C设备连接。 2. 通过发送START、STOP、ACK、NACK等信号控制I2C总线。 3. 发送和接收字节数据,支持读取和写入I2C设备。 4. 支持读取和写入I2C设备寄存器的值。 5. 提供了一些用于设置I2C总线传输速度和其他参数的选项。 6. 支持通过SMbus协议进行I2C通信。 7. 支持对I2C设备进行命名,并提供了一些用于查找和识别I2C设备地址的方法。 i2ctools的源码包括多个文件,其中包括用于解析命令行参数、实现I2C通信协议的函数、用于读写I2C设备寄存器和处理I2C设备连接的函数等。通过阅读源码可以更深入地理解和定制化i2ctools的功能。 在源码中,首先会进行一些初始化操作,如解析命令行参数,打开I2C设备连接等。然后,根据用户的输入执行相应的操作,如读写寄存器、发送数据等。在执行这些操作的过程中,可能会使用I2C通信协议相关的函数来控制I2C总线的信号传输。 总的来说,i2ctools的源码提供了一套实用的工具和函数,使得我们可以通过命令行快速、方便地进行I2C总线通信和与I2C设备的交互。通过阅读和理解源码,可以更好地进行调试、定制和扩展i2ctools的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hmbbPdx_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值