提示:Linux系统中,一些传感器通常挂载在I2C总线上,比如RTC和CSI等。我们在调试这些设备的时候,就需要了解Linux系统中操作I2C总线的方法。本文将详细介绍在Linux系统中如何调试I2C设备。


1、查看系统中的I2C总线: ls /dev/i2c-* 或 i2cdetect -l

在这里插入图片描述
在这里插入图片描述


2、列出系统中I2C总线上挂载的设备:i2cdetect -y -r 0/1/2
在这里插入图片描述

attachments-2020-04-a0ZQEANV5e9969257b103.png可以看到,在I2C-1上挂载了一个设备,这个设备的I2C地址为0x51


3、查看设备寄存器的值:i2cdump -f -y 1 0x51

在这里插入图片描述


4、设置寄存器的值:i2cset -f -y 1 0x51 0x00 0xaa

在这里插入图片描述


5、i2cdump和i2cset默认设备的寄存器是8位的,而有些设备的寄存器则是16位的,因此16位的设备不能再通过i2cdump和i2cset来调试,只能使用i2ctransfer,首先在buildroot/busybox中查找是否提供该命令:
在这里插入图片描述

attachments-2020-04-5e4F8UB75e996ddad9d5f.png可以看到是没有提供i2ctransfer的,我们需要通过单独编译i2c-tools的方式来移植,i2c-tools源码可以在这里下载https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/

我们选择最新的4.1版本

attachments-2020-04-f76BvjVg5e996eac6a2bb.png在ubuntu下解压并进入解压目录,新建install目录

attachments-2020-04-rP1OXeHW5e99724a014a2.png

在ubuntu下解压并进入解压目录,新建install目录
attachments-2020-04-SGJAfwRo5e9975b529883.png

接着编辑Makefile,设置交叉编译链和安装目录:
在这里插入图片描述

执行make开始编译
在这里插入图片描述

执行make install 安装
在这里插入图片描述

将install/bin、install/sbin和install/lib目录的所有文件拷贝到板子文件系统/bin,/sbin和/lib目录下

attachments-2020-04-MucleCWQ5e997689ce31b.png

6、使用i2ctransfer读8位寄存器:i2ctransfer -f -y 1 w1@0x51 0xff r1
在这里插入图片描述

使用i2ctransfer读16位寄存器:i2ctransfer -f -y 1 w1@0x51 0x01 r2

attachments-2020-04-HfCrma265e997bf1dffa3.png

使用i2ctransfer写8位寄存器的值:i2ctransfer -f -y 1 w2@0x51 0xff 0x11

在这里插入图片描述

使用i2ctransfer写16位寄存器的值:i2ctransfer -f -y 1 w3@0x51 0x01 0xaa 0xbb

Logo

更多推荐