diff options
Diffstat (limited to 'driver/baro_bmp280.h')
-rw-r--r-- | driver/baro_bmp280.h | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/driver/baro_bmp280.h b/driver/baro_bmp280.h new file mode 100644 index 0000000000..586ed6677b --- /dev/null +++ b/driver/baro_bmp280.h @@ -0,0 +1,205 @@ +/* Copyright 2016 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +/** \mainpage +* +**************************************************************************** +* Copyright (C) 2012 - 2015 Bosch Sensortec GmbH +* +* File : bmp280.h +* +* Date : 2015/03/27 +* +* Revision : 2.0.4(Pressure and Temperature compensation code revision is 1.1) +* +* Usage: Sensor Driver for BMP280 sensor +* +**************************************************************************** +* +* \section License +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* +* Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* +* Neither the name of the copyright holder nor the names of the +* contributors may be used to endorse or promote products derived from +* this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER +* OR CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +* OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, +* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE +* +* The information provided is believed to be accurate and reliable. +* The copyright holder assumes no responsibility +* for the consequences of use +* of such information nor for any infringement of patents or +* other rights of third parties which may result from its use. +* No license is granted by implication or otherwise under any patent or +* patent rights of the copyright holder. +**************************************************************************/ +/* BMP280 pressure and temperature module for Chrome EC */ + +#ifndef __CROS_EC_BARO_BMP280_H +#define __CROS_EC_BARO_BMP280_H + +/* + * The addr field of barometer_sensor for I2C: + * + * +-------------------------------+---+ + * | 7 bit i2c address | 0 | + * +-------------------------------+---+ + */ + +/* + * Bit 1 of 7-bit address: 0 - If SDO is connected to GND + * Bit 1 of 7-bit address: 1 - If SDO is connected to Vddio + */ +#define BMP280_I2C_ADDRESS1 ((0x76) << 1) +#define BMP280_I2C_ADDRESS2 ((0x77) << 1) +/* + * CHIP ID + */ +#define BMP280_CHIP_ID 0x58 +/************************************************/ +/* CALIBRATION PARAMETERS DEFINITION */ +/************************************************/ + +#define BMP280_TEMPERATURE_CALIB_DIG_T1_LSB_REG 0x88 + +/************************************************/ +/* REGISTER ADDRESS DEFINITION */ +/************************************************/ +#define BMP280_CHIP_ID_REG 0xD0 +#define BMP280_RST_REG 0xE0 /*Softreset Register */ +#define BMP280_STAT_REG 0xF3 /*Status Register */ +#define BMP280_CTRL_MEAS_REG 0xF4 /*Ctrl Measure Register */ +#define BMP280_CONFIG_REG 0xF5 /*Configuration Register */ +#define BMP280_PRESSURE_MSB_REG 0xF7 /*Pressure MSB Register */ +#define BMP280_PRESSURE_LSB_REG 0xF8 /*Pressure LSB Register */ +#define BMP280_PRESSURE_XLSB_REG 0xF9 /*Pressure XLSB Register */ +/************************************************/ +/* POWER MODE DEFINITION */ +/************************************************/ +/* Sensor Specific constants */ +#define BMP280_SLEEP_MODE 0x00 +#define BMP280_FORCED_MODE 0x01 +#define BMP280_NORMAL_MODE 0x03 +#define BMP280_SOFT_RESET_CODE 0xB6 +/************************************************/ +/* STANDBY TIME DEFINITION */ +/************************************************/ +#define BMP280_STANDBY_TIME_1_MS 0x00 +#define BMP280_STANDBY_TIME_63_MS 0x01 +#define BMP280_STANDBY_TIME_125_MS 0x02 +#define BMP280_STANDBY_TIME_250_MS 0x03 +#define BMP280_STANDBY_TIME_500_MS 0x04 +#define BMP280_STANDBY_TIME_1000_MS 0x05 +#define BMP280_STANDBY_TIME_2000_MS 0x06 +#define BMP280_STANDBY_TIME_4000_MS 0x07 +/************************************************/ +/* OVERSAMPLING DEFINITION */ +/************************************************/ +#define BMP280_OVERSAMP_SKIPPED 0x00 +#define BMP280_OVERSAMP_1X 0x01 +#define BMP280_OVERSAMP_2X 0x02 +#define BMP280_OVERSAMP_4X 0x03 +#define BMP280_OVERSAMP_8X 0x04 +#define BMP280_OVERSAMP_16X 0x05 +/************************************************/ +/* DEFINITIONS FOR ARRAY SIZE OF DATA */ +/************************************************/ +#define BMP280_PRESSURE_DATA_SIZE 3 +#define BMP280_DATA_FRAME_SIZE 6 +#define BMP280_CALIB_DATA_SIZE 24 +/*******************************************************/ +/* SAMPLING PERIOD COMPUTATION CONSTANT */ +/*******************************************************/ +#define BMP280_STANDBY_CNT 8 +#define T_INIT_MAX (20) /* (20/16 = 1.25ms) */ +#define T_MEASURE_PER_OSRS_MAX (37) /* (37/16 = 2.31ms) */ +#define T_SETUP_PRESSURE_MAX (10) /* (10/16 = 0.62ms) */ + +/* + * This is the measurement time required for pressure and temp + */ +#define BMP280_COMPUTE_TIME \ + ((T_INIT_MAX + T_MEASURE_PER_OSRS_MAX * \ + (((1 << BMP280_OVERSAMP_TEMP) >> 1) + \ + ((1 << BMP280_OVERSAMP_PRES) >> 1)) + \ + (BMP280_OVERSAMP_PRES ? T_SETUP_PRESSURE_MAX : 0) + 15) / 16) + +/* + * These values are selected as per Bosch recommendation for + * standard handheld devices, with temp sensor not being used + */ +#define BMP280_OVERSAMP_PRES BMP280_OVERSAMP_4X +#define BMP280_OVERSAMP_TEMP BMP280_OVERSAMP_SKIPPED +/*******************************************************/ +/* GET DRIVER DATA */ +/*******************************************************/ +#define BMP280_GET_DATA(_s) \ + ((struct bmp280_drv_data_t *)(_s)->drv_data) +/**************************************************************/ +/* STRUCTURE and ENUM DEFINITIONS */ +/**************************************************************/ + +/* + * struct bmp280_calib_param_t - Holds all device specific + * calibration parameters + * + * @dig_T1 to dig_T3: calibration Temp data + * @dig_P1 to dig_P9: calibration Pressure data + * @t_fine: calibration t_fine data + * + */ +struct bmp280_calib_param_t { + uint16_t dig_T1; + int16_t dig_T2; + int16_t dig_T3; + uint16_t dig_P1; + int16_t dig_P2; + int16_t dig_P3; + int16_t dig_P4; + int16_t dig_P5; + int16_t dig_P6; + int16_t dig_P7; + int16_t dig_P8; + int16_t dig_P9; + + int32_t t_fine; +}; + +/* + * struct bmp280_t - This structure holds BMP280 initialization parameters + * @calib_param: calibration data + * @rate: rate set + */ +struct bmp280_drv_data_t { + + struct bmp280_calib_param_t calib_param; + int rate; +}; + +extern const struct accelgyro_drv bmp280_drv; +extern struct bmp280_drv_data_t bmp280_drv_data; +#endif |