bme680-driver-fork/bme680_internal.h

314 lines
11 KiB
C
Raw Normal View History

/**
2016-06-22 14:23:09 +02:00
*
****************************************************************************
* Copyright (C) 2017 - 2018 Bosch Sensortec GmbH
2016-06-22 14:23:09 +02:00
*
* File : bme680_internal.h
*
* Date: 5 May 2017
2016-06-22 14:23:09 +02:00
*
* Revision : 2.2.0 $
2016-06-22 14:23:09 +02:00
*
* Usage: Sensor Driver for BME680 sensor
*
****************************************************************************
*
* \section Disclaimer
*
* Common:
* Bosch Sensortec products are developed for the consumer goods industry.
* They may only be used within the parameters of the respective valid
* product data sheet. Bosch Sensortec products are provided with the
* express understanding that there is no warranty of fitness for a
* particular purpose.They are not fit for use in life-sustaining,
* safety or security sensitive systems or any system or device
* that may lead to bodily harm or property damage if the system
* or device malfunctions. In addition,Bosch Sensortec products are
* not fit for use in products which interact with motor vehicle systems.
* The resale and or use of products are at the purchasers own risk and
* his own responsibility. The examination of fitness for the intended use
* is the sole responsibility of the Purchaser.
*
* The purchaser shall indemnify Bosch Sensortec from all third party
* claims, including any claims for incidental, or consequential damages,
* arising from any product use not covered by the parameters of
* the respective valid product data sheet or not approved by
* Bosch Sensortec and reimburse Bosch Sensortec for all costs in
* connection with such claims.
*
* The purchaser must monitor the market for the purchased products,
* particularly with regard to product safety and inform Bosch Sensortec
* without delay of all security relevant incidents.
*
* Engineering Samples are marked with an asterisk (*) or (e).
* Samples may vary from the valid technical specifications of the product
* series. They are therefore not intended or fit for resale to third
* parties or for use in end products. Their sole purpose is internal
* client testing. The testing of an engineering sample may in no way
* replace the testing of a product series. Bosch Sensortec assumes
* no liability for the use of engineering samples.
* By accepting the engineering samples, the Purchaser agrees to indemnify
* Bosch Sensortec from all claims arising from the use of engineering
* samples.
*
* Special:
* This software module (hereinafter called "Software") and any information
* on application-sheets (hereinafter called "Information") is provided
* free of charge for the sole purpose to support your application work.
* The Software and Information is subject to the following
* terms and conditions:
*
* The Software is specifically designed for the exclusive use for
* Bosch Sensortec products by personnel who have special experience
* and training. Do not use this Software if you do not have the
* proper experience or training.
*
* This Software package is provided `` as is `` and without any expressed
* or implied warranties,including without limitation, the implied warranties
* of merchantability and fitness for a particular purpose.
*
* Bosch Sensortec and their representatives and agents deny any liability
* for the functional impairment
* of this Software in terms of fitness, performance and safety.
* Bosch Sensortec and their representatives and agents shall not be liable
* for any direct or indirect damages or injury, except as
* otherwise stipulated in mandatory applicable law.
*
* The Information provided is believed to be accurate and reliable.
* Bosch Sensortec assumes no responsibility for the consequences of use
* of such Information nor for any infringement of patents or
2016-06-22 14:23:09 +02:00
* 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 Bosch. Specifications mentioned in the Information are
* subject to change without notice.
2016-06-22 14:23:09 +02:00
**************************************************************************/
/*! \file bme680_internal.h
\brief BME680 Sensor Driver internal support Header File */
#ifndef _BME680_INTERNAL_H
#define _BME680_INTERNAL_H
/***************************************************************************
Header files
****************************************************************************/
/***************************************************************************
Macros Enums, Constants only sensor Specific constants
****************************************************************************/
/* bme680_internal.h */
/* Pre-processor switch for separating between I2C and SPI addresses */
#define BME680_CALIB_SPI_ADDR_1 (0x09)
#define BME680_CALIB_SPI_ADDR_2 (0x61)
#define BME680_PAGE0_SPI_ID_REG (0x50)
#define BME680_CALIB_I2C_ADDR_1 (0x89)
#define BME680_CALIB_I2C_ADDR_2 (0xE1)
#define BME680_PAGE0_I2C_ID_REG (0xD0)
#define BME680_OVERSAMP_TEMP_SHIFT (0x03)
#define BME680_GAS_WAIT_STEP_SIZE (477)
#define BME680_SENS_CONF_LEN (0x06)
#define BME680_SENS_HEATR_CONF_LEN (0x15)
2016-06-22 14:23:09 +02:00
#define BME680_TRUE (1)
#define BME680_FALSE (0)
#define BME680_CALIB_PARAM_SIZE ((u8)41)
#define BME680_PAGE0_INTERFACE_SPI ((u8)0)
#define BME680_PAGE1_INTERFACE_SPI ((u8)1)
#define BME680_CALIB_DATA_LENGTH_GAS (25)
#define BME680_CALIB_DATA_LENGTH (16)
#define BME680_BIT_MASK_H1_DATA (0x0F)
#define BME680_FIELD_ZERO (0)
#define BME680_FIELD_ONE (1)
#define BME680_FIELD_TWO (2)
#define BME680_FIELD_ONE_OFFSET (17)
#define BME680_FIELD_TWO_OFFSET (34)
#define BME680_FIELD_SIZE (17)
/* Sensor Specific constants */
#define BME680_GAS_BIT_MASK (0x00C0)
#define BME680_GAS_WAIT_MAX_TIMER_VALUE (0x3F)
#define BME680_GAS_WAIT_MIN_TIMER_VALUE (0x00)
#define BME680_PROFILE_MAX (10)
#define BME680_ADDR_SPI_MEM_PAGE (0x73)
#define BME680_ADDR_OP_MODE (0x74)
#define BME680_ADDR_SENS_CONF_START (0x5A)
2016-06-22 14:23:09 +02:00
#define BME680_ADDR_FIELD_0 (0x1D)
#define BME680_ADDR_SENSOR_CONFIG (0x70)
#define BME680_ADDR_RES_HEAT_VAL (0x00)
#define BME680_ADDR_RES_HEAT_RANGE (0x02)
#define BME680_ADDR_RANGE_SWITCHING_ERR (0x04)
/* Section 3.2: Sub-register addresses, masks and bit shifts */
#define BME680_MASK_OP_MODE (0xFC)
#define BME680_MASK_HEATR_CTRL (0xF7)
#define BME680_MASK_ODR_3 (0x7F)
#define BME680_MASK_ODR_2_0 (0x1F)
#define BME680_MASK_RUN_GAS (0xEF)
#define BME680_MASK_PROF_INDEX (0xF0)
#define BME680_MASK_OSRS_HUM (0xF8)
#define BME680_MASK_OSRS_PRES (0xE3)
#define BME680_MASK_OSRS_TEMP (0x1F)
#define BME680_MASK_FILTER (0xE3)
#define BME680_MASK_NEW_DATA (0x7F)
#define BME680_MASK_GAS_MEAS_STAT (0xBF)
#define BME680_MASK_TPHG_MEAS_STAT (0xDF)
#define BME680_MASK_GAS_MEAS_INDEX (0xF0)
#define BME680_MASK_GAS_RANGE (0xF0)
#define BME680_MASK_GAS_VALID (0xDF)
#define BME680_MASK_HEATR_STAB (0xEF)
#define BME680_MASK_SPI_3W_INT (0xBF)
#define BME680_MASK_SPI_3W_EN (0xFE)
#define BME680_MASK_MEM_PAGE (0xEF)
#define BME680_MASK_RES_HEAT_RANGE (0xCF)
#define BME680_MASK_RANGE_ERR (0x0F)
/* Section : Register settings/values */
/* Lengths to support burst reads/writes */
#define BME680_SINGLE_FIELD_LENGTH (15)
#define BME680_LEN_ALL_FIELD_SIZE (49)
#define BME680_ADDR_FIELD_0_STATUS (0x1D)
#define BME680_ADDR_FIELD_1_STATUS (0x2E)
#define BME680_ADDR_FIELD_2_STATUS (0x3F)
#define BME680_ADDR_FIELD_0_TEMP1 (0x22)
#define BME680_ADDR_FIELD_0_TEMP2 (0x27)
#define BME680_ADDR_FIELD_1_TEMP1 (0x33)
#define BME680_ADDR_FIELD_1_TEMP2 (0x38)
#define BME680_ADDR_FIELD_2_TEMP1 (0x44)
#define BME680_ADDR_FIELD_2_TEMP2 (0x49)
#define BME680_ADDR_FIELD_0_PRESS (0x1F)
#define BME680_ADDR_FIELD_1_PRESS (0x30)
#define BME680_ADDR_FIELD_2_PRESS (0x41)
#define BME680_ADDR_FIELD_0_HUM (0x25)
#define BME680_ADDR_FIELD_1_HUM (0x36)
#define BME680_ADDR_FIELD_2_HUM (0x47)
#define BME680_ADDR_FIELD_0_GAS (0x2A)
#define BME680_ADDR_FIELD_1_GAS (0x3B)
#define BME680_ADDR_FIELD_2_GAS (0x4C)
/*******************************************************/
/* Array Index to Field data mapping*/
/********************************************************/
/* For Calibration Data*/
#define DIG_T2_LSB_REG (1)
#define DIG_T2_MSB_REG (2)
#define DIG_T3_REG (3)
#define DIG_P1_LSB_REG (5)
#define DIG_P1_MSB_REG (6)
#define DIG_P2_LSB_REG (7)
#define DIG_P2_MSB_REG (8)
#define DIG_P3_REG (9)
#define DIG_P4_LSB_REG (11)
#define DIG_P4_MSB_REG (12)
#define DIG_P5_LSB_REG (13)
#define DIG_P5_MSB_REG (14)
#define DIG_P7_REG (15)
#define DIG_P6_REG (16)
#define DIG_P8_LSB_REG (19)
#define DIG_P8_MSB_REG (20)
#define DIG_P9_LSB_REG (21)
#define DIG_P9_MSB_REG (22)
#define DIG_P10_REG (23)
#define DIG_H2_MSB_REG (25)
#define DIG_H2_LSB_REG (26)
#define DIG_H1_LSB_REG (26)
#define DIG_H1_MSB_REG (27)
#define DIG_H3_REG (28)
#define DIG_H4_REG (29)
#define DIG_H5_REG (30)
#define DIG_H6_REG (31)
#define DIG_H7_REG (32)
#define DIG_T1_LSB_REG (33)
#define DIG_T1_MSB_REG (34)
#define DIG_GH2_LSB_REG (35)
#define DIG_GH2_MSB_REG (36)
#define DIG_GH1_REG (37)
#define DIG_GH3_REG (38)
/* For TPHG data */
#define FIELD_0_MEAS_STATUS_0 (0)
#define FIELD_0_MEAS_STATUS_1 (1)
#define FIELD_0_GAS_RL_LSB (14)
/*!
@brief data frame includes temperature, pressure, humidity
and gas data*/
#define BME680_DATA_FRAME_PRESSURE_MSB_DATA ((u8)2)
#define BME680_DATA_FRAME_PRESSURE_LSB_DATA ((u8)3)
#define BME680_DATA_FRAME_PRESSURE_XLSB_DATA ((u8)4)
#define BME680_DATA_FRAME_TEMPERATURE1_MSB_DATA ((u8)5)
#define BME680_DATA_FRAME_TEMPERATURE1_LSB_DATA ((u8)6)
#define BME680_DATA_FRAME_TEMPERATURE1_XLSB_DATA ((u8)7)
#define BME680_DATA_FRAME_HUMIDITY_MSB_DATA ((u8)8)
#define BME680_DATA_FRAME_HUMIDITY_LSB_DATA ((u8)9)
#define BME680_DATA_FRAME_GAS_MSB_DATA ((u8)13)
#define BME680_DATA_FRAME_GAS_LSB_DATA ((u8)14)
/* Positions to support indexing in an array */
#define BME680_INDEX_CTRL_GAS_0 (0)
#define BME680_INDEX_CTRL_GAS_1 (1)
#define BME680_INDEX_CTRL_HUM (2)
#define BME680_INDEX_CTRL_MEAS (4)
#define BME680_INDEX_CONFIG (5)
/* Constants to store the bit shift parameters */
#define BME680_SHIFT_OP_MODE (0)
#define BME680_SHIFT_HEATR_CTRL (3)
#define BME680_SHIFT_ODR_3 (4)
#define BME680_SHIFT_ODR_2_0 (5)
#define BME680_SHIFT_RUN_GAS (4)
#define BME680_SHIFT_PROF_INDEX (0)
#define BME680_SHIFT_OSRS_HUM (0)
#define BME680_SHIFT_OSRS_TEMP (5)
#define BME680_SHIFT_OSRS_PRES (2)
#define BME680_SHIFT_FILTER (2)
#define BME680_SHIFT_NEW_DATA (7)
#define BME680_SHIFT_GAS_MEAS_STAT (6)
#define BME680_SHIFT_TPHG_MEAS_STAT (5)
#define BME680_SHIFT_GAS_MEAS_INDEX (0)
#define BME680_SHIFT_GAS_RANGE (0)
#define BME680_SHIFT_GAS_VALID (5)
#define BME680_SHIFT_HEATR_STAB (4)
#define BME680_SHIFT_SPI_3W_INT (6)
#define BME680_SHIFT_SPI_3W_EN (0)
#define BME680_SHIFT_SPI_MEM_PAGE (4)
#define BME680_SHIFT_RES_HEAT_RANGE (4)
#define BME680_SHIFT_RANGE_ERR (4)
#define BME680_ONE (1)
#define BME680_TWO (2)
#define BME680_THREE (3)
#define BME680_GEN_READ_DATA_LENGTH ((u8)1)
#define BME680_GEN_WRITE_DATA_LENGTH ((u8)1)
/* bme680_internal.h */
/***************************************************************************
Module globals, typedefs
****************************************************************************/
/***************************************************************************
Function definitions
****************************************************************************/
#endif