i2c驱动应用开发专题(一)之i2c-tools工具使用

一、 i2c-tools工具认识,安装。

i2c-tools工具是一个专门调试i2c的,开源,可获取挂载的设备及设备地址,还可以在对应的设备指定寄存器设置值或者获取值等功能。

从开源网站 http://dl.lm-sensors.org/i2c-tools/releases/ 下载i2c-tools,
i2c驱动应用开发专题(一)之i2c-tools工具使用_第1张图片
修改makefile文件,交叉编译,直接make,进行编译,安装:sudo make install

编译完成后在tools/文件夹下会有如下几个可执行文件,i2cdetect, i2cdump, i2cget, i2cset,将i2cdetect, i2cdump,
i2cget, i2cset push到设备就可以调试了
在这里插入图片描述

二、测试
1、错误认知;

i2c-tools使用之前需要修改设备树和配置相关驱动,其实,只要内核开启,设备树开启相关i2c总线,将设备挂载在硬件上,接上设备即可检测到该总线上i2c芯片。

2、命令介绍:

i2cdetect:检测i2c芯片
i2cdump:查看寄存器值
i2cget:获取单个寄存器值(8位寄存器)
i2cset:设置单个寄存器值(8位寄存器)
i2ctransfer:一次传输多字节数据(16位寄存器)
参数介绍:
-y:禁用交互模式。
-f:强制访问设备。
-r:写入后立即读回该值。

2.1、列出所有可用的i2c总线:i2cdetect -l
i2c驱动应用开发专题(一)之i2c-tools工具使用_第2张图片
i2c驱动应用开发专题(一)之i2c-tools工具使用_第3张图片
上图可以看到,总共注册了8条i2c总线
2.2、检测第7条总线上器件:i2cdetect -r -y 7
i2c驱动应用开发专题(一)之i2c-tools工具使用_第4张图片
1,上面有UU和和数字显示,UU表示此地址已经加载了驱动,具体有没有设备不一定,显示有数字说明探测到设备了,也可能是系统的,不知是谁的。
2,不是所有的i2c设备都能探测到,有些16位寄存器i2c设备无法探测到,可以尝试使用i2ctransfer去尝试读写来判断当前地址是否存在设备;。

另外一种说法:
1、UU表示设备地址的两个从设备已经被驱动占用了,当你卸载掉对应的驱动后,此UU就会变成数据了。
2、数字是,这个地址被芯片使用并应答,dts已经配置了,但是没有加载驱动。

2.3、查看器件所有寄存器的值:i2cdump -f -y i2c总线 器件地址
i2c驱动应用开发专题(一)之i2c-tools工具使用_第5张图片
列出所有存在的寄存器的值,如0x00=71,0x01=73,以此类推。

2.4 、获取单个寄存器的值:i2cget -y -f i2c总线 器件地址
在这里插入图片描述
读取i2c4总线上的,设备地址为0x4c的设备,寄存器0x00的值,为0x71

2.5、设置单个寄存器的值:i2cset -y -f i2c总线 器件地址
i2c驱动应用开发专题(一)之i2c-tools工具使用_第6张图片
如图写0xa0的值

三、测试i2ctransfer

i2cdump、i2cget、i2cset只适用于读写8位的寄存器地址, 功能完全可由i2ctransfer代替
i2c驱动应用开发专题(一)之i2c-tools工具使用_第7张图片
1、i2ctransfer写

如:i2ctransfer -f -y 1 w3@0x36 0x50 0x81 0x01
i2c驱动应用开发专题(一)之i2c-tools工具使用_第8张图片
0x36为I2C设备的地址, 0x5081为要写的寄存器地址, 0x01为写入的值。

2、i2ctransfer读

i2ctransfer -f -y 1 w2@0x36 0x30 0x0A r3
i2c驱动应用开发专题(一)之i2c-tools工具使用_第9张图片
0x36为I2C设备的地址, 0x300A为要读的寄存器地址, r3为连续读3Byte, 0x56 0x08 0x41 为读到的寄存器的值。

文章摘抄学习来自:https://blog.csdn.net/weixin_35367646/article/details/116593331

你可能感兴趣的:(linux,驱动开发,linux)