[RK3399][Android7.1] 调试笔记 I2C总线上设备探测工具的使用与解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33487044/article/details/86372575
平台 内核版本 安卓版本
RK3399 Linux4.4 Android7.1

1、需求:

若不知道设备I2C的地址怎么办?
若想知道I2C总线上有哪些I2C设备?
若想快速知道I2C总线上设备是否传输正常?

2、方法:

使用rk在驱动层做了一个通用i2c测试代码,但默认是没有没有开启的。

3、修改代码:

3.1、配置文件修改

文件目录:arch/arm64/configs/nanopi4_nougat_defconfig

CONFIG_I2C_ROCKCHIP=y

3.2、Kconfig 文件修改

文件目录:kernel/drivers/i2c/busses/Kconfig
在这里插入图片描述

3.3、Makefile修改

文件目录:kernel/drivers/i2c/busses/Makefile

obj-$(CONFIG_I2C_ROCKCHIP)	+= i2c-rockchip.o

然后编译会时出错,还需修改源码:
在这里插入图片描述

3.4、修改源文件

打开:kernel/drivers/i2c/busses/i2c-rockchip.c
注释头文件
在这里插入图片描述

后接着编译:
在这里插入图片描述

再注释文件rockchip_i2c_probe函数中的
在这里插入图片描述

扫描二维码关注公众号,回复: 5000614 查看本文章

还有:
rockchip_i2c_xfer函数中:
在这里插入图片描述

在这里插入图片描述

4、开始探测I2C设备:

首先看下我们的新产生的节点:
在这里插入图片描述

我的RK3399板子I2C2下面接了一个热成像传感器,其地址是0X33
在这里插入图片描述

开始使用RK的探测工具探测I2C2
echo 2 > /dev/i2c_detect

输出如下:
在这里插入图片描述

5、驱动程序分析

首先看一下:
在这里插入图片描述

重点看一下i2c_detect_write函数:
在这里插入图片描述

在这里插入图片描述

可以看出是从设备地址0x010x80地址区间的探测
第一步:设置地址detect_set_client(&client, addr, nr);
在这里插入图片描述

第二步:尝试读取一个字节ret = detect_read(&client, val, 1);
在这里插入图片描述
若设备地址不正确那么返回-6
若设备地址正确返回1

第三步:若返回1后把地址存起来

ret = detect_read(&client, val, 1);
if (ret > 0)
	sprintf(buf, "%s  0x%02x", buf, addr);

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/86372575