如何找到I2c设备的地址以及读写寄存器

以下是从 反编译 DTB 文件为 DTS 文件找到 I2C 总线地址,再到 利用 i2ctransfer 读取或写入设备寄存器 的完整流程:

1. 反编译 DTB 文件为 DTS 文件

DTB 文件是设备树的二进制形式,我们需要先将其反编译为设备树源文件(DTS 文件)来分析硬件配置信息。

步骤:
  1. 安装 dtc 工具
    在 Linux 系统上,使用如下命令安装:

    sudo apt-get install device-tree-compiler
    
  2. 反编译 dtb 文件
    使用 dtc 工具将 .dtb 文件反编译为 .dts 文件。

    dtc -I dtb -O dts -o output_file.dts input_file.dtb
    
    • input_file.dtb 是要反编译的设备树二进制文件。
    • output_file.dts 是输出的设备树源文件。
  3. 查看 dts 文件
    使用文本编辑器(如 vimnano 等)打开 output_file.dts,查找设备的 I2C 配置。

    vim output_file.dts
    

2. 找到 I2C 总线和设备地址

dts 文件中,查找关键字 i2c,可以定位到设备树中与 I2C 相关的配置。通常,I2C 总线的配置会包含以下信息:

  • I2C 总线编号:通常在 i2c@ 节点下。
  • 设备地址:I2C 设备的地址是十六进制表示的,通常在 reg = <...> 字段中。
示例:

你可能会在 dts 文件中看到类似如下的配置:

i2c@1a000 {
    compatible = "i2c-designware";
    reg = <0x1a000>;  // I2C 总线的基地址
    ...
    device@1a {
        compatible = "some-device";
        reg = <0x1a>;  // I2C 设备地址
        ...
    };
};

在这个例子中:

  • i2c@1a000 表示 I2C 总线的基地址(这里是总线 1)。
  • device@1a 表示 I2C 设备的地址为 0x1A

在你找到 I2C 总线并想确认设备是否连接到指定总线上时,使用 i2cdetect 工具来扫描 I2C 总线,找到所有连接在该总线上的 I2C 设备及其地址。

i2cdetect 命令格式:
i2cdetect -y -r <总线号>
  • -y:跳过用户确认提示,直接执行扫描。
  • -r:使用读模式扫描设备(大多数情况下,推荐使用 -r,它避免一些可能干扰设备操作的写操作)。
  • <总线号>:I2C 总线的编号(例如总线 1 则填 1)。
示例:

如果你想扫描 I2C 总线 1 上的设备,运行以下命令:

i2cdetect -y -r 1

输出结果将显示一个 7 位地址表,其中包含已连接到该 I2C 总线的所有设备地址。如果在地址 0x1A 处发现设备,说明该地址的设备是连接在该总线上的。其中UU是DTB定义的设备

3. 使用 i2ctransfer 读取或写入设备的寄存器

找到 I2C 总线和设备地址后,使用 i2ctransfer 工具与 I2C 设备通信。

读取寄存器

假设设备在 I2C 总线 1 上,设备地址为 0x1A,需要读取寄存器地址 0x10 的值,使用如下命令:

i2ctransfer -y 1 w1@0x1A 0x10 r1@0x1A
  • w1@0x1A 0x10:写入 1 个字节 0x10(寄存器地址)到设备 0x1A
  • r1@0x1A:从设备 0x1A 读取 1 个字节(寄存器中的值)。
写入寄存器

如果需要向寄存器 0x10 写入值 0xFF,使用如下命令:

i2ctransfer -y 1 w2@0x1A 0x10 0xFF
  • w2@0x1A 0x10 0xFF:向设备地址 0x1A 写入两个字节:寄存器地址 0x10 和数据 0xFF

4. 总结操作流程

  1. 反编译 DTB 文件

    • 使用 dtc 反编译 .dtb 文件,生成 .dts 文件。
  2. 找到 I2C 总线和设备地址

    • .dts 文件中查找与 I2C 相关的节点,确定设备的总线编号和设备地址。
  3. 使用 i2ctransfer 进行通信

    • 使用 i2ctransfer 命令读取或写入指定寄存器的值。

这套流程帮助你从设备树信息中找到 I2C 设备的相关信息,并使用 Linux 系统的 I2C 工具与设备通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值