i2c总线及设备测试工具i2ctools:i2cdetect、i2cdump、i2cget、i2cset

1 篇头

  • 在编写某I2C设备之前,可以使用开源的I2C测试工具,先对总线和设备的连通性做一个简单测试,或更进一步手动发送一些命令,进行设备的初始化、检验相关功能。
  • 本文即介绍i2ctools工具,它的源文件只有1个.c文件,但编译后有一组子工具。在全志的芯片平台上,基本都有携带,可以直接使用,例如H713以及本文的H618平台,掌握此工具后,可大幅提升I2C设备的开发和调试效率。

2 工具源码

  • 位置: android\external\toybox\toys\other\i2ctools.c

3 工具介绍

i2cdetect  -- 检测指定总线上的I2C设备
i2cdump  --  dump指定I2C设备的寄存器数值
i2cget  --  读取I2C数据
i2cset  --  设置I2C数据 

4 查看可用工具

  • 可用tab补齐功能,先看下自己的平台是否有这些工具
console:/ # i2c(tab)
i2cdetect  i2cdump    i2cget     i2cset

5 查询可用总线

  • 进一步,可以看下系统当前已配置了哪几个I2C总线,以标准的Linux I2C总线的命名习惯,都是以i2c-开头,以总线的序号结尾,即i2c-num。
console:/ # ls -l /dev/i2c*                           
i2c-3   i2c-5   

6 i2cdetect

  • 检测总线上可用设备的i2c addr
  • 如下所示,检测都1个设备,地址为0x1E
console:/ # i2cdetect --help                                                   
Toybox 0.8.4-android multicall binary: https://landley.net/toybox (see toybox --help)

usage: i2cdetect [-ary] BUS [FIRST LAST]
usage: i2cdetect -F BUS
usage: i2cdetect -l

Detect i2c devices.

-a      All addresses (0x00-0x7f rather than 0x03-0x77)
-F      Show functionality
-l      List all buses
-r      Probe with SMBus Read Byte
-y      Answer "yes" to confirmation prompts (for script use)
console:/ # i2cdetect -a                                                       
i2cdetect: bad args
1|console:/ # i2cdetect -a 3                                                   
Probe chips 0x00-0x7f on bus 3? (Y/n):y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
console:/ # 

7 i2cset

  • 向指定I2C设备的寄存器地址写入数据
  • i2cset -y 3 0x1E 0x00 0x3 b
  • i2cset -y 总线序号 设备地址 寄存器地址 数值 模式
  • MODE:支持b字节、w双字节、i为数据块
console:/ # i2cset --help                                                      
Toybox 0.8.4-android multicall binary: https://landley.net/toybox (see toybox --help)

usage: i2cset [-fy] BUS CHIP ADDR VALUE... MODE

Write an i2c register. MODE is b for byte, w for 16-bit word, i for I2C block.

-f      Force access to busy devices
-y      Answer "yes" to confirmation prompts (for script use)
console:/ #
console:/ # i2cset -y 3 0x1E 0x00 0x3 b        

8 i2cget

  • 读取I2C指定设备指定地址上的数据,一次只能读取1个字节
  • 如下我们将楼上写入的数据又读了出来,为0x03,数据一致
console:/ # i2cget --help                                                      
Toybox 0.8.4-android multicall binary: https://landley.net/toybox (see toybox --help)

usage: i2cget [-fy] BUS CHIP ADDR

Read an i2c register.

-f      Force access to busy devices
-y      Answer "yes" to confirmation prompts (for script use)
console:/ # 
console:/ # i2cget -y 3 0x1E 0x00    
0x03
console:/ # 

9 i2cdump

  • dump i2c 指定设备的寄存器数值
console:/ # i2cdump --help                                                     
Toybox 0.8.4-android multicall binary: https://landley.net/toybox (see toybox --help)

usage: i2cdump [-fy] BUS CHIP

Dump i2c registers.

-f      Force access to busy devices
-y      Answer "yes" to confirmation prompts (for script use)
console:/ # 
console:/ # 
console:/ # i2cd       
i2cdetect  i2cdump
console:/ # i2cdump -y 3 0x1E                                                  
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 03 00 00 02 02 01 ee ee 00 80 00 00 00 00 00 00    ?..?????.?......
10: 00 01 00 03 ee ee ee ee ee 40 00 00 ff ff ee ee    .?.??????@..????
20: 05 13 01 00 00 ee ee ee 00 00 00 80 00 80 ee ee    ???..???...?.???
30: 00 00 ee 05 ee 00 ee 1b 00 00 00 00 00 00 00 00    ..???.??........
40: 82 84 80 93 80 8f 86 80 ee ee ee ee ee ee ee ee    ????????????????
50: ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee    ????????????????
60: ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee    ????????????????
70: ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee    ????????????????
80: ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee    ????????????????
90: ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee    ????????????????
a0: ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee    ????????????????
b0: ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee    ????????????????
c0: ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee    ????????????????
d0: ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee    ????????????????
e0: ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee    ????????????????
f0: ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee ee    ????????????????
console:/ # 
  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
i2ctools是一个用于I2C总线通信的工具包,它提供了一组用于读取和写入I2C设备的命令行工具。其源码主要由C语言编写。 i2ctools的主要功能包括: 1. 通过i2c设备节点文件(如/dev/i2c-0)打开和关闭一个I2C设备连接。 2. 通过发送START、STOP、ACK、NACK等信号控制I2C总线。 3. 发送和接收字节数据,支持读取和写入I2C设备。 4. 支持读取和写入I2C设备寄存器的值。 5. 提供了一些用于设置I2C总线传输速度和其他参数的选项。 6. 支持通过SMbus协议进行I2C通信。 7. 支持对I2C设备进行命名,并提供了一些用于查找和识别I2C设备地址的方法。 i2ctools的源码包括多个文件,其中包括用于解析命令行参数、实现I2C通信协议的函数、用于读写I2C设备寄存器和处理I2C设备连接的函数等。通过阅读源码可以更深入地理解和定制化i2ctools的功能。 在源码中,首先会进行一些初始化操作,如解析命令行参数,打开I2C设备连接等。然后,根据用户的输入执行相应的操作,如读写寄存器、发送数据等。在执行这些操作的过程中,可能会使用到I2C通信协议相关的函数来控制I2C总线的信号传输。 总的来说,i2ctools的源码提供了一套实用的工具和函数,使得我们可以通过命令行快速、方便地进行I2C总线通信和与I2C设备的交互。通过阅读和理解源码,可以更好地进行调试、定制和扩展i2ctools的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿迷创客

感谢!您的支持是我写作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值