三轴加速度传感器bma150驱动解析

BMA150 博世 三轴加速度传感器
SPI(4线,3线),i2c,中断引脚
频响+/- 2g,4g,8g;带宽25~1500hz,中断触发内部加速度求值
低功耗,快速唤醒

包含数据寄存器,控制寄存器,状态寄存器,设置寄存器及EEPROM

寄存器读写使用i2c接口,所以需要驱动i2c设备
数据需要获取xyz值,所以可以添加成input设备

用一个bma150_data数据对象来描述整个设备

struct bma150_data {
	struct i2c_client *client;	//i2c 客户端
	struct input_polled_dev *input_polled;	//轮询输入设备
	struct input_dev *input;	//输入设备
	u8 mode;	//记录状态模式
};

如果bma150有中断响应则用输入设备,数据在中断处理完上报
没有则使用轮询输入设备,不断访问数据

bma150的配置信息用一个结构体bma150_cfg去表述

struct bma150_cfg {	//bma150配置
	bool any_motion_int;		/*any-motion 中断*/
	bool hg_int;				/*high-G 中断 */
	bool lg_int;				/*low-G 中断 */
	unsigned char any_motion_dur;	/* Any-motion 持续时间 */
	unsigned char any_motion_thres;	/* Any-motion 阀值 */
	unsigned char hg_hyst;		/* High-G 延迟 */
	unsigned char hg_dur;		/* High-G 持续时间 */
	unsigned char hg_thres;		/* High-G 阀值 */
	unsigned char lg_hyst;		/* Low-G 延迟 */
	unsigned char lg_dur;		/* Low-G 持续时间 */
	unsigned char lg_thres;		/* Low-G 阀值 */
	unsigned char range;		/* 频响 */
	unsigned char bandwidth;	/* 带宽 */
};

三个中断使能值及其中断属性,频响,带宽

驱动i2c设备需要i2c设备驱动及i2c设备
所以板级驱动用I2C_BOARD_INFO("bma150", (0x38))注册i2c设备
内核中bma150.c文件包含bma150芯片的i2c设备驱动
module_i2c_driver(bma150_driver);//声明模块入口出口
加载模块的时候注册bma150对应的i2c设备驱动bma150_driver

static struct i2c_driver bma150_driver = {	//i2c设备驱动
	.driver = {
		.owner	= THIS_MODULE,
		.name	= BMA150_DRIVER,	//"bma150"
		.pm	= &bma150_pm,
	},
	.class		= I2C_CLASS_HWMON,
	.id_table	= bma150_id,	//匹配id表(兼容smb380,bma023)
	.probe		= bma150_probe,	//probe方法
	.remove		= bma150_remove,	//remove方法
};

i2c设备与驱动匹配后会调用驱动的probe方法bma150_probe

static int bma150_probe(struct i2c_client *client,const struct i2c_device_id *id)
{
	const struct bma150_platform_data *pdata = client->
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值