0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

i2c-tools工具的安装和使用简单介绍

FPGA之家 来源:嵌入式与Linux那些事 作者:仲一 2022-11-17 09:52 次阅读

i2c-tools简介

嵌入式开发仲,有时候需要确认硬件是否正常连接,设备是否正常工作,设备的地址是多少等等,这里我们就需要使用一个用于测试I2C总线的工具——i2c-tools。

i2c-tools工具是一个专门调试i2c的,开源,可获取挂载的设备及设备地址,还可以读写I2C设备寄存器

下面我们就对这个工具的安装和使用做个简单介绍。

i2c-tools安装

解压

下载完成后,放到linux环境下解压。

tar-zxvfi2c-tools-4.3.tar.gz
cdi2c-tools-4.3

编译

使用以下命令进行编译

makeCC=arm-linux-gnueabihf-gccUSE_STATIC_LIB=1

USE_STATIC_LIB 的意思是使用静态编译。编译完成后,会在tools目录下产生i2cdetect,i2cdump,i2cget,i2cset,i2ctransfer五个产物。将这些可执行文件拷贝到设备上。

不加 USE_STATIC_LIB 编译选项,会使用动态链接的方式编译。编译完成后需要拷贝i2c-tools-4.3/lib 目录下的libi2c.so.0动态库到设备上的/usr/bin 目录下。

i2c-tools使用方法

i2cdetect

i2cdetect用來列举I2C bus和上面所有的设备,可接受的参数

Usage:i2cdetect[-y][-a][-q|-r]I2CBUS[FIRSTLAST]
i2cdetect-FI2CBUS
i2cdetect-l
I2CBUSisanintegeroranI2Cbusname
Ifprovided,FIRSTandLASTlimittheprobingrange.

-V:输出当前版本号

debian@npi:/mnt/mnt$./i2cdetect-V
i2cdetectversion4.3

-l:输出所有 i2c 总线,如下总线编号有twi1和twi2,或者1和2

debian@npi:/mnt/mnt$./i2cdetect-l
i2c-0unknown21a0000.i2cN/A
i2c-1unknown21a4000.i2cN/A
debian@npi:/mnt/mnt$ls-l/dev/i2c-*
crw-------1rootroot89,0Mar1909:42/dev/i2c-0
crw-------1rootroot89,1Mar1909:42/dev/i2c-1

I2CBUS:i2c总线编号-F:此 i2c 支持的功能

root@npi:/mnt/mnt#./i2cdetect-F1
Functionalitiesimplementedby/dev/i2c-1:
I2Cyes
SMBusQuickCommandyes
SMBusSendByteyes
SMBusReceiveByteyes
SMBusWriteByteyes
SMBusReadByteyes
SMBusWriteWordyes
SMBusReadWordyes
SMBusProcessCallyes
SMBusBlockWriteyes
SMBusBlockReadyes
SMBusBlockProcessCallno
SMBusPECyes
I2CBlockWriteyes
I2CBlockReadyes
root@npi:/mnt/mnt#

-y:指令执行自动yes,否则会提示确认执行Continue? [Y/n] Y,不加参数y会有很多执行提示,可以帮助判断

-a:输出总线上所有地址(00-7f),没有 -a,只显示 08-77,UU 表示该设备在驱动中已使用。

如下0x1a,0x39的地址正在被使用。

root@npi:/mnt/mnt#./i2cdetect-a1
WARNING!ThisprogramcanconfuseyourI2Cbus,causedatalossandworse!
Iwillprobefile/dev/i2c-1.
Iwillprobeaddressrange0x00-0x7f.
Continue?[Y/n]y
0123456789abcdef
00:00------------------------------
10:--------------------UU----------
20:--------------------------------
30:------------------UU------------
40:--------------------------------
50:--------------------------------
60:60------------------------------
70:--------------------------------
root@npi:/mnt/mnt#./i2cdetect-y-a1
0123456789abcdef
00:00------------------------------
10:--------------------UU----------
20:--------------------------------
30:------------------UU------------
40:--------------------------------
50:--------------------------------
60:60------------------------------
70:--------------------------------
root@npi:/mnt/mnt#

i2cdump

i2cdump读取设备上所有寄存器的值,可接受的参数有

Usage:i2cdump[-f][-y][-rfirst-last][-a]I2CBUSADDRESS[MODE[BANK[BANKREG]]]
I2CBUSisanintegeroranI2Cbusname
ADDRESSisaninteger(0x03-0x77,or0x00-0x7fif-aisgiven)
MODEisoneof:
b(byte,default)
w(word)
W(wordonevenregisteraddresses)
s(SMBusblock)
i(I2Cblock)
c(consecutivebyte)
AppendpforSMBusPEC

-V:输出当前版本号

-f:强制使用此设备地址,即使此设备地址已经被使用;若不添加此参数,地址可能写失败

-y:指令执行自动 yes,否则会提示确认执行Continue? [Y/n] Y,不加参数y会有很多执行提示,可以帮助判断

-r:读取从 first-last 之间的寄存器值

-a:读取0x00-0xff范围的地址

I2CBUS:i2c总线编号

ADDRESS:设备地址,建议使用十六进制

MODE:数据长度类型

root@npi:/mnt/mnt#./i2cdump-f-y-a10x39
Nosizespecified(usingbyte-dataaccess)
0123456789abcdef0123456789abcdef
00:00000000000000007000000000000000........p.......
10:0000000000000000000010b002030200..........?????.
20:9500000000004000000000fbffddc400?.....@....?.??.
30:0000000000009022a000000001100000......?"?...??..
40:00000000000000000000000000000000................
50:00000000000000000000000000000000................
60:04030000000000000000000000000000??..............
70:00000000000000000000000000030000.............?..
80:00000000000000000000000000000000................
90:00000000000000000000000000000000................
a0:00000000000000000000000000000000................
b0:00000000000000000077147601000100.........w?v?.?.
c0:00000000000000000000000000000000................
d0:00000000000000000000000000000000................
e0:00000000000000000000000000000000................
f0:00000000000000000000000000000000................

#只读取0x50-0x7f寄存器范围的值
root@npi:/mnt/mnt#./i2cdump-f-y-r0x50-0x7f10x39
Nosizespecified(usingbyte-dataaccess)
0123456789abcdef0123456789abcdef
50:00000000000000000000000000000000................
60:04030000000000000000000000000000??..............
70:00000000000000000000000000030000.............?..
root@npi:/mnt/mnt#

通过读取i2c设备寄存器的值与芯片手册的值进行比对,确认我们配置的是否正确。

i2cget

i2cget读取设备上寄存器的值,可接受的参数有

Usage:i2cget[-f][-y][-a]I2CBUSCHIP-ADDRESS[DATA-ADDRESS[MODE]]
I2CBUSisanintegeroranI2Cbusname
ADDRESSisaninteger(0x03-0x77,or0x00-0x7fif-aisgiven)
MODEisoneof:
b(readbytedata,default)
w(readworddata)
c(writebyte/readbyte)
AppendpforSMBusPEC

I2CBUS:i2c总线编号

CHIP-ADDRESS:设备地址

DATA-ADDRESS:要读取的寄存器地址

MODE:数据长度类型

#0x39设备地址,0x04要读取的寄存器
root@npi:/mnt/mnt#./i2cget-f-y10x390x04
0x03

i2cset

i2cset设置设备上寄存器的值,可接受的参数有

Usage:i2cset[-f][-y][-mMASK][-r][-a]I2CBUSCHIP-ADDRESSDATA-ADDRESS[VALUE]...[MODE]
I2CBUSisanintegeroranI2Cbusname
ADDRESSisaninteger(0x03-0x77,or0x00-0x7fif-aisgiven)
MODEisoneof:
c(byte,novalue)
b(bytedata,default)
w(worddata)
i(I2Cblockdata)
s(SMBusblockdata)
AppendpforSMBusPEC

I2CBUS:i2c总线编号

CHIP-ADDRESS:设备地址

DATA-ADDRESS:要写入的寄存器地址

VALUE:要写入的值

MODE:数据长度类型

root@npi:/mnt/mnt#./i2cset-f-m0xff-r10x390x040x03
WARNING!ThisprogramcanconfuseyourI2Cbus,causedatalossandworse!
Iwillwritetodevicefile/dev/i2c-1,chipaddress0x39,
dataaddress0x04,data0x03(masked),modebyte.
Continue?[Y/n]y
Oldvalue0x00,writemask0xff,willwrite0x03
Continue?[Y/n]y
Value0x03written,readbackmatched
root@npi:/mnt/mnt#

把写入寄存器的值读出来。确认与我们写入的值相同。

root@npi:/mnt/mnt#./i2cdump-f-y-r0x00-0x0f10x39
Nosizespecified(usingbyte-dataaccess)
0123456789abcdef0123456789abcdef
00:00000000030000007000000000000000....?...p.......
root@npi:/mnt/mnt#

i2ctransfer

i2ctransfer通过一次传输发送用户定义的I2C消息,用于创建I2C消息并将其作为一次传输合并发送。

Usage:i2ctransfer[-f][-y][-v][-V][-a]I2CBUSDESC[DATA][DESC[DATA]]...
I2CBUSisanintegeroranI2Cbusname
DESCdescribesthetransferintheform:{r|w}LENGTH[@address]
1)read/write-flag2)LENGTH(range0-65535)3)I2Caddress(uselastoneifomitted)
DATAareLENGTHbytesforawritemessage.Theycanbeshortenedbyasuffix:
=(keepvalueconstantuntilLENGTH)
+(increasevalueby1untilLENGTH)
-(decreasevalueby1untilLENGTH)
p(usepseudorandomgeneratoruntilLENGTHwithvalueasseed)

Example(bus0,read8byteatoffset0x64fromEEPROMat0x50):
#i2ctransfer0w1@0x500x64r8
Example(sameEEPROM,atoffset0x42write0xff0xfe...0xf0):
#i2ctransfer0w17@0x500x420xff-

I2CBUS:i2c总线编号

DESC:{r | w}<消息长度>[@设备地址]

{r | w}指定消息是读还是写

<消息长度>指定在此消息中读取或写入的字节数。它被解析为一个无符号的16位整数

[@设备地址]指定此消息要访问的芯片的7位地址,并且是整数。

#参数2为i2c2,w2表示写两个字节,@0x39为i2c设备(注意要7位地址),0x02 0xd3 为高低位地址,r1为读取的数据是一个byte。
root@npi:/mnt/mnt#./i2ctransfer-f-y1w2@0x600x020xd3r1
0x00

总结

本文只是抛砖引玉,i2c-tools还有更多的使用方法,需要大家在实际工作中去探索。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • I2C总线
    +关注

    关注

    8

    文章

    390

    浏览量

    60916
  • LINUX内核
    +关注

    关注

    1

    文章

    316

    浏览量

    21644
  • I2C接口
    +关注

    关注

    1

    文章

    125

    浏览量

    25190

原文标题:推荐一个好用的i2c调试小工具

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    飞凌嵌入式ElfBoard ELF 1板卡-Linux下i2c-tools的交叉编译

    Linux下i2c-tools的交叉编译1.下载地址:https://archive.kernel.org/oldwiki/i2c.wiki.kernel.org/index.php
    发表于 06-19 09:41

    飞凌嵌入式ElfBoard ELF 1板卡-i2c与从设备通讯编程示例之i2c-tools工具使用

    注意:学习资料可在ElfBoard官方网站“资料”专区获取。介绍i2c-tools是一个专门调试i2c接口的开源工具,可以获取挂载的设备及设备地址,具有在对应的设备上读取和设置寄存器值
    发表于 10-29 16:27

    飞凌嵌入式ElfBoard EL 1板卡-i2c与从设备通讯编程示例之i2c-tools工具使用

    介绍i2c-tools是一个专门调试i2c接口的开源工具,可以获取挂载的设备及设备地址,具有在对应的设备上读取和设置寄存器值等功能。在ELF 1的资料包当中,已经放置了下载好的源码,路
    发表于 11-01 09:33

    i2c-tools的移植和使用

    1 下载i2c-tools-3.1.1.tar.bz22 解压后修改MakefileCC =arm-linux-gnueabihf-gccLDFLAGS += -static3 make 成功后会
    发表于 09-25 17:04

    【NanoPi2试用体验】nanopi2使用linux i2cdetect失败

    linux有一个i2c工具i2c-tools,使用源代码编译出i2cdetect,不过在nanopi2的的边系统中运行失败,[59.328
    发表于 01-20 17:49

    树莓派系列教程10:I2C

    以下两行并保存退出。i2c-bcm2708i2c-dev二、i2c-tools安装i2c-tools,这个工具
    发表于 03-28 13:56

    【创龙AM4379 Cortex-A9试用体验】3.i2c设备在am4379开发板上的应用

    观的看到这个接口。另外两个接口从文档AM437x_Technical Reference Manual.pdf中可以找到一些记载,后面使用i2c-tools工具也可以查看到。本来应该先说说IIC的协议,不过
    发表于 07-18 15:25

    迅为-iMX6ULL开发板-i2c测试工具

    /pub/software/utils/i2c-tools/,这里下载的 4.1 版本,下载完后拷贝后 Ubuntu,解压 tar -vxf i2c-tools-4.1.tar.gz,清理
    发表于 09-25 10:57

    迅为-iMX6ULL开发板-i2c测试工具

    ://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/,这里下载的 4.1 版本,下载完后拷贝后 Ubuntu,解压 tar -vxf i2c-tools-4.1.tar.gz,清理
    发表于 10-23 10:56

    STM32F103硬件I2C Slave的相关资料分享

    MCU:STM32F103IDE:STM32CubeIDEHAL库硬件I2C当作Slave,模拟EEPROM行为测试工具:树莓派为I2C主机,使用I2C-tools进行测试配置
    发表于 02-17 06:59

    请问如何将i2ctools移植到rk3399开发板上呢

    i2c-tools是什么呢?i2ctools工具支持哪些功能?请问如何将i2ctools移植到rk3399开发板上呢?
    发表于 03-07 07:46

    在RK3288 Android7系统下使用i2c-tools

    在SDK中目录添加i2c-tools源码em3288_mid_android-7.1\\external\\i2c-tools-4.1在 i2c-tools 目录下新建 Android.mk 文件
    发表于 10-12 16:18

    请问ch32v307加i2c tools编译出错是哪里引起的?

    故障复现步骤:studio里创建ch32v307-r1的开发板工程(sdk版本1.0.8)打开i2c硬件设备软件包里勾选i2c-tools然后编译报错:In file included from
    发表于 01-11 14:56

    STM32F103硬件I2C Slave

    MCU:STM32F103IDE:STM32CubeIDEHAL库硬件I2C当作Slave,模拟EEPROM行为测试工具:树莓派为I2C主机,使用I2C-tools进行测试配置
    发表于 12-20 19:38 52次下载
    STM32F103硬件<b class='flag-5'>I2C</b> Slave

    i2c-tools工具介绍

    i2c-tools 简介 在嵌入式开发中,有时候需要确认硬件是否正常连接,设备是否正常工作,设备的地址是多少等等,这里我们就需要使用一个用于测试I2C 总线的工具i2c-tools
    的头像 发表于 07-27 16:12 2286次阅读