Linux 驱动-i2c工具篇
2026/7/29 9:17:05 网站建设 项目流程

提示:Linux 驱动-i2c工具篇

文章目录

  • 前言
  • 一、资料参考
  • 二、开发工具下载-安装
    • 下载方式
    • 安装
      • 安装-使用思路
      • 下载对应版本-准备安装包
  • 二、工具使用
    • i2cdetect
      • 基础原理
      • (1) i2cdetect -V: 输出版本信息
      • (2) i2cdetect -l: 列出所有的 I2C 总线
      • (3) i2cdetect -F 查询总线上设备支持的功能集
      • (4) i2cdetect -a 扫描总线上 0x00 到 0xFF 范围内的所有 I2C 设备地址
      • (5) 常用核心参数清单
    • i2cdump
      • 底层原理
      • (1) i2cdump -V 查看版本号
      • (2) 读取设备寄存器
      • (3) 指定寄存器范围读取
      • (4) FT5x06 调试标准命令组合
    • i2cset
    • i2cget
    • i2ctransfer
      • 写操作
      • 读操作
  • 总结

前言

i2c 有调试开发工具,利用工具来调试、验证各种问题还是特别有必要的,提高开发效率,查找各种问题。

一、资料参考

RK3568驱动指南|第十五篇 I2C-第180章 I2C Tools工具讲解
可以看看讯为电子提供的开发指导篇,i2c 开发工具的安装、使用。

二、开发工具下载-安装

下载方式

I2C Tools


这里有两种方式,直接下载包和git clone 工具源码的方式进行下载,如下:

如下,我们会用第一种方式,下载对应的版本然后再解压并安装。

安装

安装-使用思路

  • 无论哪种方式得到对应版本的开发工具源码或者压缩包
  • 在Linux 系统中进行解压缩
  • 进入工具包会看到Makefile文件,对工具进行编译生成工具包
  • 把工具包push 到开发板,工具就可以使用了
  • 对于部分开发板,比如讯为开发板,工具本身在系统里面不需要额外的去编译的,但是实际开发中还是需要push 工具到开发板进行开发的

下载对应版本-准备安装包

比如我们下载的是

push 到linux 系统里面并解压:tar -vxf i2c-tools-4.3.tar.xz

进入到工具目录,并编译工具源码,命令:make -B CC=/home/topeet/wfc/RK3568Linux/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc AR=/home/topeet/wfc/RK3568Linux/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar USE_STATIC_LIB=1

注意点,一定要搞清楚自己的预编译工具位置,用全路径。

进入工具的tools目录,就看到编译后生成的工具了。

二、工具使用

i2cdetect

基础原理

i2cdetect作用:扫描一条 I2C 总线上所有 7 位从机地址,探测哪些 I2C 设备存在
底层通过发送 I2C 消息,尝试与每个地址握手;收到应答(ACK)代表设备在线。

(1) i2cdetect -V: 输出版本信息

(2) i2cdetect -l: 列出所有的 I2C 总线

(3) i2cdetect -F 查询总线上设备支持的功能集

(4) i2cdetect -a 扫描总线上 0x00 到 0xFF 范围内的所有 I2C 设备地址


这里的 0x38 就是 FT5X06 触摸芯片的 I2C 设备地址。

0x38 就是 FT5x06 触控芯片 7 位 I2C 从地址,硬件通信正常,如果无应答表示i2c 外设根本没有挂载上来。

(5) 常用核心参数清单

参数作用
-y跳过交互式确认,自动执行(开发板必加)不加 -y 会等待你输入 YES 确认,脚本 / 调试直接卡死
-a扫描全部 0~127 地址;默认会跳过一部分 I2C 保留地址
-r使用 read 方式探测(默认 write 探测),部分特殊芯片才需要
-q使用简易 quick-write 探测(不推荐,兼容性差)
-V打印工具版本
-h帮助信息

i2cdump

i2cdump 可以读取设备上所有寄存器的值

底层原理

持续发起寄存器读操作,依赖芯片支持随机地址读 / 自动地址自增
绝大多数触控 IC、传感器支持;少数外设不支持连续读,会读出乱码。

(1) i2cdump -V 查看版本号

(2) 读取设备寄存器

读取设备寄存器:使用 i2cdump -f -a 1 0x38 命令可以读取 I2C 设备地址为 0x38 的所有寄存
器值(从 0x00 到 0xFF)。 -f 选项用于强制使用设备地址,而 -a 选项则是用于读取整个地址范围。

(3) 指定寄存器范围读取

指定寄存器范围读取, 使用 i2cdump -f -r 0x80-0xff 1 0x38 命令可以只读取 I2C 设备地址为
0x38 的 0x80 到 0xff 范围内的寄存器值。 -r 选项用于指定要读取的寄存器地址范围

(4) FT5x06 调试标准命令组合

#1.扫描确认设备在线 i2cdetect-y1#2.批量查看0~0x40寄存器(触摸状态、坐标区域) i2cdump-y-r0x00-0x4010x38#3.单独读取触摸状态寄存器 i2cget-y10x380x02

i2cset

向 I2C 从设备寄存器写入数据。
支持单字节写入、多字节连续写入、16 位字写入
底层时序:START → 从机地址 (写) → 寄存器地址 → [数据] → STOP。
和你驱动内i2c_transfer写操作时序完全一致。

i2cset 命令用于向 I2C 设备的特定寄存器写入数据。 它的用法如下:i2cset -f -r 1 0x38 0x80 0x11,意思如下:

( 1) 强制使用 I2C 总线 1 上的设备地址 0x38
( 2) 向该设备的寄存器地址 0x80 写入值 0x11
写入完成后,该命令会返回一个确认信息,表示写入是否成功

i2cget

读取 I2C 设备指定寄存器的数据,标准时序:
START → 发送从机写地址 + 寄存器地址 → 重复起始RESTART → 发送从机读地址 → 读取数据 → STOP
时序和你驱动内2个i2c_msg(先写寄存器地址、再读数据)逻辑完全一致,最适合寄存器型 I2C 芯片(FT5x06、传感器)

命令语法

i2cget[选项]BUS从机地址[寄存器地址][数据模式]

命令i2cget -f 1 0x38 0x80
这条命令的意思是:
( 1) 强制使用 I2C 总线 1 上的设备地址 0x38
( 2) 从该设备的寄存器地址 0x80 读取数据
该命令会返回寄存器 0x80 的值。 读取成功后,会显示类似 0x11 的十六进制值。 如果读取
失败,则会返回一个错误信息

i2ctransfer

i2ctransfer 是一个更加强大和灵活的 I2C 操作工具,与之前介绍的 i2cset 和 i2cget 命令相比,它可以在单个命令中完成读写操作。

写操作

命令:i2ctransfer 1 w2@0x38 0x80 0x22
( 1) 1 表示操作的 I2C 总线编号为 1
( 2) w2 表示写入 2 个字节的数据
( 3) @0x38 表示设备地址为 0x38
( 4) 0x80 表示要写入的寄存器地址为 0x80
( 5) 0x22 表示要写入寄存器的值为 0x22

读操作

命令:i2ctransfer 1 w1@0x38 0x80 r1
( 1) 1 表示操作的 I2C 总线编号为 1
( 2) w1 表示写入 1 个字节的数据
( 3) @0x38 表示设备地址为 0x38
( 4) 0x80 表示要写入的寄存器地址为 0x80
( 5) r1 表示读取 1 个字节的数据

总结

  • 这里介绍了i2c 工具的几个命令
  • 这些命令在调试阶段特别重要

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询