i2c-tools基本用法

一. 前言

        前面调试一个I2C设备,用到了i2c-tools,觉得是一个调试I2C不错的工具,本文对i2c-tools的基本用法做一些介绍。i2c-tools是一些控制2C接口工具的集合,其中包括i2cdetect,i2cdump,i2cget,i2cset和i2ctransfer,其中i2cdetect是用来探测I2C总线上有哪些从设备的,i2cdump是用来输出某个从设备的各个数据地址的内容的,i2cget是用来获取某个从设备的某个数据地址的内容的,i2cset则是用来设置某个从设备的某个数据地址的内容的,i2ctransfer则兼具读和写的功能。本文主要介绍i2cdetect,i2cget,i2cset和i2cdump的功能和使用方法。本文使用的I2C外设是AT24C02。

二. 命令的使用方法

1. i2cdetect

        i2cdetect的帮助信息如下:

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.

        i2cdetect是用来探测I2C总线上有哪些从设备的。探测的原理:根据I2C协议,当主设备发送从设备的地址(由从设备的A0,A1和A2决定)后,从设备需要回一个ACK,此时,主设备就知道了该地址的从设备存在,所以,I2C主设备依次发送从设备地址为0x03 - 0x77的地址数据,

root@OpenWrt:/# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 
2. i2cset

        i2cset命令的帮助信息如下:

root@OpenWrt:/# i2cset --help
Error: Unsupported option "--help"!
Usage: i2cset [-f] [-y] [-m MASK] [-r] [-a] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]
  I2CBUS is an integer or an I2C bus name
  ADDRESS is an integer (0x03 - 0x77, or 0x00 - 0x7f if -a is given)
  MODE is one of:
    c (byte, no value)
    b (byte data, default)
    w (word data)
    i (I2C block data)
    s (SMBus block data)
    Append p for SMBus PEC

        i2cset命令用于设置I2C设备的某个地址的值,这里以在AT24C02的0x04地址写入0x89为例,命令如下:

root@OpenWrt:/# i2cset -y 0 0x50 0x04 0x89
3. i2cget

        i2cget命令的帮助信息如下:

Usage: i2cget [-f] [-y] [-a] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]
  I2CBUS is an integer or an I2C bus name
  ADDRESS is an integer (0x03 - 0x77, or 0x00 - 0x7f if -a is given)
  MODE is one of:
    b (read byte data, default)
    w (read word data)
    c (write byte/read byte)
    Append p for SMBus PEC

        i2cget命令用于读取I2C设备的某个地址的值,以读取AT24C02的0x04地址为例,之前用i2cset设置了0x89。

root@OpenWrt:/# i2cget -y 0 0x50 0x04
0x89
4. i2cdump

        i2cdump命令的帮助信息如下:

Usage: i2cdump [-f] [-y] [-r first-last] [-a] I2CBUS ADDRESS [MODE [BANK [BANKREG]]]
  I2CBUS is an integer or an I2C bus name
  ADDRESS is an integer (0x03 - 0x77, or 0x00 - 0x7f if -a is given)
  MODE is one of:
    b (byte, default)
    w (word)
    W (word on even register addresses)
    s (SMBus block)
    i (I2C block)
    c (consecutive byte)
    Append p for SMBus PEC

        i2cdump命令用于输出I2C设备的各个地址的值,在之前我在AT24C02的0x04地址上写入了0x89值,i2cdump命令输出如下:

root@OpenWrt:/# i2cdump -y 0 0x50
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: ff ff ff ff 89 ff ff ff ff ff ff ff ff ff ff ff    ....?...........
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
                       ......

        可以看到通过i2cdump,0x04地址的值为0x89。

三. 总结

        本文讲解了Linux下i2c-tools工具的使用方法,i2cdetect用于检测I2C总线的上有哪些I2C从设备,i2cset用于设置I2C总线上某个设备的地址的值,i2cget用于获取I2C总线上某个设备的地址的值,i2cdump用于批量输出I2C总线上某个设备的地址的值。熟悉使用这几个工具,对I2C设备的调试非常有帮助。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值