教你的安卓系统DragonBoard 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为电脑核心数目,取决于我们进行编译电脑的配置
接下来我们就可以在界面上看到如下图所示的界面了:
在kernel编译选项中选择TAOS TSL2560,TSL2562 and TSL2563 ambient light sensor
保存并从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 = ;
}
保存文件并运行如下命令:
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传感器中
按如下连接方式:
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 指令,我们就可以看到一个不断变化的光流值了。
Q:本文使用的I/O主要有哪三个部分?
A:I2C接口、UART接口、USB接口。
Q:需要使用哪些硬件外设?
A:GroveDigitalLightSensor、UART转USB1.8v线。
Q:如何对内核进行重新配置?
A:首先在官方网站下载LinuxAndroid的BSP包,将其clone并编译。切换到源目录下进入build目录,Lunchmsm8916_64-userdebug,启动kernelconfig:执行命令Make-j8kernelconfig(j8为电脑核心数目,取决于编译电脑的配置)。
Q:如何在内核中添加I2C光传感器驱动?
A:在kernel编译选项中选择TAOSTSL2560,TSL2562andTSL2563ambientlightsensor,保存并从kernelconfigmenu中退出。在设备上添加新驱动,需在Makefile中做出更改,并在kernel/driovers中的Kconfig文件添加正确路径,驱动文件添加到与Kconfig文件以及Makefile文件相同目录。打开/kernel/arch/amd64/boot/dts/qcom/apq8016-sb.dtsi并添加相关代码,保存文件并运行Make–j8bootimage。
Q:78b6000的作用是什么?
A:78b6000是BLSP的地址,用于配置I2C通讯,将传感器连接到I2C-0设备上。
Q:如何将kernel烧写到DragonBoard410c上?
A:在上电时按住按钮音量下键,将410c设置为fastboot模式,进入fastboot模式后使用命令行fastbootflashbootboot.img将boot.img烧写到410c中。
Q:如何连接DragonBoard410c上的J8引脚到PCA9306传感器?
A:PIN#37 VREF2ofPCA9306 VCCofgrovelightsensor;PIN#39 “-“onBreadBoard;PIN#35 VREF1ofPCA9306;PIN#15(I2C0_SCL) SCL1ofPCA9306;PIN#17(I2C0_SDA) SDA1ofPCA9306;PCA9306GNDto“-“onBreadBoard;VREF2ofPCA9306 VCCofDigitalLightSensor;SCL2ofPCA9306 SCLofDigitalLightSensor;SDA2ofPCA9306 SDAofDigitalLightSensor;“-“fromBreadBoard GNDofDigitalLightSenso
Q:如何连接UART转USB线到电脑上?
A:PIN#11UART1_TX;PIN#13UART1_RX;PIN#1GND
Q:如果没有USB转UART,如何登录?
A:可以通过ADB进行登录,命令为adbshellsudmesg
Q:如何查看传感器的光流值?
A:随着shell启动,进入到目录/sys/bus/i2c/devices/i2c-0下,看到设备0-0029,cd/sys/bus/i2c/devices/i2c-0/0-0029/iio:device0,执行catin_illuminance0_input指令,不断遮挡或打光到传感器上,就能看到一个不断变化的值。
