一、 i2c-tools工具认识,安装。
i2c-tools工具是一个专门调试i2c的,开源,可获取挂载的设备及设备地址,还可以在对应的设备指定寄存器设置值或者获取值等功能。
从开源网站 http://dl.lm-sensors.org/i2c-tools/releases/
下载i2c-tools,
修改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
上图可以看到,总共注册了8条i2c总线
2.2、检测第7条总线上器件:i2cdetect -r -y 7
1,上面有UU和和数字显示,UU表示此地址已经加载了驱动,具体有没有设备不一定,显示有数字说明探测到设备了,也可能是系统的,不知是谁的。
2,不是所有的i2c设备都能探测到,有些16位寄存器i2c设备无法探测到,可以尝试使用i2ctransfer去尝试读写来判断当前地址是否存在设备;。
另外一种说法:
1、UU表示设备地址的两个从设备已经被驱动占用了,当你卸载掉对应的驱动后,此UU就会变成数据了。
2、数字是,这个地址被芯片使用并应答,dts已经配置了,但是没有加载驱动。
2.3、查看器件所有寄存器的值:i2cdump -f -y i2c总线 器件地址
列出所有存在的寄存器的值,如0x00=71,0x01=73,以此类推。
2.4 、获取单个寄存器的值:i2cget -y -f i2c总线 器件地址
读取i2c4总线上的,设备地址为0x4c的设备,寄存器0x00的值,为0x71
2.5、设置单个寄存器的值:i2cset -y -f i2c总线 器件地址
如图写0xa0的值
三、测试i2ctransfer
i2cdump、i2cget、i2cset只适用于读写8位的寄存器地址, 功能完全可由i2ctransfer代替
1、i2ctransfer写
如:i2ctransfer -f -y 1 w3@0x36 0x50 0x81 0x01
0x36为I2C设备的地址, 0x5081为要写的寄存器地址, 0x01为写入的值。
2、i2ctransfer读
i2ctransfer -f -y 1 w2@0x36 0x30 0x0A r3
0x36为I2C设备的地址, 0x300A为要读的寄存器地址, r3为连续读3Byte, 0x56 0x08 0x41 为读到的寄存器的值。
文章摘抄学习来自:https://blog.csdn.net/weixin_35367646/article/details/116593331