• Soc:RK3288
  • Platform:Android 5.1

AL3220

AL3220B有四个RANGE:

Range TYP 时间
Range 1 33.28k 6.53ms
Range 2 8,32k 7.53ms
Range 3 2.08k 11.53ms
Range 4 0.65k 22.5ms

这四个range有不同的分辨率模式,每个range需要的conversion时间不同,总的ALS conversion时间如下:

Conversion time = RANGE time * Mean time + ALS Waiting * 2

注意:最开始调试光感时app获取到的光感总是不稳定,忽高忽低的,原因就是sensor 各个寄存器没有设置好。驱动调试时务必要认真阅读chip spec

状态图

下面是AL3220状态图:

例如,选择精度分辨率为RANGE 3,即2.08k时,各个寄存器需要如下设置:
Mean time=16, Range3 (2.08K), A-dummy=18, ALS Waiting (register 0x06) =100
Conversion time = (11.53 + 18*0.1)*16 + 100*2 = 413.28ms

AL3220寄存器如下:

首先需要enable light sensor,然后设定Ext_Gain and dynamic range for ALS的值,再根据
Conversion time计算公式,将各个值写入相应的寄存器,如下所示:

ret = i2c_smbus_write_byte_data(client, AL3320A_REG_CONFIG,AL3320A_CONFIG_ENABLE);
if (ret < 0)return ret;ret = i2c_smbus_write_byte_data(client, AL3320A_REG_CONFIG_RANGE,AL3320A_RANGE_3 << AL3320A_GAIN_SHIFT);
if (ret < 0)return ret;ret = i2c_smbus_write_byte_data(client, AL3320A_REG_MEAN_TIME,0xf);
if (ret < 0)return ret;ret = i2c_smbus_write_byte_data(client, AL3320A_REG_ADUMMY,0x12);
if (ret < 0)return ret; ret = i2c_smbus_write_byte_data(client, AL3320A_REG_WAIT,0x64);
if (ret < 0)return ret;

这里设定的mean time是0xf,A-dummy的值是0x12, ALS Waiting的值是0x64,因此总的Conversion time是413.28ms,这个Conversion time怎么用呢?

probe

Sensor驱动初始化时sensor_probe()会从dts中获取一个变量” poll_delay_ms”, Conversion time就是这个值。
Sensor驱动采用轮询方式获取光感数据,在sensor_probe()中初始化时会先注册工作队列用于轮询获取光感数据:

sensor_irq_init()   --->INIT_DELAYED_WORK(&sensor->delaywork, sensor_delaywork_func);

当HAL层ioctl打开光感设备/dev/lightsensor时,sensor驱动最终调用schedule_delayed_work()唤起工作队列sensor_delaywork_func,该函数实现如下:

static void  sensor_delaywork_func(struct work_struct *work)
{struct delayed_work *delaywork = container_of(work, struct delayed_work, work);struct sensor_private_data *sensor = container_of(delaywork, struct sensor_private_data, delaywork);struct i2c_client *client = sensor->client;mutex_lock(&sensor->sensor_mutex);  if (sensor_get_data(client) < 0) DBG(KERN_ERR "%s: Get data failed\n",__func__);if(!sensor->pdata->irq_enable)//restart work while pollingschedule_delayed_work(&sensor->delaywork, msecs_to_jiffies(sensor->pdata->poll_delay_ms));//else//{//if((sensor->ops->trig == IRQF_TRIGGER_LOW) || (sensor->ops->trig == IRQF_TRIGGER_HIGH))//enable_irq(sensor->client->irq);//}mutex_unlock(&sensor->sensor_mutex);DBG("%s:%s\n",__func__,sensor->i2c_id->name);
}

调用sensor_get_data(),函数实现如下:

static int sensor_get_data(struct i2c_client *client)
{struct sensor_private_data *sensor =(struct sensor_private_data *) i2c_get_clientdata(client);  int result = 0;result = sensor->ops->report(client);if(result)goto error;/* set data_ready */atomic_set(&sensor->data_ready, 1);/*wake up data_ready  work queue*/wake_up(&sensor->data_ready_wq);error:      return result;
}

AL3220初始化时调用sensor_register_slave()将sensor_operate注册到sensor核心中,这里调用其report方法sensor_report_value,在该函数中,读取sensor的数据并上报。

AL3220光感调试记录相关推荐

  1. ROS上同时预览depth,IR,RGB 调试记录

    ROS上同时预览depth,IR,RGB 调试记录 用rviz同时显示RGB,IR,DEPTH(验证设备:astraprosm,canglong2,deeyea) 1.编译libuvc库 cd lib ...

  2. ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值——bug调试记录

    ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值--bug调试记录 目录 输出结果 1.增加XGBR算法 ...

  3. [Deepin - Pycharm调试记录] Pyinstaller索引系统库问题

    Deepin - Pycharm调试记录 - Pyinstaller索引不到系统库 现象 在Pycharm的Terminal中执行Pyinstaller指令时候遇到如下报错提示 OSError: Py ...

  4. RAISR-master:google图像新压缩技术RAISR的测试代码调试记录(Python实现,没接触过python的小白,内含pip install解决方案)

    RAISR-master:google图像新压缩技术RAISR的测试代码调试记录(Python实现,没接触过python的小白,内含pip install解决方案) 参考文章: (1)RAISR-ma ...

  5. SX1278 FSK 调试记录

    SX1278 FSK 调试记录 先挖个sx1278 FSK的坑慢慢填 手中有两个SX1278模组 是安信可的产品 采用主从模式 SPI访问 MCU是STM32F107 数据格式 说明收据接收的第一步就 ...

  6. 松下MINAS-A6伺服电机调试记录

    松下MINAS-A6伺服电机调试记录 因项目需求,进行松下MINAS-A6伺服电机调试 文章目录 松下MINAS-A6伺服电机调试记录 概述 一.手册数据 二.设备使用 1.驱动器及电机连接 2.设备 ...

  7. Xilinx AXI Crossbar相关调试记录

    Xilinx AXI Crossbar相关调试记录 本文记录在使用Xilinx AXI Crossbar IPcore现象 ** AXI Crossbar IPcore设置如下** 使用AXI Cro ...

  8. android pppd参数介绍,android 3G pppd 调试记录

    android 3G pppd 调试记录. 1.  JAVA 部分 android/development/data/etc/apns-conf_sdk.xml   --->  system/e ...

  9. RV1126 调试记录

    RV1126 调试记录 ######################################################################################## ...

最新文章

  1. django源码笔记-【1】
  2. c语言有重复元素全排列,【求助】全排列 不重复 由小到大 输出 代码
  3. 直线职权::参谋职权::职能职权
  4. 开发办公APP时间估算
  5. Unity 安卓连调profile失败
  6. 容器性能比无容器服务器,【译】容器 vs 无服务器(Serverless)
  7. 页面图片延时加载(附实例下载)
  8. js面向对象2--原型
  9. mfc大观之五、六(消息机制和消息运行)
  10. 利用maven命令将外部jar包导进maven仓库
  11. matlab 画点标号,学习笔记(四)——MATLAB画图
  12. 画图软件gliffy
  13. 关于粒子群算法的两种惯性权重
  14. 联想ghost重装系统_联想电脑不能安装GHOST系统
  15. docer-compose
  16. Mysql数据库操作语句总结(一)
  17. 【MOOC-生物信息学-生物数据库】
  18. 地铁两站之间最短路径查询(python实现)
  19. 潮汕牛肉丸是熟的还是生的 潮汕牛肉生丸和熟丸区别
  20. Threadx 线程调度

热门文章

  1. 阮一峰的ES6---Class的继承
  2. SVN提交代码到分支
  3. 同济大学和东南大学计算机哪个好,2019高考:同为985/211的东南大学和同济大学哪个更好?...
  4. Proteus改变蓝色框框
  5. 基于vue+elementui婚纱摄影网站SSM+java毕业设计源码介绍
  6. php 检测 拍照方向,拍摄照片或视频时如何检查iPhone相机的方向
  7. 【网申投递汇总】截止目前为止,还可以网申的公司 持续更新
  8. 开启1521端口监听_Oracle数据库常用命令、Linux监听配置、Oracle linux下开放1521端口...
  9. 机器学习的一些参考文章
  10. c语言人机猜数,人机猜数游戏程序设计