410c手把手安卓系统控制I2C光流传感器

需要调用的模块

本文所使用的I/O主要有如下三个部分
 I2C接口
 UART接口
 USB接口

需要使用的硬件外设如下
Grove Digital Light Sensor
上文中提到的UART转USB1.8v线

内核的定制

首先我们需要对内核进行重新配置,从而添加我们的设备驱动

重新编译内核

在96board官网下载我们的最新Android 5.1版本

官方提供的内核目前默认无法识别我们的I2C光传感器,因此我们需要在内核中重新编译并添加驱动

首先在官方网站下载Linux Android的BSP包,将其clone并编译

编译内核指令

首先切换到源目录下
进入build目录
Lunch msm8916_64-userdebug
启动kernel config:执行命令
Make-j8 kernelconfig
注:j8为电脑核心数目,取决于我们进行编译电脑的配置

接下来我们就可以在界面上看到如下图所示的界面了:

410c手把手安卓系统控制I2C光流传感器_第1张图片

在kernel编译选项中选择TAOS TSL2560,TSL2562 and TSL2563 ambient light sensor
410c手把手安卓系统控制I2C光流传感器_第2张图片
保存并从kernel configmenu中退出
这里写图片描述
如果我们在设备上添加了一个新驱动,那么我们需要在Makefile中做出更改,并在kernel/driovers中的Kconfig文件添加正确的路劲,从而能够追溯到正确的设备驱动Kconfig文件。 该步骤能够在kernel config 中添加新的入口,从而能够在config界面中进行选择,驱动文件需要添加到同样的目录中,与Kconfig文件以及Makefile文件一样

打开/kernel/arch/amd64/boot/dts/qcom/apq8016-sb.dtsi并添加如下的代码
&soc {
i2c@78b6000 {

tsl2561@29 { /* Grove digital light sensor */
compatible = “taos,tsl2561”;
reg = <0x29>;
}
保存文件并运行如下命令:
Make –j8 bootimage

Boot.img将会在/out/target/product/msm8916_64/boot.img

78b6000是BLSP的地址,用于配置I2C通讯,我们将此传感器连接到I2C-0设备上

将kernel烧写到DragonBoard 410c上

在上电时按住按钮音量下键,我们可以将410c设置为fastboot模式。一旦进入fastboot模式,我们就可以使用命令行将boot.img烧写到410c中
fastboot flash boot boot.img
将DragonBoard 410c上的J8引脚连接到PCA9306传感器中
按如下连接方式:
410c手把手安卓系统控制I2C光流传感器_第3张图片
PIN #37 VREF2 of PCA9306 VCC of grove light sensor
PIN #39 “-“on Bread Board
PIN #35 VREF1 of PCA9306
PIN #15 (I2C0_SCL) SCL1 of PCA9306
PIN #17 (I2C0_SDA) SDA1 of PCA9306
PCA9306 GND to “-“on Bread Board
VREF2 of PCA9306 VCC of Digital Light Sensor
SCL2 of PCA9306 SCL of Digital Light Sensor
SDA2 of PCA9306 SDA of Digital Light Sensor
“-“ from Bread Board GND of Digital Light Senso

连接UART转USB线到电脑上

PIN #11 UART1_TX
PIN #13 UART1_RX
PIN #1 GND

参考我的文章进行连接

测试硬件

根据如上的操作,我们已经可以在启动后检测到设备了
首先在kernel的trace中找到如下信息:
tsl2563 0-0029: model 5, rev. 0
如果你没有USB转UART,我们可以通过ADB进行登录
adb shell
su
dmesg
随着shell启动,我们进入到目录/sys/bus/i2c/devices/i2c-0下
我们可以看到设备0-0029,0x29表示的是传感器的I2C地址
cd /sys/bus/i2c/devices/i2c-0/0-0029/iio:device0
cat in_illuminance0_input
接下来我们就能看到作为输出的一个整数值,不断地遮挡或打光到传感器上,并执行
cat in_illuminance0_input
指令,我们就可以看到一个不断变化的光流值了

你可能感兴趣的:(410c手把手安卓系统控制I2C光流传感器)