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

I2C transaction failed

Definition at line 57 of file ccs811.h.

Referenced by CCS811_getMeasurement(), CCS811_getRawData(), CCS811_readMailbox(), CCS811_setEnvData(), CCS811_setMeasureMode(), and CCS811_softwareReset().

#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]hardwareIDThe 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]eco2The eCO2 level read from the sensor
[out]tvocThe TVOC level read from the sensor
Returns
Returns zero on OK, non-zero otherwise

Definition at line 334 of file ccs811.c.

References BOARD_gasSensorWake(), BOARD_i2cBusSelect(), CCS811_ADDR_ALG_RESULT_DATA, CCS811_ERROR_I2C_TRANSACTION_FAILED, CCS811_OK, and I2CSPM_Transfer().

uint32_t CCS811_getRawData ( uint16_t *  current,
uint16_t *  rawData 
)

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

Parameters
[out]currentThe value of current through the sensor
[out]rawDataThe 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 BOARD_gasSensorWake(), BOARD_i2cBusSelect(), CCS811_ADDR_RAW_DATA, CCS811_ERROR_I2C_TRANSACTION_FAILED, CCS811_OK, and I2CSPM_Transfer().

uint32_t CCS811_getStatus ( uint8_t *  status)

Reads the status of the CSS811 sensor.

Parameters
[out]statusThe 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]idThe address of the Mailbox register
[in]lengthThe number of bytes to read
[out]dataThe data read from the sensor
Returns
Returns zero on OK, non-zero otherwise

Definition at line 285 of file ccs811.c.

References BOARD_gasSensorWake(), BOARD_i2cBusSelect(), CCS811_ERROR_I2C_TRANSACTION_FAILED, CCS811_OK, and I2CSPM_Transfer().

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]tempDataThe environmental temperature in milli-Celsius
[in]rhDataThe relative humidity in milli-percent
Returns
Returns zero on OK, non-zero otherwise

Definition at line 930 of file ccs811.c.

References BOARD_gasSensorWake(), BOARD_i2cBusSelect(), CCS811_ADDR_ENV_DATA, CCS811_ERROR_I2C_TRANSACTION_FAILED, CCS811_OK, and I2CSPM_Transfer().

uint32_t CCS811_setMeasureMode ( uint8_t  measMode)

Sets the measurement mode of the CSS811 sensor.

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

Definition at line 487 of file ccs811.c.

References BOARD_gasSensorWake(), BOARD_i2cBusSelect(), CCS811_ADDR_MEASURE_MODE, CCS811_ERROR_I2C_TRANSACTION_FAILED, CCS811_OK, and I2CSPM_Transfer().

uint32_t CCS811_softwareReset ( void  )

Performs software reset on the CCS811.

Returns
Returns zero on OK, non-zero otherwise

Definition at line 438 of file ccs811.c.

References BOARD_gasSensorWake(), BOARD_i2cBusSelect(), CCS811_ADDR_SW_RESET, CCS811_ERROR_I2C_TRANSACTION_FAILED, CCS811_OK, and I2CSPM_Transfer().

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().