目录
Gsensor driver. 1
一、Gsensor文件建立与编译... 1
二、Gsensor的原理图... 2
三、Gsensor的相关配置... 2
四、Gsensor I2C 读写... 3
五、X、Y、Z轴数据的获取... 4
六、Gsensor加速度算法... 8
七、驻车监控功能:... 9
八、Xxx 调试总结:... 11
Gsensor driver
G-sensor中文是重力传感器的意思(英文全称是Gravity-sensor),它能够感知到加速力的变化,加速力就是当物体在加速过程中作用在物体上的力,比如晃动、跌落、上升、下降等各种移动变化都能被G-sensor转化为电信号,然后通过微处理器的计算分析后,就能够完成程序设计好的功能,比如汽车在行驶过程中突然加速前进或静止或剧烈震动,从而触发紧急录影,以及驻车监控功能。
一、Gsensor文件建立与编译
驱动文件路径:peripheral\g_sensor
建立A_GSensor_MEMS_XXX.c、A_GSensor_MEMS_XXX.h
添加kconfig 选项
config G_SENSOR_MEMS_XXX
bool"G_SENSOR_MEMS_XXX"
default n
Gsensor编译:
ifdef CONFIG_G_SENSOR_MEMS_XXX
libperipheral-objs += $(GSENSORPATH)/A_GSensor_MEMS_XXX.o
endif
二、Gsensor的原理图
GsensorXXX的原理图与LIS3DE pin to pin,(XXX 无INT2.) XXX的引脚4和6分别是SCL和SDA并与A__I2C_CHANNEL2相连接,9脚为INT2脚,连接DSP PWC_wkup1,用于驻车监控唤醒。INT1 为硬件gpio 中断,并未使用。
三、Gsensor的相关配置
寄存器地址的配置
/* Reg address defination */
#define GSENSOR_MEMS_XXX_I2C_ADDR 0x30
//Digital Gyro Register Define
#define REG_WHO_AM_I 0x04 /*xx change*/
#define REG_POWER_DOWN_CTRL 0X01 /*xx add*/
#define REG_ACTION 0X02 /*xx add*/
#define REG_MOTION_THRESHOLD 0X03 /*xx add*/
#define REG_START_DATA_READ 0X04 /*xx add*/
#define REG_STATUS 0X05 /*xx add*/
//06h~0Dh: Data registers
#define REG_X_L 0x06
#define REG_X_H 0x07
#define REG_Y_L 0x08
#define REG_Y_H 0x09
#define REG_Z_L 0x0A
#define REG_Z_H 0x0B
#define REG_INT_CFG 0X15 /*xx add*/
#define REG_CTRL1 0x16
#define REG_CTRL2 0x17
#define REG_CTRL3 0x18
#define REG_OVERSAMPLING 0x38
#define MAX_REG (REG_OVERSAMPLING)
Gsensor初始化的设置
int GSENSOR_MEMS_XXX_Init(void)
{
UINT16 Data;
UINT8 temp[10] = {0};
if((GSENSOR_MEMS_XXX_Read( REG_WHO_AM_I, &Data) != OK) || (Data !=WHO_AM_I_ID)){
GSENSOR_DBG("[%s]: Addr: 0x%02x, Data: 0x%02x", __func__,REG_WHO_AM_I, (UINT8)Data);
return NG;
}else{
MY_MSG("REG_WHO_AM_I:0x%X",Data);
}
GSENSOR_MEMS_XXX_Write( REG_POWER_DOWN_CTRL, 0x02); // Powerdown reset
A_KAL_TaskSleep(3);
GSENSOR_MEMS_XXX_Write(0x03,0x1F);//
GSENSOR_MEMS_XXX_Write(0x38,0x9F);//
GSENSOR_MEMS_XXX_Write(0x15,0x00);//0x00 low active 0x08 high active(INT PIN)
GSENSOR_MEMS_XXX_Write(0x16,0x00);//
GSENSOR_MEMS_XXX_Write(0x02,0x02);//
GSENSOR_MEMS_XXX_Write(0x02,0x00);//