嵌入式Linux:i2c-tools调试工具

简介

 I2C tools包含一套用于Linux应用层测试各种各样I2C功能的工具。它的主要功能包括:总线探测工具、SMBus访问帮助程序、EEPROM解码脚本、EEPROM编程工具和用于SMBus访问的python模块。只要你所使用的内核中包含I2C设备驱动,那么就可以在你的板子中正常使用这个测试工具。

参考:https://zhuanlan.zhihu.com/p/443741898

安装方式

命令介绍:

  • i2cdetect:用于扫描 i2c 总线上的设备,并显示地址
  • i2cdump:查看寄存器值
  • i2cget:获取单个寄存器值(8位寄存器)
  • i2cset:设置单个寄存器值(8位寄存器)
  • i2ctransfer:一次写多个字节数据(16位寄存器)

参数介绍:

  • -y:禁用交互模式。
  • -f:强制访问设备。
  • -r:写入后立即读回该值。
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.
  
  -y:关闭交互式,不会显示警告信息
  -a:扫描总线上所有设备
  -q:使用SMBus的"quick write"命令进行检测,不建议使用
  -r:使用SMBus的"receive byte"命令进行检测,不建议使用
  i2cbus:指定查询某个总线编号
  first、last:扫描的地址范围

使用例子

列出系统可用i2c总线

列出当前系统所有可用的i2c总线:i2cdetect -l

# i2cdetect -l
i2c-0   i2c             mv64xxx_i2c adapter                     I2C adapter

由上可知,只有一组总线,即i2c0。
还有多组i2c总线是这样排列的:

# i2cdetect -l
i2c-0   i2c             mv64xxx_i2c adapter              I2C adapter
i2c-1   i2c             DP-AUX adapter                   I2C adapter
i2c-2   i2c             DesignWare HDMI                  I2C adapter

检测i2c总线上的器件

检测第0条总线上的器件:i2cdetect -r -y 0


# i2cdetect -r -y 0
     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: -- -- -- -- -- -- -- --

  • --表示该地址被检测,但是没有芯片应答,UU 表示该地址被当前内核驱动使用。

  • 如上图显示,在i2c0总线上,有一个器件,设备地址分别是:0x48

  • 上图是一张地址表,垂直方向和水平方向的UU交点,就是地址值(如上:0x40+0x08=0x48)。

获取器件所有寄存器的值

查看器件所有寄存器的值:i2cdump -f -y i2c总线 器件地址(16进制)
实例:i2cdump -y -f 0 0x48 i2c0总线,0x48地址

# i2cdump -y -f 0 0x48
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: ff ff ff ff ff ff ff ff c0 3f 3f 3f 3f 3f 3f 3f    ........????????
10: 00 ff ff ff ff ff ff ff c0 00 00 00 00 00 00 00    ........?.......
20: 7f ff ff ff ff ff ff f8 c0 2d 4a 5c 6d 82 84 84    ?......??-J\m???
30: ff ff ff ff ff ff ff ff c0 31 37 45 4d 60 5f 7a    ........?17EM`_z
40: ff ff ff ff ff ff ff ff c0 4c 4c 4c 4c 4c 4c 4c    ........?LLLLLLL
50: ff ff ff ff ff ff ff ff c0 3d 3d 3d 3d 3d 3d 3d    ........?=======
60: 00 ff ff ff ff ff ff ff c0 00 00 00 00 00 00 00    ........?.......
70: 7f ff ff ff ff ff ff ff c0 2c 44 49 54 5b 6c 7b    ?.......?,DIT[l{
80: 00 00 00 00 00 00 00 00 02 04 04 06 08 0a 0b 0e    ........????????
90: ce ce cd ce c7 ce ce cb ce ce ce cf d0 ce cd cd    ????????????????
a0: c9 c2 b5 ad af bc be c3 b9 bc be c1 af b7 b9 b9    ????????????????
b0: 9a 9a 9b 9a 9b 9b 9b 9a 9b 9a 9a 9b 9a 99 9a 9a    ????????????????
c0: ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: d6 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ?...............
e0: 00 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00    ....?...?.......
f0: ff ff ff ff ff ff fe ff ff ff ff ff ff ff ff ff    ......?.........

获取单个寄存器的值

获取单个寄存器的值:i2cget -y -f i2c总线 器件地址(16进制) 寄存器地址(16进制)
实例:i2cget -y -f 0 0x48 0x3a i2c0总线,0x48器件地址,0x3a寄存器地址

# i2cget -y -f 0 0x48 0x3a
0xff

设置单个寄存器的值

设置单个寄存器的值:2cset -y -f i2c总线 器件地址(16进制) 寄存器地址(16进制) 要写入的值

实例:i2cset -y -f 0 0x48 0xa0 0x03 i2c0总线,0x48器件地址,0xa0寄存器地址,设置的值0x03

# i2cset -y -f 0 0x48 0xa0 0x03
# i2cget -y -f 0 0x48 0xa0
0x03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值