2022年Android系统下sensor驱动架构简介及使用说明 .pdf
-
资源ID:27251598
资源大小:723.19KB
全文页数:9页
- 资源格式: PDF
下载积分:4.3金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年Android系统下sensor驱动架构简介及使用说明 .pdf
1手机事业部本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。1Sensor 驱动架构简介及使用说明文件状态:草稿 正式发布正在修改文件标识:Company-Project-RD-UR当前版本:1.1作者:罗伟完成日期:2012-06-10版本日 期描述作 者审核V1.02012-6-10针对各种sensor 的共性与差异编写的统一架构,支持挂接重力传感器、地磁传感器、陀螺仪、光感、距离感应、温度感应等设备, 可以很方便地兼容不同厂家的各种 sensor。罗伟V1.12012-8-9增加 SENSOR 自动兼容,所有SENSOR 均可以同时选上, SENSOR 自动探测和识别。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 2手机事业部本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。21.sensor 架构简介1.1编写目的到目前为止, sensor 的 android 硬件抽象层已经统一,但是各种产品和项目中仍用到了各种形形色色的传感器,并且驱动基本上是重新编写和调试一遍,然后重新解决一轮BUG。调试的时间少则一天,多则数天,如果驱动写的不好,容易引入 BUG。鉴于这种情况,对所有sensor 的共性与差异进行思考后发现,其实不同的 sensor 工作原理是相似的,仅有部分有差异,例如初始化、寄存器地址、上报方式、 IOCTL等几个,其他的大部分都是相同的。因此花了数天时间设计和编写了这套 sensor 架构,该架构特别注意以下几点:兼容性好、使用简单、结构清晰、可读性强。1.2结构图整个代码存放于文件夹sensors下, 包括两个主文件sensor-dev.c和 sensor-i2c.c,几个芯片级文件夹accel、compass、gyro、lsensor、psensor、temperature 。其中,sensor-dev.c 对 sensor 操作进行统一处理,包括驱动挂载、中断或轮训处理、IOCTL处理、差异性接口的统一回调处理等,sensor-i2c.c 是所有 sensor 的 i2C 操作接口,包括带寄存器和不带寄存器两种;accel 目录下存放不同类型的gsensor;compass目录下存放不同类型的地磁传感器;gyro 目录下存放不同类型的陀螺仪;lsensor目录下存放不同类型的光传感器;psensor 目录下存放不同类型的距离传感器;temperature 目录下存放不同类型的温度传感器。当然,有新的传感器类型的需求和在后面增加文件夹,例如压力传感器。图 1.1 为 sensor 驱动架构的目录树,目前仅包括手机和MID 的 SDK板上用到的所有sensor,其他的可以类似地添加。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 3手机事业部本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。3图 1.1sensor 驱动架构的目录树1.3架构介绍要 了 解 该 驱 动 架 构 , 先 了 解 驱 动 中 使 用 到 的 三 个 重 要 结 构 体sensor_private_data、sensor_operate、sensor_platform_data ,其中sensor_private_data 是各种 sensor的私有统一结构体, sensor_operate 是使用者调试新 sensor时需要根据具体情况填充的结构体, sensor_platform_data 是加载驱动前需要在board 里填充的结构体, 不同的 sensor需要填充的变量有所差异。struct sensor_operate char *name;/芯片名称int type;/sensor类型见sensor_type定义intid_i2c;/从sensor_id中选择,新SENSOR需要添加,该值与board文件中的type选项(如.type= gs_lis3dh)对应,不能错。intrange2;/上报值的范围int read_reg;/读数据的寄存器地址名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 4手机事业部本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。4int read_len;/读数据的长度,单位byteint id_reg;/读CHIP_ID的寄存器地址int id_data;/正确的CHIP_ID值,需要用于判断设备是否存在int precision;/数据的精度int ctrl_reg;/控制寄存器,一般用于开启和关闭设备、初始化等int ctrl_data;/控制寄存器写入的值int int_ctrl_reg;/中断控制寄存器,不需要填-1intint_status_reg;/中断状态寄存器,可用于清中断,不需要填-1int trig;/中断触发方式,如、IRQF_TRIGGER_LOW|IRQF_ONESHOT,注意,本驱动使用了线程中断方式,可以在 中 断中 直 接操 作I2C或SPI等 阻 塞式 操作, 对于电 平类 中 断请 增 加IRQF_ONESHOT。int (*active)(struct i2c_client *client, int enable, int rate);/开关回调接口int (*init)(structi2c_client *client);/sensor芯片初始化回调接口int (*report)(structi2c_client *client);/芯片读数据和上报回调接口int (*suspend)(struct i2c_client *client);/休眠操作接口,暂不需要int (*resume)(struct i2c_client *client);/唤醒操作接口,暂不需要struct miscdevice *misc_dev;/私 有misc设 备 , 若 填 充 则sensor-dev.c文件则不会注册misc设备和android硬件抽象层交互,需要在芯片级驱动中实现,如AK8975.C。;/* Platform data for the sensor */struct sensor_private_data int type;/sensor类型,存放sensor_operate的typestruct i2c_client *client;/i2c客户端struct input_dev *input_dev;/输入设备struct work_struct work;struct delayed_work delaywork;/延时工作队列,可用名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 5手机事业部本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。5struct sensor_axis axis;/存放sensor三维数值x,y,zchar sensor_data40;/存放从sensor读到的具体数据,最大40bytesatomic_t data_ready;/sensor数据准备好标志wait_queue_head_t data_ready_wq;/数据准备好唤醒队列struct mutex data_mutex;/存取数据操作互斥锁struct mutex operation_mutex;/IOCTL操作互斥锁struct mutex sensor_mutex;/sensor读写数据互斥锁struct mutex i2c_mutex;/I2C操作互斥锁int status_cur;/ sensor开关状态int start_count;/sensor开启次数int devid;/读到的CHIP_ID值struct i2c_device_id *i2c_id;/I2C_ID table,其中包括了驱动名称struct sensor_platform_data *pdata;/板级sensor数据结构struct sensor_operate *ops;/芯片驱动填充接口struct file_operations fops;/misc devfopsstruct miscdevice miscdev;/misc device,用于IOCTL#ifdef CONFIG_HAS_EARLYSUSPENDstructearly_suspend early_suspend;/一级休眠#endif;struct sensor_platform_data int type;/sensor类型见sensor_type定义,必填,不能错int irq;/中断号int power_pin;/电源控制GPIO,部分sensor用到int reset_pin;/reset GPIO,部分sensor用到int irq_enable;/使用中断方式填1,使用轮训填0,必填int poll_delay_ms;/读取数据的频率,单位ms,必填int x_min;/最小有效值,x低于该值忽略,目前陀螺仪使用int y_min;/最小有效值,y低于该值忽略,目前陀螺仪使用名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - 6手机事业部本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。6int z_min;/最小有效值,z低于该值忽略,目前陀螺仪使用unsigned char address;/ I2C设备地址signed char orientation9;/sensor方向矩阵short m_layout433;/指南针方向矩阵char project_name64;/指南针名称,可选int (*init_platform_hw)(void);/ sensor的gpio初始化函数void (*exit_platform_hw)(void);/sensor的gpio反初始化函数int (*power_on)(void);/上电操作函数,可选int (*power_off)(void);/关电操作函数,可选;在芯片级驱动文件中通过sensor_register_slave()接口将填充好的结构体传给主文件 sensor-dev.c,sensor-dev.c回调芯片级驱动中填充的寄存器地址和函数接口。2.架构使用说明2.1驱动实现采用该架构后,调试一款新的sensor 驱动只需要填充和实现结构体sensor_operate 即可,图2.1,2.2,2.3,2.4 分别为重力传感器mma8452、指南针 akm8975、陀螺仪l3g4200d、光传感器cm3217 所填充的回调接口。图 2.1 重力传感器mma8452 回调接口名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - 7手机事业部本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。7图 2.2 指南针 akm8975 回调接口图 2.3 陀螺仪 l3g4200d 回调接口图 2.4 光传感器 cm3217 回调接口因此,调试一款新的sensor 驱动,需要做的事情是填充上各个寄存器地址、实现芯片级的初始化、芯片使能与关闭这些差异化操作。2.2Board 文件填充几 个 sensor 板 级 重 要 填 充 示 例 如 下 所 示 , 所 有 sensor均 使 用 结 构 体sensor_platform_data ,其中, type,irq_enable ,poll_delay_ms 为每个 sensor 的必填项。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 8手机事业部本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。8名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 9手机事业部本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。93、内核配置如果希望SENSOR 自动兼容,可以选上所有SENSOR ,程序会自动探测。选项配置参考如下:handle gsensor,compass,gyroscope,lsensor psensor etc-名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -