CCS811 - Indoor Air Quality Sensor

Detailed Description

Driver for the Cambridge CMOS Sensors CCS811 gas and indoor air quality sensor.

Functions

uint32_t CCS811_deInit (void)
De-initializes the chip.
void CCS811_dumpRegisters (void)
Dumps the registers of the CSS811.
uint32_t CCS811_getHardwareID (uint8_t *hardwareID)
Reads Hardware ID from the CSS811 sensor.
uint32_t CCS811_getMeasurement (uint16_t *eco2, uint16_t *tvoc)
Reads measurement data (eCO2 and TVOC) from the CSS811 sensor.
uint32_t CCS811_getRawData (uint16_t *current, uint16_t *rawData)
Gets the latest readings from the sense resistor of the CSS811 sensor.
uint32_t CCS811_getStatus (uint8_t *status)
Reads the status of the CSS811 sensor.
uint32_t CCS811_init (void)
Initializes the chip and performs firmware upgrade if required.
bool CCS811_isDataAvailable (void)
Checks if new measurement data available.
uint32_t CCS811_readMailbox (uint8_t id, uint8_t length, uint8_t *data)
Reads data from a specific Mailbox address.
uint32_t CCS811_setEnvData (int32_t tempData, uint32_t rhData)
Writes temperature and humidity values to the environmental data regs.
uint32_t CCS811_setMeasureMode (uint8_t measMode)
Sets the measurement mode of the CSS811 sensor.
uint32_t CCS811_softwareReset (void)
Performs software reset on the CCS811.
uint32_t CCS811_startApplication (void)
Switches the CSS811 chip from boot to application mode.

Error Codes

#define CCS811_OK 0x0000
#define CCS811_ERROR_APPLICATION_NOT_PRESENT 0x0001
#define CCS811_ERROR_NOT_IN_APPLICATION_MODE 0x0002
#define CCS811_ERROR_DRIVER_NOT_INITIALIZED 0x0003
#define CCS811_ERROR_I2C_TRANSACTION_FAILED 0x0004
#define CCS811_ERROR_INIT_FAILED 0x0005
#define CCS811_ERROR_FIRMWARE_UPDATE_FAILED 0x0006

Register Addresses

#define CCS811_ADDR_STATUS 0x00
#define CCS811_ADDR_MEASURE_MODE 0x01
#define CCS811_ADDR_ALG_RESULT_DATA 0x02
#define CCS811_ADDR_RAW_DATA 0x03
#define CCS811_ADDR_ENV_DATA 0x05
#define CCS811_ADDR_NTC 0x06
#define CCS811_ADDR_THRESHOLDS 0x10
#define CCS811_ADDR_HW_ID 0x20
#define CCS811_ADDR_HW_VERSION 0x21
#define CCS811_ADDR_FW_BOOT_VERSION 0x23
#define CCS811_ADDR_FW_APP_VERSION 0x24
#define CCS811_ADDR_ERR_ID 0xE0
#define CCS811_ADDR_FW_ERASE 0xF1
#define CCS811_ADDR_FW_PROGRAM 0xF2
#define CCS811_ADDR_FW_VERIFY 0xF3
#define CCS811_ADDR_APP_START 0xF4
#define CCS811_ADDR_SW_RESET 0xFF

Measure mode value definitions

#define CCS811_MEASURE_MODE_DRIVE_MODE_SHIFT 4
#define CCS811_MEASURE_MODE_DRIVE_MODE_IDLE 0x00
#define CCS811_MEASURE_MODE_DRIVE_MODE_1SEC 0x10
#define CCS811_MEASURE_MODE_DRIVE_MODE_10SEC 0x20
#define CCS811_MEASURE_MODE_DRIVE_MODE_60SEC 0x30
#define CCS811_MEASURE_MODE_DRIVE_MODE_RAW 0x40
#define CCS811_MEASURE_MODE_INTERRUPT 0x08
#define CCS811_MEASURE_MODE_THRESH 0x04

Macro Definition Documentation

#define CCS811_ADDR_ALG_RESULT_DATA   0x02

Algorithm result

Definition at line 68 of file ccs811.h .

Referenced by CCS811_dumpRegisters() , and CCS811_getMeasurement() .

#define CCS811_ADDR_APP_START   0xF4

Application start

Definition at line 81 of file ccs811.h .

#define CCS811_ADDR_ENV_DATA   0x05

Temperature and Humidity data can be written to enable compensation

Definition at line 70 of file ccs811.h .

Referenced by CCS811_dumpRegisters() , and CCS811_setEnvData() .

#define CCS811_ADDR_ERR_ID   0xE0

Error ID

Definition at line 77 of file ccs811.h .

Referenced by CCS811_dumpRegisters() .

#define CCS811_ADDR_FW_APP_VERSION   0x24

Firmware Application Version

Definition at line 76 of file ccs811.h .

Referenced by CCS811_dumpRegisters() .

#define CCS811_ADDR_FW_BOOT_VERSION   0x23

Firmware Boot Version

Definition at line 75 of file ccs811.h .

Referenced by CCS811_dumpRegisters() .

#define CCS811_ADDR_FW_ERASE   0xF1

Firmware erase

Definition at line 78 of file ccs811.h .

#define CCS811_ADDR_FW_PROGRAM   0xF2

Firmware programming

Definition at line 79 of file ccs811.h .

#define CCS811_ADDR_FW_VERIFY   0xF3

Firmware verification

Definition at line 80 of file ccs811.h .

#define CCS811_ADDR_HW_ID   0x20

Hardware ID

Definition at line 73 of file ccs811.h .

Referenced by CCS811_dumpRegisters() , and CCS811_getHardwareID() .

#define CCS811_ADDR_HW_VERSION   0x21

Hardware Version

Definition at line 74 of file ccs811.h .

Referenced by CCS811_dumpRegisters() .

#define CCS811_ADDR_MEASURE_MODE   0x01

Measurement mode and conditions register

Definition at line 67 of file ccs811.h .

Referenced by CCS811_dumpRegisters() , and CCS811_setMeasureMode() .

#define CCS811_ADDR_NTC   0x06

Provides the voltage across the reference resistor and the voltage across the NTC resistor

Definition at line 71 of file ccs811.h .

Referenced by CCS811_dumpRegisters() .

#define CCS811_ADDR_RAW_DATA   0x03

Raw ADC data values for resistance and current source used

Definition at line 69 of file ccs811.h .

Referenced by CCS811_dumpRegisters() , and CCS811_getRawData() .

#define CCS811_ADDR_STATUS   0x00

Status register

Definition at line 66 of file ccs811.h .

Referenced by CCS811_dumpRegisters() , CCS811_getStatus() , and CCS811_startApplication() .

#define CCS811_ADDR_SW_RESET   0xFF

Software reset

Definition at line 82 of file ccs811.h .

Referenced by CCS811_softwareReset() .

#define CCS811_ADDR_THRESHOLDS   0x10

Thresholds for operation when interrupts are only generated when eCO2 ppm crosses a threshold

Definition at line 72 of file ccs811.h .

Referenced by CCS811_dumpRegisters() .

#define CCS811_ERROR_APPLICATION_NOT_PRESENT   0x0001

Application firmware is not present

Definition at line 54 of file ccs811.h .

Referenced by CCS811_startApplication() .

#define CCS811_ERROR_DRIVER_NOT_INITIALIZED   0x0003

The driver is not initialized

Definition at line 56 of file ccs811.h .

#define CCS811_ERROR_FIRMWARE_UPDATE_FAILED   0x0006

The firmware update was unsuccessful

Definition at line 59 of file ccs811.h .

#define CCS811_ERROR_I2C_TRANSACTION_FAILED   0x0004
#define CCS811_ERROR_INIT_FAILED   0x0005

The initialization failed

Definition at line 58 of file ccs811.h .

Referenced by CCS811_init() .

#define CCS811_ERROR_NOT_IN_APPLICATION_MODE   0x0002

The part is not in application mode

Definition at line 55 of file ccs811.h .

Referenced by CCS811_startApplication() .

#define CCS811_MEASURE_MODE_DRIVE_MODE_10SEC   0x20

IAQ Mode 2, a measurement is performed every 10 seconds

Definition at line 92 of file ccs811.h .

#define CCS811_MEASURE_MODE_DRIVE_MODE_1SEC   0x10

IAQ Mode 1, a measurement is performed every second

Definition at line 91 of file ccs811.h .

#define CCS811_MEASURE_MODE_DRIVE_MODE_60SEC   0x30

IAQ Mode 3, a measurement is performed every 60 seconds

Definition at line 93 of file ccs811.h .

#define CCS811_MEASURE_MODE_DRIVE_MODE_IDLE   0x00

Idle mode, measurements are disabled

Definition at line 90 of file ccs811.h .

#define CCS811_MEASURE_MODE_DRIVE_MODE_RAW   0x40

IAQ Mode 4, Raw Data Mode, a measurement is performed every 250ms for external algorithms

Definition at line 94 of file ccs811.h .

#define CCS811_MEASURE_MODE_DRIVE_MODE_SHIFT   4

DRIVE_MODE field bit shift value

Definition at line 89 of file ccs811.h .

#define CCS811_MEASURE_MODE_INTERRUPT   0x08

Interrupt generation enable

Definition at line 95 of file ccs811.h .

#define CCS811_MEASURE_MODE_THRESH   0x04

Enable interrupt when eCO2 level exceeds threshold

Definition at line 96 of file ccs811.h .

Function Documentation

uint32_t CCS811_deInit ( void )

De-initializes the chip.

Returns
Returns zero on OK, non-zero otherwise

Definition at line 113 of file ccs811.c .

References BOARD_gasSensorEnable() , BOARD_gasSensorWake() , and CCS811_OK .

uint32_t CCS811_getHardwareID ( uint8_t * hardwareID )

Reads Hardware ID from the CSS811 sensor.

Parameters
[out] hardwareID The Hardware ID of the chip (should be 0x81)
Returns
Returns zero on OK, non-zero otherwise

Definition at line 132 of file ccs811.c .

References CCS811_ADDR_HW_ID , and CCS811_readMailbox() .

Referenced by CCS811_init() .

uint32_t CCS811_getMeasurement ( uint16_t * eco2,
uint16_t * tvoc
)

Reads measurement data (eCO2 and TVOC) from the CSS811 sensor.

Parameters
[out] eco2 The eCO2 level read from the sensor
[out] tvoc The TVOC level read from the sensor
Returns
Returns zero on OK, non-zero otherwise

Definition at line 334 of file ccs811.c .

References I2C_TransferSeq_TypeDef::addr , BOARD_gasSensorWake() , BOARD_i2cBusSelect() , I2C_TransferSeq_TypeDef::buf , CCS811_ADDR_ALG_RESULT_DATA , CCS811_ERROR_I2C_TRANSACTION_FAILED , CCS811_OK , I2C_TransferSeq_TypeDef::data , I2C_TransferSeq_TypeDef::flags , I2C_FLAG_WRITE_READ , I2CSPM_Transfer() , i2cTransferDone , and I2C_TransferSeq_TypeDef::len .

uint32_t CCS811_getRawData ( uint16_t * current,
uint16_t * rawData
)

Gets the latest readings from the sense resistor of the CSS811 sensor.

Parameters
[out] current The value of current through the sensor
[out] rawData The raw ADC reading of the voltage across the sensor with the selected current
Returns
Returns zero on OK, non-zero otherwise

Definition at line 389 of file ccs811.c .

References I2C_TransferSeq_TypeDef::addr , BOARD_gasSensorWake() , BOARD_i2cBusSelect() , I2C_TransferSeq_TypeDef::buf , CCS811_ADDR_RAW_DATA , CCS811_ERROR_I2C_TRANSACTION_FAILED , CCS811_OK , I2C_TransferSeq_TypeDef::data , I2C_TransferSeq_TypeDef::flags , I2C_FLAG_WRITE_READ , I2CSPM_Transfer() , i2cTransferDone , and I2C_TransferSeq_TypeDef::len .

uint32_t CCS811_getStatus ( uint8_t * status )

Reads the status of the CSS811 sensor.

Parameters
[out] status The content of the CSS811 Status Register
Returns
Returns zero on OK, non-zero otherwise.

Definition at line 151 of file ccs811.c .

References CCS811_ADDR_STATUS , and CCS811_readMailbox() .

Referenced by CCS811_isDataAvailable() .

uint32_t CCS811_init ( void )

Initializes the chip and performs firmware upgrade if required.

Returns
Returns zero on OK, non-zero otherwise

Definition at line 76 of file ccs811.c .

References BOARD_gasSensorEnable() , BOARD_gasSensorWake() , CCS811_ERROR_INIT_FAILED , CCS811_getHardwareID() , CCS811_OK , and UTIL_delay() .

bool CCS811_isDataAvailable ( void )

Checks if new measurement data available.

Returns
True if new data available, otherwise false

Definition at line 167 of file ccs811.c .

References CCS811_getStatus() , and CCS811_OK .

uint32_t CCS811_readMailbox ( uint8_t id,
uint8_t length,
uint8_t * data
)

Reads data from a specific Mailbox address.

Parameters
[in] id The address of the Mailbox register
[in] length The number of bytes to read
[out] data The data read from the sensor
Returns
Returns zero on OK, non-zero otherwise

Definition at line 285 of file ccs811.c .

References I2C_TransferSeq_TypeDef::addr , BOARD_gasSensorWake() , BOARD_i2cBusSelect() , I2C_TransferSeq_TypeDef::buf , CCS811_ERROR_I2C_TRANSACTION_FAILED , CCS811_OK , I2C_TransferSeq_TypeDef::data , I2C_TransferSeq_TypeDef::flags , I2C_FLAG_WRITE_READ , I2CSPM_Transfer() , i2cTransferDone , and I2C_TransferSeq_TypeDef::len .

Referenced by CCS811_dumpRegisters() , CCS811_getHardwareID() , CCS811_getStatus() , and CCS811_startApplication() .

uint32_t CCS811_setEnvData ( int32_t tempData,
uint32_t rhData
)

Writes temperature and humidity values to the environmental data regs.

Parameters
[in] tempData The environmental temperature in milli-Celsius
[in] rhData The relative humidity in milli-percent
Returns
Returns zero on OK, non-zero otherwise

Definition at line 930 of file ccs811.c .

References I2C_TransferSeq_TypeDef::addr , BOARD_gasSensorWake() , BOARD_i2cBusSelect() , I2C_TransferSeq_TypeDef::buf , CCS811_ADDR_ENV_DATA , CCS811_ERROR_I2C_TRANSACTION_FAILED , CCS811_OK , I2C_TransferSeq_TypeDef::data , I2C_TransferSeq_TypeDef::flags , I2C_FLAG_WRITE , I2CSPM_Transfer() , i2cTransferDone , and I2C_TransferSeq_TypeDef::len .

uint32_t CCS811_setMeasureMode ( uint8_t measMode )

Sets the measurement mode of the CSS811 sensor.

Parameters
[in] measMode The desired measurement mode
Returns
Returns zero on OK, non-zero otherwise

Definition at line 487 of file ccs811.c .

References I2C_TransferSeq_TypeDef::addr , BOARD_gasSensorWake() , BOARD_i2cBusSelect() , I2C_TransferSeq_TypeDef::buf , CCS811_ADDR_MEASURE_MODE , CCS811_ERROR_I2C_TRANSACTION_FAILED , CCS811_OK , I2C_TransferSeq_TypeDef::data , I2C_TransferSeq_TypeDef::flags , I2C_FLAG_WRITE , I2CSPM_Transfer() , i2cTransferDone , and I2C_TransferSeq_TypeDef::len .

uint32_t CCS811_startApplication ( void )

Switches the CSS811 chip from boot to application mode.

Returns
Returns zero on OK, non-zero otherwise

Definition at line 242 of file ccs811.c .

References CCS811_ADDR_STATUS , CCS811_ERROR_APPLICATION_NOT_PRESENT , CCS811_ERROR_NOT_IN_APPLICATION_MODE , and CCS811_readMailbox() .