Android i2cdetect i2cdump i2cget i2cset调试工具使用

这篇具有很好参考价值的文章主要介绍了Android i2cdetect i2cdump i2cget i2cset调试工具使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文介绍Android/Linux (反正是ARM) 的I2C调试工具用法 , 包括i2cdetect、i2cdump、i2cget和i2cset,可实现I2C设备的识别、监控和配置。i2cdetect用于扫描所有设备地址,i2cdump读取寄存器的值,而i2cget和i2cset分别实现读取和写入寄存器的功能。这些工具提供了便捷的方式与I2C设备进行交互,深入了解设备状态与配置。

1. i2c工具和命令

1.1 i2c工具概述

I2C(Inter-Integrated Circuit)是一种串行总线协议,用于连接多个低速设备,如传感器,EEPROM,LCD等。I2C总线由两根信号线组成:SCL(时钟线)和SDA(数据线)。I2C总线上有一个主设备(master)和多个从设备(slave),主设备负责产生时钟信号和控制数据传输,从设备负责响应主设备的命令和发送或接收数据。

I2C工具是一组Linux命令行工具,用于操作I2C总线上的设备。I2C工具包括以下四个工具:

  • i2cdetect:用于扫描I2C总线上的所有设备,并显示它们的地址。
  • i2cdump:用于读取I2C设备的所有寄存器,并显示它们的值。
  • i2cget:用于读取I2C设备的某个寄存器,并显示它的值。
  • i2cset:用于向I2C设备的某个寄存器写入一个值。

1.2 i2c命令和参数

i2c命令的通用格式如下:

i2c<tool> [-options] BUS CHIP [ADDRESS] [VALUE] [MODE]

其中:

  • <tool>表示要使用的I2C工具,如detect, dump, get, set等。
  • [-options]表示可选的参数,不同的工具有不同的参数,具体可以使用--help选项查看。
  • BUS表示要操作的I2C总线编号,如0, 1, 2等。
  • CHIP表示要操作的I2C设备地址,如0x20, 0x3c等。
  • [ADDRESS]表示要操作的I2C设备寄存器地址,如0x00, 0x01等。这个参数只在i2cget和i2cset工具中使用。
  • [VALUE]表示要写入的值,如0x00, 0xff等。这个参数只在i2cset工具中使用。
  • [MODE]表示要使用的数据模式,如b(字节),w(16位字),i(I2C块)。这个参数只在i2cset工具中使用。

2. i2cdetect工具的使用

2.1 i2cdetect工具介绍

i2cdetect工具是用于扫描I2C总线上的所有设备,并显示它们的地址。这个工具可以帮助我们确定哪些设备已经连接到了I2C总线上,以及它们各自的地址是多少。

2.2 i2cdetect命令和参数

i2cdetect命令的格式如下:

i2cdetect [-ary] BUS [FIRST LAST]

其中:

  • [-ary]表示可选的参数,具体含义如下:
    • -a表示扫描所有地址(0x00-0x7f),而不是默认的范围(0x03-0x77)。
    • -r表示使用SMBus Read Byte命令进行探测,而不是默认的Write Byte命令。这个选项可以避免一些设备的写保护问题,但是也可能导致一些设备的错误操作。
    • -y表示在执行探测之前不进行确认提示,这个选项适合脚本使用。
  • BUS表示要扫描的I2C总线编号,如0, 1, 2等。
  • [FIRST LAST]表示要扫描的地址范围,如0x20 0x30。这个参数是可选的,如果不指定,则默认扫描所有地址或者由-a选项指定的范围。

2.3 i2cdetect使用示例

假设我们有一个Android设备,它有两个I2C总线,分别编号为0和1。我们想要知道这两个总线上都连接了哪些设备,以及它们的地址是多少。我们可以使用以下命令:

130|rk3568_r:/data # i2cdetect -l 
i2c-1   i2c             rk3x-i2c                                I2C Adapter
i2c-6   i2c             DesignWare HDMI                         I2C Adapter
i2c-0   i2c             rk3x-i2c                                I2C Adapter
i2c-5   i2c             rk3x-i2c                                I2C Adapter
# 因为我只打开了0,1,5 i2c

输出结果可能类似于以下内容:

rk3568_r:/data # i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
rk3568_r:/data # i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

从输出结果中,我们可以看到:

  • 在I2C总线0上,有很多设备连接了,它们的地址分别是:0x20,0x40。其中,0x20地址后面有UU标记,表示这些地址已经被内核驱动占用了,不能直接访问。
  • 在I2C总线1上,没有任何设备连接了,所有的地址都显示为–。

3. i2cdump工具的使用

3.1 i2cdump工具介绍

i2cdump工具是用于读取I2C设备的所有寄存器,并显示它们的值。这个工具可以帮助我们了解I2C设备的内部状态和配置,以及检查是否有错误或异常发生。

3.2 i2cdump命令和参数

i2cdump命令的格式如下:

i2cdump [-fy] BUS CHIP

其中:

  • [-fy]表示可选的参数,具体含义如下:
    • -f表示强制访问忙碌的设备,即使它们已经被内核驱动占用了。这个选项可能会导致一些设备的错误操作,所以要谨慎使用。
    • -y表示在执行读取之前不进行确认提示,这个选项适合脚本使用。
  • BUS表示要读取的I2C总线编号,如0, 1, 2等。
  • CHIP表示要读取的I2C设备地址,如0x20, 0x3c等。

3.3 i2cdump使用示例

假设我们有一个Android设备,它有一个I2C总线0,上面连接了一个地址为0x20的I/O扩展器(PCA9555)。我们想要读取这个设备的所有寄存器,并显示它们的值。我们可以使用以下命令:

rk3568_r:/data # i2cdump -fy 0 0x20

输出结果可能类似于以下内容:

rk3568_r:/data # i2cdump -fy 0 0x20
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 04 00 09 04 08 17 05 00 00 00 01 01 00 01 80 00    ?.?????...??.??.
10: 00 00 03 00 00 00 00 06 c8 00 00 00 00 00 00 00    ..?....??.......
20: 00 00 00 ff ff 00 00 70 00 66 00 00 00 00 00 0f    ...??..p.f.....?
30: 04 00 00 00 a5 00 00 00 01 ff ff 00 00 e0 0f 09    ?...?...???..???
40: 69 4c 0c 58 2d 0c 95 01 00 00 00 17 00 00 17 00    iL?X-???...?..?.
50: 8c 00 01 00 01 b0 44 10 00 60 00 00 00 00 00 00    ?.?.??D?.`......
60: 00 00 00 00 00 00 00 00 00 00 00 00 54 01 59 00    ............T?Y.
70: 00 00 00 00 ff ff ff f1 00 05 ff fc 00 00 00 00    ....????.???....
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
90: 60 81 59 80 04 df d2 81 59 00 00 00 00 00 00 00    `?Y?????Y.......
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
b0: 00 0f 0f 0f 0f 04 a4 ff ff 00 64 20 20 64 1a 20    .????????.d  d?
c0: 64 00 00 64 1a 00 6b ff ff ff ff ff 0c 00 0c 0c    d..d?.k??????.??
d0: 0c 0c 6c 00 6c 6c 6c 6c 30 30 30 30 30 00 09 31    ??l.llll00000.?1
e0: 00 00 00 55 a2 c8 c5 40 00 ff 22 03 0a 80 94 0e    ...U???@.?"?????
f0: c2 ac a0 40 18 40 00 86 00 fc 00 ff 00 ff 60 00    ???@?@.?.?.?.?`.

从输出结果中,我们可以看到:

  • 这个设备有16个寄存器,分别是:Input Port 0 (0x00), Input Port 1 (0x01), Output Port 0 (0x02), Output Port 1 (0x03), Polarity Inversion Port 0 (0x04), Polarity Inversion Port 1 (0x05), Configuration Port 0 (0x06), Configuration Port 1 (0x07), and Bank Select (0x10-0x17).
  • 所有的寄存器都显示为ff,表示所有的位都是1。这意味着这个设备没有被配置或者控制过,所有的端口都是输入模式,并且没有反向极性。如果我们想要改变这个设备的状态或者功能,我们需要使用i2cset工具向相应的寄存器写入不同的值。

4. i2cget工具的使用

4.1 i2cget工具介绍

i2cget工具是用于读取I2C设备的某个寄存器,并显示它的值。这个工具可以帮助我们了解I2C设备的某个特定状态或配置,以及检查是否有错误或异常发生。

4.2 i2cget命令和参数

i2cget命令的格式如下:

i2cget [-fy] BUS CHIP ADDR

其中:

  • [-fy]表示可选的参数,具体含义如下:
    • -f表示强制访问忙碌的设备,即使它们已经被内核驱动占用了。这个选项可能会导致一些设备的错误操作,所以要谨慎使用。
    • -y表示在执行读取之前不进行确认提示,这个选项适合脚本使用。
  • BUS表示要读取的I2C总线编号,如0, 1, 2等。
  • CHIP表示要读取的I2C设备地址,如0x20, 0x3c等。
  • ADDR表示要读取的I2C设备寄存器地址,如0x00, 0x01等。

4.3 i2cget使用示例

假设我们有一个Android设备,它有一个I2C总线0,上面连接了一个地址为0x20的I/O扩展器。我们想要读取这个设备的Output Port 0寄存器(0x02),并显示它的值。我们可以使用以下命令:

i2cget -fy 0 0x20 0x02 #一定要f , 不然会提示i2cget: ioctl 703: Device or resource busy

输出结果可能类似于以下内容:

1|rk3568_r:/data # i2cget -fy 0 0x20 0x02
0x09

从输出结果中,我们可以看到:

  • 这个设备的Output Port 0寄存器(0x02)的值是0xff,表示所有的位都是1。这意味着这个端口上所有的引脚都输出高电平。如果我们想要改变这个端口上某些引脚的输出状态,我们需要使用i2cset工具向这个寄存器写入不同的值。

5. i2cset工具的使用

5.1 i2cset工具介绍

i2cset工具是用于向I2C设备的某个寄存器写入一个值。这个工具可以帮助我们改变I2C设备的某个特定状态或配置,以及控制它的功能或行为。

5.2 i2cset命令和参数

i2cset命令的格式如下:

i2cset [-fy] BUS CHIP ADDR VALUE [MODE]

其中:

  • [-fy]表示可选的参数,具体含义如下:
    • -f表示强制访问忙碌的设备,即使它们已经被内核驱动占用了。这个选项可能会导致一些设备的错误操作,所以要谨慎使用。
    • -y表示在执行写入之前不进行确认提示,这个选项适合脚本使用。
  • BUS表示要写入的I2C总线编号,如0, 1, 2等。
  • CHIP表示要写入的I2C设备地址,如0x20, 0x3c等。
  • ADDR表示要写入的I2C设备寄存器地址,如0x00, 0x01等。
  • VALUE表示要写入的值,如0x00, 0xff等。
  • [MODE]表示要使用的数据模式,如b(字节),w(16位字),i(I2C块)。这个参数是可选的,如果不指定,则默认使用字节模式。

5.3 i2cset使用示例

假设我们有一个Android设备,它有一个I2C总线0,上面连接了一个地址为0x20的I/O扩展器。我们想要向这个设备的Output Port 0寄存器(0x02)写入一个值0xaa,并显示它的值。我们可以使用以下命令:

i2cset -fy 0 0x20 0x02 0xaa b
i2cget -fy 0 0x20 0x02

输出结果可能类似于以下内容:

rk3568_r:/data # i2cset -fy 0 0x20 0x02 0xaa b
rk3568_r:/data # i2cget -fy 0 0x20 0x02
0xaa
rk3568_r:/data #

从输出结果中,我们可以看到:文章来源地址https://www.toymoban.com/news/detail-716679.html

  • 我们成功地向这个设备的Output Port 0寄存器(0x02)写入了一个值0xaa。
  • 这个寄存器的值是0xaa,表示其中奇数位都是1,偶数位都是0。这意味着这个端口上奇数引脚都输出高电平,偶数引脚都输出低电平。如果我们想要改变这个端口上某些引脚的输出状态,我们可以使用i2cset工具向这个寄存器写入不同的值。

到了这里,关于Android i2cdetect i2cdump i2cget i2cset调试工具使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 音频——I2S 标准模式(二)

    I2S 基本概念 飞利浦(I2S)标准模式 左(MSB)对齐标准模式 右(LSB)对齐标准模式 DSP 模式 TDM 模式 飞利浦 (I2S) 标准模式 数据在跟随 LRCLK 传输的 BCLK 的第二个上升沿时传输 MSB,其他位一直到 LSB 按顺序传 传输依赖于字长、BCLK 频率和采样率(BCLK=Fs x 声道数 x 采样位数) 在每个采样的

    2024年02月10日
    浏览(39)
  • 音频——I2S TDM 模式(六)

    I2S 基本概念 飞利浦(I2S)标准模式 左(MSB)对齐标准模式 右(LSB)对齐标准模式 DSP 模式 TDM 模式 TDM 一般有三种常用操作模式:TDM A mode ,TDM B mode 和 TDM C mode, 统称为TDM mode。 基于 TDM mode,可以配置支持 TDM(Time Division Multiplexing)数据传输。可以支持传输多个声道的数据,允许多个设

    2024年02月04日
    浏览(39)
  • 音频——I2S 左对齐模式(三)

    I2S 基本概念 飞利浦(I2S)标准模式 左(MSB)对齐标准模式 右(LSB)对齐标准模式 DSP 模式 TDM 模式 I2S 左对齐标准 标准左对齐格式的数据的 MSB 没有相对于 BCLK 延迟一个时钟。左对齐格式的左右声道数据的 MSB 在 LRCLK 边沿变化后 BCLK 的第一个上升沿有效 LRCLK 为 1 传输左声道数据,L

    2024年02月10日
    浏览(36)
  • STM32个人笔记-I2S

    现实存在的声音是模拟量,这对声音保存和长距离传输造成很大的困难,一般的做法是把模拟量转成对应的数字量保存,在需要还原声音的地方再把数字量的转成模拟量输出。 模拟量转换成数字量,3个过程:采样、量化和编码。 蓝线的距离就是采样信号的周期,即对应一个

    2024年02月10日
    浏览(40)
  • 音频——I2S 协议基本概念(一)

    I2S 基本概念 飞利浦(I2S)标准模式 左(MSB)对齐标准模式 右(LSB)对齐标准模式 DSP 模式 TDM 模式 I2S 信号线有多种模式 五线 I2S 四线 DAC I2S 四线 ADC I2S 两线 TX I2S 两线 RX I2S 以五线 I2S 为例,各个信号线的功能及描述见下表 信号线 描述 SCLK 串行时钟,也叫位时钟(BCLK),对应数字⾳频

    2024年02月09日
    浏览(35)
  • 瑞芯微 | I2S-音频基础 -1

    最近调试音频驱动,顺便整理学习了一下i2s、alsa相关知识,整理成了几篇文章,后续会陆续更新。 喜欢嵌入式、Li怒晓得老铁可以关注一口君账号。 名称 含义 ADC(Analog to Digit Conversion) 模拟信号转换为数字信号 AEC(Acoustic Echo Cancellor) 回声消除 AGC(Automatic Gain Control) 自

    2024年03月14日
    浏览(49)
  • 音频——I2S DSP 模式(五)

    I2S 基本概念 飞利浦(I2S)标准模式 左(MSB)对齐标准模式 右(LSB)对齐标准模式 DSP 模式 TDM 模式 DSP/PCMmode 分为 Mode-A 和 Mode-B 共 2 种模式。不同芯⽚有的称为 PCM mode 有的称为 DSP mode。PCM 只有⼀个起始信号,先传输左声道后传输右声道。 Mode-A 数据在第 1 个 BCLK 脉冲处 上升沿数据有

    2024年02月09日
    浏览(34)
  • 一文搞懂I2S通信总线

    目录 1、物理特性 2、常见的I2S数据格式 2.1、I2S Philips标准 2.2、左对齐(MSB)标准 2.3、右对齐(LSB)标准 之前我们讲过I2C通信总线,本篇博文将讲一讲I2C的变种:I2S总线。 I2C和I2S都是由Philips公司(2006年迁移到NXP)发布的串行总线,I2S是在I2C之后发布,I2S专为传输音频数据而

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

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

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

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

    2024年01月19日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包