调试型号为 st3x3x 光距感传感器
mtk 9.0上调试型号为 st3x3x 光距感传感器
1 查看原理图以及gpio映射表可以知道st3x3x 光距感传感器 使用i2c1通道进行通讯,中断引脚为gpio12,由此可以配置st3x3x 光距感传感器 的dts
根据上面的原理图和gpio映射表EINT12_ALPS—>AE12---->gpio12可以得知,st3x3x 光距感传感器中断引脚EINT12_ALPS对应的引脚是gpio12
dts文件配置如下:
dts文件路径为:\kernel-4.4\arch\arm\boot\dts\aiot8362am3_bsp.dts
调试中遇到i2c速率400k时,光距感i2c无法正常通讯的,需要把速率降低到100k,光距感i2c才正常通讯
&pio {alsps_intpin_cfg: alspspincfg {pins_cmd_dat {pins = <MT8167_PIN_12_EINT12__FUNC_GPIO12>;slew-rate = <0>;bias-pull-up = <00>;};};alsps_intpin_default: alspsdefaultcfg {};
};&alsps{pinctrl-names = "pin_default", "pin_cfg";pinctrl-0 = <&alsps_intpin_default>;pinctrl-1 = <&alsps_intpin_cfg>;status = "okay";
};
&i2c1 {pinctrl-names = "default";pinctrl-0 = <&i2c1_pins_a>;status = "okay";
// clock-frequency = <400000>;//调试中遇到i2c速率400k时,光距感i2c无法正常通讯的,需要把速率降低到100k,光距感i2c才正常通讯clock-frequency = <100000>;stk3x3x@47{compatible = "mediatek,stk3x3x";reg = <0x47>;interrupt-parent = <&pio>;interrupts = <12 IRQ_TYPE_LEVEL_LOW 12 0>;debounce = <22 0>; i2c_num = <1>;i2c_addr = <0x47 0 0 0>;power_id = <0xffff>;power_vol = <0>;als_level = <5 9 36 59 82 132 205 273 500 845 1136 1545 2364 4655 6982>;als_value = <30 40 80 130 180 290 450 600 1100 1860 2500 3400 5200 10240 10240 10240>;polling_mode_ps = <0>;polling_mode_als = <1>;ps_threshold_high = <1700>;ps_threshold_low = <1500>;is_batch_supported_ps = <0>;is_batch_supported_als = <0>;is_batch_supported = <0>;firlen = <16>;status = "okay";};}
**2 配置aiot8362am3_bsp_defconfig和aiot8362am3_bsp_debug_defconfig文件以及配置相关的Makefile和Kconfig **
2.1 配置aiot8362am3_bsp_defconfig和aiot8362am3_bsp_debug_defconfig文件
文件路径为:\kernel-4.4\arch\arm\configs\aiot8362am3_bsp_debug_defconfig和\kernel-4.4\arch\arm\configs\aiot8362am3_bsp_defconfig
#alsps
CONFIG_CUSTOM_KERNEL_ALSPS=y
CONFIG_MTK_STK3X3X=y
配置ProjectConfig.mk文件
路径为:\device\mediateksample\aiot8362am3_bsp\ProjectConfig.mk
# alsps sensor
CUSTOM_KERNEL_ALSPS = stk3x3x
**2.2 配置相关的Makefile和Kconfig **
\kernel-4.4\drivers\misc\mediatek\sensors-1.0\alsps\Makefile
obj-$(CONFIG_MTK_STK3X3X) += stk3x3x/
\kernel-4.4\drivers\misc\mediatek\sensors-1.0\alsps\Kconfig
source "drivers/misc/mediatek/sensors-1.0/alsps/stk3x3x/Kconfig"
\kernel-4.4\drivers\misc\mediatek\sensors-1.0\alsps\stk3x3x\Makefile
ccflags-y += -I$(srctree)/drivers/misc/mediatek/sensors-1.0/alsps/inc
ccflags-y += -I$(srctree)/drivers/misc/mediatek/sensors-1.0/hwmon/includeobj-y := stk3x3x.o
\kernel-4.4\drivers\misc\mediatek\sensors-1.0\alsps\stk3x3x\Kconfig
config MTK_STK3X3Xbool "STK3X3X for MediaTek package"default n
\device\mediateksample\aiot8362am3_bsp\ProjectConfig.mk
# alsps sensor
CUSTOM_KERNEL_ALSPS = stk3x3x
3 把 stk3x3x.c放进去编译查看log发现 st3x3x 光距感传感器 i2c是能够通讯成功的,同时相关节点也产生了,由此可以验证st3x3x 光距感传感器 移植成功
光距感驱动相关函数介绍:
static int stk3x3x_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
----->驱动加载函数,读取dts配置,对ic进行初始化设置static int stk3x3x_enable_ps(struct i2c_client *client, int enable, int validate_reg)
ps启动函数,enable = 1 为启动,0为关闭static int stk3x3x_enable_als(struct i2c_client *client, int enable)
als启动函数 enable = 1 为启动,0为关闭static int stk3x3x_i2c_suspend(struct device *dev)
i2c睡眠函数static int stk3x3x_i2c_resume(struct device *dev)
i2c唤醒函数
int stk3x3x_read_ps(struct i2c_client *client, u16 *data)
从0x02读取PS值int stk3x3x_read_als(struct i2c_client *client, u16 *data)
从0x02读取PS值static int stk3x3x_get_ps_value_only(struct stk3x3x_priv *obj, u16 ps)
读取ps是接近还是远离,0接近,1远离static int stk3x3x_get_als_value(struct stk3x3x_priv *obj, u16 als)
根据als_level得到als_valueals_level = <5 9 36 59 82 132 205 273 500 845 1136 1545 2364 4655 6982>;
als_value = <30 40 80 130 180 290 450 600 1100 1860 2500 3400 5200 10240 10240 10240>;atomic_read(&obj->ps_high_thd_val)
读取ps高门限值
atomic_read(&obj->ps_low_thd_val)读取ps低门限值int stk3x3x_write_ps_high_thd(struct i2c_client *client, u16 thd)把ps高门限值写入0x06高8bit把ps高门限值写入0x07低8bitint stk3x3x_write_ps_low_thd(struct i2c_client *client, u16 thd)把ps低门限值写入0x08高8bit把ps低门限值写入0x09低8bitint ps_report_interrupt_data(int value)上报ps的状态给软件上层,0为接近,1为远离mtk节点路径65xx系列:/sys/devices/platform/als_ps/driver/*67xx系列:/sys/bus/devices/platform/als_ps.xx/driver/*节点:
allreg 所有寄存器的值
Config
ps/als
Alslv/alsval
firlen3.1 修改如下文件:
目录:
device/pskyed/project/overlay/frameworks/base/core/res/res/values/config.xml
修改如下:
true
改为 true之后在界面上就会有自动背光的选项。
此时点开自动背光,程序才会调用到驱动中的enable函数,从而开启背光的定时器线程。调试小技巧:
遇到的问题是驱动probe成功了,节点也有了,但是不知道是否初始化OK了。
解决办法:1.adb连上机器,
切到目录:/sys/bus/platform/drivers/als_ps
查看 所以的寄存器:cat allreg
cat allreg
第一个寄存器是sensor的开关,默认自动感光是关闭的。
敲入命令: echo 00 03 > allreg
会打开感光sensor,
此时读取 als的值会发现变化,表示驱动已经正常工作。
调试型号为 st3x3x 光距感传感器相关推荐
- 结合环境光、接近传感以及红外测距的光距感芯片4530A
将接近传感器和环境光传感器封装在一起会推动更紧凑但功能更强的移动电话的发展.接近传感器和环境光传感器要发挥作用都需要接收外界的光线,所以其在系统中的放置与其灵敏度和正常工作是密切相关的.在环境光传感器 ...
- 光距感:环境光传感芯片的工作原理
光距感又称环境光传感器芯片,用来对环境光进行测量,对这种量级的光的测量是由光敏二极管进行的,通过放大,模数转换等处理,将光能量得到量化,通过BB, WLED dirver控制调节,可使系统调整显示屏亮 ...
- 火焰传感器感应有火亮灯代码_智能无线感应灯火了,光感人感2种传感器感应,做照明品牌的几光...
智能无线感应灯火了,光感人感2种传感器感应,做照明品牌的几光 曾经无数次幻想过的一个生活画面 : 清晨推开厨房的门,有一束微弱的光跟随着自动亮起:然后倒一杯温开水给自己:手清扫过橱柜,一束亮光打在厨房 ...
- 传感器自学笔记第十一章——三色RGB学习笔记+高感度声音检测模块+KY-010光遮断传感器+TCRT5000循迹传感器+倾斜模块
作者:GWD 时间:2019.06.28 三色RGB学习笔记(开关量类传感器) 一.学习要点:无 二.手册分析(开关量传感器) 1.产品用途:RGB LED 模块由一个贴片全彩 LED 制成,通过 R ...
- 高通平台 input类 sensor驱动分析 : 光感/距感 stk3x1x driver分析
stk3x1x driver分析 1:注册驱动 定义 i2c_driver static struct i2c_driver stk_ps_driver = {.driver = {.name = D ...
- 距感校准-通话黑屏不亮屏
距离传感器校准-通话黑屏不亮屏 通话黑屏不亮的成因 目前造成通话黑屏问题的原因主要是距感在使能后数据不稳定造成的.在代码中没有充分的去考虑数据不稳定造成的结果,针对数据不稳定进行过滤. 距感动态校准一 ...
- arduino调试BNO080高精准度九轴传感器模块
arduino调试BNO080高精准度九轴传感器模块 原文链接:https://www.yourcee.com/newsinfo/2925867.html 1.简介 2.原理图 3.使用前准备 4.接 ...
- 2021爱智先行者—人体存在感传感器
[本文正在参与"2021爱智先行者-征文大赛"活动]https://mp.weixin.qq.com/s/I2s99dZpbP0QpMiKFneYJA 上次说了在 智能灯光开关 的 ...
- 采用结构光,TOF传感器的立体成像系统,系统架构,设备采购调研
1.TOF结构光 [1]丁津津. TOF三维摄像机的误差分析及补偿方法研究[D].合肥工业大学,2011. 2.3D视频系统框图 [2]杨刚. 基于深度融合和曲面演变的多视点三维重建及其应用[D]. ...
最新文章
- anaconda创建环境
- How React Works (一)首次渲染
- ntpdate[27350]: no server suitable for synchronization found
- 简明python教程在线-简明python教程
- 重载和const形参
- 解决eclipse + pydev 编译过程中有中文的问题
- 线条边框简笔画图片大全_简笔画猪 手抄报图片边框版式大全
- 跑linux编译什么CPU速度快,linux 加快编译速度
- OpenCV-绘制多边形(fillConvexPoly和fillPoly的区别)
- 安装2000数据库的时候挂起
- smtp邮件服务器的作用,smtp服务器是什么意思(smtp服务器作用及使用指南)
- python lcut精确分词_python 分词
- 嵌入式相关开源项目、库、资料
- mac PowerPoint 导出高分辨率图片
- mac 修改vmware的NAT网关
- 理解设计模式——代理模式
- 实验七 动态分区分配方式的模拟
- Windows 10 error code 0x80072efd
- 看完了 2021 CSS 年度报告,我学到了啥?
- Linux界面和字体大小调整
热门文章
- Java操作MongoDB数据库CRUD(增删查改)
- 西南大学校园网客户端共享网络之路由器开wifi
- 用计算机控制神舟十号,计算机控制技术复习题(含部份答案)
- 从FrozenUI中学习CSS的实际解决方案
- 海尔云谷创新中心A座能耗监测系统的应用
- mysql端口查看与修改-netstat命令使用
- vsc code-runner插件运行python文件,解释器更改为ananconda
- lisp提取长方形坐标_如何利用lisp程序一次性提取CAD中点的坐标(不要点击每个点,太多了麻烦)...
- 网安技术与应用(2)——基于DTLS的安全服务器设计
- Android 检测设备是否为模拟器