Interface Description Sensirion SCD30 Sensor Module
CO2, humidity, and temperature sensor
▪
▪
▪
▪
▪
▪
▪
NDIR CO2 sensor technology
Integrated temperature and humidity sensor
Best performance-to-price ratio
Dual-channel detection for superior stability
Small form factor: 35 mm x 23 mm x 7 mm
Accuracy CO2 sensor: ± (30 ppm + 3%)
Fully calibrated with digital interface UART or I2C
Contents
1
2
3
Digital interface description
1.1
1.2
1.3
1.4
1.5
I2C Protocol
Modbus protocol
PWM protocol
Sensor commands
Signal conversion to physical values
2.1
2.2
2.3
Warning, Personal Injury
ESD Precautions
Warranty
Important Notices
Headquarters and Subsidiaries
www.sensirion.com
Version 1.0 – D1 – May 2020
1/21
1
Digital interface description
The SCD30 digital interface is compatible with the I2C protocol and the Modbus protocol. For selecting Modbus protocol, the
SEL pin needs to be pulled to VDD Voltage during power-up of the SCD30 sensor module. It is not possible to switch the
communication protocol during operation. Please refer to datasheet.
1.1 I2C Protocol
Maximal I2C speed is 100 kHz and the master has to support clock stretching. Sensirion recommends to operate the SCD30
at a baud rate of 50 kHz or smaller. Clock stretching period in write- and read-frames is 30 ms, however, due to internal calibration
processes a maximal clock stretching of 150 ms may occur once per day. For detailed information to the I2C protocol, refer to
NXP I2C-bus specification1. SCD30 does not support repeated start condition. Clock stretching is necessary to start the
microcontroller and might occur before every ACK. I2C master clock stretching needs to be implemented according to the NXP
specification. The boot-up time is < 2 s.
1.1.1 I2C Address
After power-up of the sensor, the I2C address of the module is set to the address 0x61.
1.1.2 I2C Sequence
The commands issued by the I2C master are 16 bit with an optional parameter. Data sent to the master is protected by a
CRC. This also applies to data arguments sent to the sensor, please see chapter 1.1.3 for CRC checksum calculation. 2 byte
data sent from or received by the sensor is always succeeded with an 8 bit CRC. Examples are shown below.
Cmd MSB
Cmd LSB
ACK
Clock
I2CAddress W Stretching
ACK
S
ACK
I2C write 16bit command without arguments
P
Example: Stop measurements 0x0104
START 0xC2 0x01 0x04 STOP
(Red: Write Header; Blue: Read Header; Black: Data; Green: CRC; Start Condition: START; Stop Condition: STOP)
1 http://www.nxp.com/documents/user_manual/UM10204.pdf
www.sensirion.com
Version 1.0 – D1 – May 2020
2/21
CRC1
ACK
Data1 LSB
CRC0
ACK
ACK
Data0 LSB
ACK
Data1 MSB
Cmd LSB
ACK
Data0 MSB
ACK
Cmd MSB
ACK
Clock
I2CAddress W Stretching
ACK
S
ACK
I2C write 16bit command with arguments
P
or
P
CRCN
ACK
DataN LSB
ACK
DataN MSB
ACK
or
P
Example: Trigger continuous measurement (Pressure = 0mBar)
START 0xC2 0x00 0x10 0x00 0x00 0x81 STOP
(Red: Write Header; Blue: Read Header; Black: Data; Green: CRC; Start Condition: START; Stop Condition: STOP)
www.sensirion.com
Version 1.0 – D1 – May 2020
3/21
I2C read multiple 16bit words
Example: Read Measurement (example with 439 PPM, 48.8% RH, 27.2 °C)
START 0xC2 0x03 0x00 STOP START 0xC3 0x43 0xDB 0xCB 0x8C 0x2E 0x8F 0x41 0xD9 0x70 0xE7 0xFF 0xF5 0x42 0x43 0xBF
0x3A 0x1B 0x74 STOP
(Red: Write Header; Blue: Read Header; Black: Data; Green: CRC; Start Condition: START; Stop Condition: STOP)
www.sensirion.com
Version 1.0 – D1 – May 2020
4/21
Table 1 I2C write and read communication frames. SDA is controlled by the I2C master in clear blocks and by the sensor in dark blocks.
1.1.3 I2C Checksum calculation
The checksum byte for I2C communication is generated by a CRC algorithm with the following properties:
Preceding Command
Value
Name
CRC-8
Protected Data
read data
Width
8 bits
Polynomial
0x31 (x8 + x5 + x4 + 1)
Initialization
0xFF
Reflect Input
false
Reflect Output
false
Final XOR
0x00
Example
CRC(0xBEEF) = 0x92
www.sensirion.com
Version 1.0 – D1 – May 2020
5/21
1.2 Modbus protocol
For selecting Modbus protocol, the SEL pin needs to be pulled to VDD Voltage. Please refer to datasheet.
The supported baud rate is 19200 Baud with 8 Data bits, 1 Start bit and 1 Stop bit, no Parity bit.
More details on the Modbus protocol can be found here:
Description
Link
General introduction
http://www.modbus.org/docs/Modbus_over_serial_line_V1_02.pdf
Modbus frame generator
http://modbus.rapidscada.net/
Modbus CRC generator
https://www.lammertbies.nl/comm/info/crc-calculation.html
1.2.1 Modbus address
Modbus address is 0x61.
1.2.2 Modbus function codes
Available function codes are
Function code
Description
3
Read holding registers
4
Read input registers
6
Write single holding register
1.3
PWM output
The SCD30 features the possibility to read out the CO2 concentration via the PWM protocol. During operation, the SCD30 must
be connected via the VDD-pin (supply voltage), the GND-pin (ground) and the PWM-pin. Please refer to the data sheet for pin
assignment.
1.3.1 Sensor configuration and measurement start
The SCD30 must be configured via the I2C or the Modbus protocol according to this interface description. This can either be
done by the host system or alternatively in the assembly line with temporary connector pins. Sensor output is only provided after
sending the start measurement command to the SCD30.
1.3.2
Technical specification PWM output
Below, the technical specifications of the PWM protocol are provided. The output signal can be converted by either directly
measuring the pulse-duration or alternatively by employing a low-pass filter and measuring the output voltage.
Base Frequency
80 Hz
DutyCycle
linear from 0 to 100% (0 ppm to 5000 ppm)
Minimal Stepsize of DutyCycle
11 ppm
Output
3.0V Push/Pull Driver
Signal Conversion
CO2 concentration [ppm] =
www.sensirion.com
Version 1.0 – D1 – May 2020
𝑡ℎ𝑖𝑔ℎ
⁄𝑡
∗ 5′000
𝑏𝑎𝑠𝑒
6/21
1.3.3 Low pass filter parametrization
Typically, the PWM signal is converted to a voltage signal via a low pass filter. Upon conversion of the PWM signal to a voltage
signal the CO2 concentration is defined as follows: CO2 concentration [ppm] = 𝑉𝑚𝑒𝑎𝑠𝑢𝑟𝑒⁄3 ∗ 5′000.
Since there’s an inherent trade-off between settling time, the ripple and the current consumption, the ideal parameterization of
the low pass filter differs depending on the application. Nevertheless, an example parameter set for a first order low-pass is
provided below:
1.4 Sensor commands
The command set of the SCD30 is defined as follows. All commands are available via Modbus and I2C.
-
Trigger continuous measurement with optional ambient pressure compensation
-
Stop continuous measurement
-
Set measurement interval
-
Get data ready status
-
Read measurement
-
(De-)Activate continuous calculation of reference value for automatic self-calibration (ASC)
-
Set external reference value for forced recalibration (FRC)
-
Set temperature offset for onboard RH/T sensor
-
Altitude compensation
-
Read firmware version
-
Soft reset
www.sensirion.com
Version 1.0 – D1 – May 2020
7/21
1.4.1 Trigger continuous measurement with optional ambient pressure compensation
Starts continuous measurement of the SCD30 to measure CO2 concentration, humidity and temperature. Measurement data
which is not read from the sensor will be overwritten. The measurement interval is adjustable via the command documented in
chapter 1.4.3, initial measurement rate is 2s.
Continuous measurement status is saved in non-volatile memory. When the sensor is powered down while continuous
measurement mode is active SCD30 will measure continuously after repowering without sending the measurement command.
The CO2 measurement value can be compensated for ambient pressure by feeding the pressure value in mBar to the sensor.
Setting the ambient pressure will overwrite previous settings of altitude compensation. Setting the argument to zero will
deactivate the ambient pressure compensation (default ambient pressure = 1013.25 mBar). For setting a new ambient pressure
when continuous measurement is running the whole command has to be written to SCD30.
Protocol
Command (hex)
I2C
0x0010 argument
Protocol
Function Code
Address
Data to write
Modbus
6
0x0036
0x0000 or
pressure in
mBar
Argument
Description
Format: uint16 Available
range:
0 & [700 … 1400]. Pressure
in mBar.
Triggers continuous
measurement. Ambient
pressure is compensated by
setting argument. argument
= 0 deactivates pressure
compensation.
Full sequence examples:
Protocol
Data to write / read
Start
Start
Write
Header
0xC2
Request:
Slave
Addre
ss
0x61
Functi
on
Code
0x06
I2C
Description
Cmd
MSB
0x00
Addre
ss
MSB
0x00
CMS
LSB
0x10
Addre
ss
LSB
0x36
Pressure
MSB
0x00
Conte
nt
MSB
0x00
Conte
nt
LSB
0x00
Pressure
LSB
0x00
CRC
Stop
0x81
Stop
CRC
LSB
CRC
MSB
0x60
0x64
Content
LSB
0x00
CRC
LSB
0x60
Start continuous
measurement without
ambient pressure
compensation
Modbus
Response:
Slave
Function
Address Code
0x61
0x06
www.sensirion.com
Address
MSB
0x00
Address
LSB
0x36
Content
MSB
0x00
Version 1.0 – D1 – May 2020
CRC
MSB
0x64
8/21
1.4.2 Stop continuous measurement
Stops the continuous measurement of the SCD30.
Protocol
Command (hex)
Description
I2C
0x0104, no argument
Protocol
Function Code
Address
Data to write
Modbus
6
0x0037
0x0001
Stops continuous
measurement.
Full sequence examples:
Protocol
Data to write
Start
I2C
Start
Request:
Slave
Address
0x61
Modbus
Description
Write
Header
0xC2
Cmd
MSB
0x01
Cmd
LSB
0x04
Stop
Stop
Function
Code
0x06
Address
MSB
0x00
Address
LSB
0x37
Content
MSB
0x00
Content
LSB
0x01
CRC
LSB
0xF0
Response:
Slave
Function
Address Code
0x61
0x06
Address
MSB
0x00
Address
LSB
0x37
Content
MSB
0x00
Content
LSB
0x01
CRC
LSB
0xF0
CRC
MSB
0x64
Stops continuous
measurement.
CRC
MSB
0x64
1.4.3
Set measurement interval
Sets the interval used by the SCD30 sensor to measure in continuous measurement mode (see chapter 1.4.1). Initial value is
2 s. The chosen measurement interval is saved in non-volatile memory and thus is not reset to its initial value after power up.
Protocol
Command (hex)
Argument
Description
I2C
0x4600 argument
Protocol
Function Code
Address
Data to write
Modbus
6
0x0025
argument
Format: unit16
Interval in seconds.
Available range:
[2 … 1800] given in 2 byte
in the order MSB, LSB.
Sets the interval for
continuous measurement
mode. Standard
measurement interval is 2.
Full sequence examples:
Protocol
I2C
Data to write
Set measurement interval
Start
Write
Cmd
Header
MSB
Start
0xC2
0x46
Get measurement interval
Write:
Start
Write
Cmd
Header
MSB
Start
0xC2
0x46
Read:
Start
Read
Interv
Header
al
MSB
Start
0xC3
0x00
www.sensirion.com
Description
Cmd
LSB
0x00
Interval
MSB
0x00
Interval
LSB
0x02
Cmd
LSB
0x00
Stop
Inter
val
LSB
0x02
CRC
Stop
0xE3
Stop
CRC
Stop
0xE3
Stop
Set measurement interval
to 2s
Stop
Version 1.0 – D1 – May 2020
9/21
Set measurement interval
Request:
Slave Functi Addre
Addre on
ss
ss
Code
MSB
0x61
0x06
0x00
Response:
Slave
Function
Address Code
0x61
0x06
Addre
ss
LSB
0x25
Conte
nt
MSB
0x00
Conte
nt
LSB
0x02
CRC
LSB
CRC
MSB
0x10
0x60
Address
MSB
0x00
Address
LSB
0x25
Content
MSB
0x00
Content
LSB
0x02
CRC
LSB
0x10
CRC
MSB
0x60
Get measurement interval
Request
Slave
Function Address
Address Code
MSB
Address
LSB
No. of
register
s LSB
0x01
CRC
LSB
CRC
MSB
0x9C
0x61
CRC
LSB
0xB9
CRC
MSB
0x8D
Modbus
0x61
0x03
Response:
Slave
Function
Address Code
0x61
0x03
0x00
0x25
No. of
register
s MSB
0x00
No. of
Bytes
0x02
Content
MSB
0x00
Content
LSB
0x02
1.4.4 Get data ready status
Data ready command is used to determine if a measurement can be read from the sensor’s buffer. Whenever there is a
measurement available from the internal buffer this command returns 1 and 0 otherwise. As soon as the measurement has been
read by the return value changes to 0. Note that the read header should be send with a delay of > 3ms following the write
sequence.
It is recommended to use data ready status byte before readout of the measurement values.
Protocol
Address (hex)
Description
I2C
0x0202, no argument needed
Protocol
Function Code
Address
Modbus
3
0x0027
Data ready status. Status
equals “1” when a
measurement is available to
be read from the sensor.
Full sequence examples:
Protocol
I2C
Data to write/Read
Write:
Start
Write
Header
Start
0xC2
Read:
Start
Start
Request
Slave
Address
0x61
Modbus
Read
Header
0xC3
Description
Cmd
MSB
0x02
Cmd
LSB
0x02
Stop
Data
Ready
MSB
0x00
Data
Ready
LSB
0x01
CRC
Stop
0xB0
Stop
Stop
Function
Code
Address
MSB
Address
LSB
0x03
0x00
0x27
No. of
Bytes
0x02
Content
MSB
0x00
Response:
Slave
Function
Address Code
0x61
0x03
No. of
registers
MSB
0x00
Content
LSB
0x01
No. of
registers
LSB
0x01
CRC
LSB
0xF9
CRC
LSB
CRC
MSB
0x3D
0xA1
Reading Data Ready status
(returning 1)
CRC
MSB
0x8C
I2C: SDA is controlled by the I2C master in clear blocks and by the sensor in dark blocks.
www.sensirion.com
Version 1.0 – D1 – May 2020
10/21
1.4.5 Read measurement
When new measurement data is available it can be read out with the following command. Note that the read header should be
send with a delay of > 3ms following the write sequence. Make sure that the measurement is completed by reading the data
ready status bit before read out.
Protocol
Address (hex)
Description
I2C
0x0300, no argument needed
Reads a single
measurement of CO2
concentration.
Protocol
Function Code
Address
Modbus
3
0x0028 - 0x002D
Full sequence examples:
Protocol
Data to write/read
Write:
Start
Write
Header
Start
0xC2
Description
Cmd
MSB
0x03
Cmd
LSB
0x00
Stop
Stop
Read:
Read
Header
0xC3
Start
I2C
Start
T
MMSB
0x41
T
MLSB
0xD9
RH
MMSB
0x42
RH
MLSB
0x43
Request
Slave
Address
0x61
Modbus
CO2
MMSB
0x43
CO2
MLSB
0xDB
CRC
0x70
CRC
0xBF
T
LMSB
0xE7
T
LLSB
0xFF
RH
LMSB
0x3A
RH
LLSB
0x1B
Address
MSB
Address
LSB
0x03
0x00
0x28
No. of
Bytes
0x0C
CO2
MMSB
0x43
T
MMSB
T
MLSB
T
LMSB
T
LLSB
0x41
0xD9
0xE7
0xFF
CRC
LSB
0x50
0xCB
Function
Code
Response:
Slave
Function
Address Code
0x61
0x03
CO2
LMSB
0x8C
CRC
RH
MMS
B
0x42
CRC
0x8F
CRC
0xF5
No. of
register
s MSB
0x00
CO2
MLSB
0xDB
CO2
LLSB
0x2E
CRC
Stop
0x74
Stop
No. of
register
s LSB
0x06
CRC
LSB
CRC
MSB
0x4C
0x60
CO2
LMSB
0x8C
Example with sensor
returning:
CO2 Concentration = 439
PPM
Humidity = 48.8 %
Temperature = 27.2 °C
CO2
LLSB
0x2E
RH
MLSB
RH
LMSB
RH LLSB
0x43
0x3A
0x1B
CRC
MSB
0x07
SDA is controlled by the I2C master in clear blocks and by the sensor in dark blocks.
www.sensirion.com
Version 1.0 – D1 – May 2020
11/21
I2C read-out stream:
Table 2 and Error! Reference source not found. shows the data layout of the data read out from the sensor.
Using I2C for read-out the sensor will stream out the data in the given order.
Preceding Command
Read measurement
Consecutive read
Byte1: CO2 concentration MMSB
Byte2: CO2 concentration MLSB
Byte3: CRC
Byte4: CO2 concentration LMSB
Byte5: CO2 concentration LLSB
Byte6: CRC
Byte7: Temperature MMSB
Byte8: Temperature MLSB
Byte9: CRC
Byte10: Temperature LMSB
Byte11: Temperature LLSB
Byte12: CRC
Byte13: Humidity MMSB
Byte14: Humidity MLSB
Byte15: CRC
Byte16: Humidity LMSB
Byte17: Humidity LLSB
Byte18: CRC
Description
Data read-out table for I2C
communication. Measurement of CO2
concentration, humidity and temperature
has to be finished before read-out.
Table 2: I2C data read-out table. Read-out of measurement data can be aborted by sending a NACK followed by a stop condition
after any data byte.
Example: The CO2 concentration 400 ppm corresponds to 0x43c80000 in Big-Endian notation.
Modbus read-out stream:
Using Modbus for read-out the sensor will stream out the data in the given order.
Table 3: Modbus data read-out table.
Preceding Command
Read measurement
Consecutive read
Word0: CO2 MSW
Word1: CO2 LSW
Word2: Temperature MSW
Word3: Temperature LSW
Word4: Humidity MSW
Word5: Humidity LSW
Description
Data read-out table for Modbus communication.
Measurement of CO2 concentration, humidity and
temperature has to be finished before read-out.
Example: The CO2 concentration 400 ppm corresponds to 0x43c80000 in Big-Endian notation.
www.sensirion.com
Version 1.0 – D1 – May 2020
12/21
1.4.6 (De-)Activate Automatic Self-Calibration (ASC)
Continuous automatic self-calibration can be (de-)activated with the following command. When activated for the first time a
period of minimum 7 days is needed so that the algorithm can find its initial parameter set for ASC. The sensor has to be exposed
to fresh air for at least 1 hour every day. Also during that period, the sensor may not be disconnected from the power supply,
otherwise the procedure to find calibration parameters is aborted and has to be restarted from the beginning. The successfully
calculated parameters are stored in non-volatile memory of the SCD30 having the effect that after a restart the previously found
parameters for ASC are still present. Note that the most recently found self-calibration parameters will be actively used for selfcalibration disregarding the status of this feature. Finding a new parameter set by the here described method will always
overwrite the settings from external recalibration (see chapter 0) and vice-versa. The feature is switched off by default.
To work properly SCD30 has to see fresh air on a regular basis. Optimal working conditions are given when the sensor sees
fresh air for one hour every day so that ASC can constantly re-calibrate. ASC only works in continuous measurement mode.
ASC status is saved in non-volatile memory. When the sensor is powered down while ASC is activated SCD30 will continue with
automatic self-calibration after repowering without sending the command.
Protocol
Command (hex)
Argument
Description
I2C
0x5306 argument
Protocol
Function Code
Address
Data to write
See notes above, feature is
switched off by default.
Modbus
6
0x003A
Argument
Format: uint16
“1”: Activate continuous
ASC
“0”: Deactivate continuous
ASC
Full sequence examples:
Protocol
I2C
Data to write
Deactivate Automatic Self-Calibration
Start
Write
Cmd Cmd
Header MSB LSB
Start
0xC2 0x53 0x06
ASC
MSB
0x00
ASC
LSB
0x00
CRC
Stop
0x81
Stop
Get Automatic Self-Calibration Status
Write:
Start
Write
Cmd Cmd Stop
Header MSB LSB
Start
0xC2
0x53 0x06 Stop
Read:
Start
Start
Modbus
Description
Read
Header
0xC3
ASC
MSB
0x00
ASC
LSB
0x00
CRC
Stop
0x81
Stop
Deactivate Automatic Self-Calibration
Request:
Slave
Function Address Address
Address
Code
MSB
LSB
0x61
0x06
0x00
0x3A
Content
MSB
0x00
Response:
Slave
Function
Address
Code
0x61
0x06
Content
LSB
0x00
CRC
LSB
0xA0
CRC
MSB
0x67
Address
MSB
0x00
Address
LSB
0x3A
Content
MSB
0x00
Content
LSB
0x00
CRC
LSB
0xA0
CRC
MSB
0x67
Get Automatic Self-Calibration
Request
Slave
Function Address
Address
Code
MSB
Address
LSB
No. of
registers
LSB
0x01
CRC
LSB
CRC
MSB
0xAD
0xA7
CRC
LSB
0x38
CRC
MSB
0x4C
0x61
0x03
Response:
Slave
Function
Address
Code
0x61
0x03
www.sensirion.com
0x00
0x3A
No. of
registers
MSB
0x00
No. of
Bytes
0x02
Content
MSB
0x00
Content
LSB
0x00
Version 1.0 – D1 – May 2020
Example: deactivate ASC
13/21
Set Forced Recalibration value (FRC)
Forced recalibration (FRC) is used to compensate for sensor drifts when a reference value of the CO2 concentration in close
proximity to the SCD30 is available. For best results, the sensor has to be run in a stable environment in continuous mode at a
measurement rate of 2s for at least two minutes before applying the FRC command and sending the reference value. Setting a
reference CO2 concentration by the method described here will always supersede corrections from the ASC (see chapter 1.4.6)
and vice-versa. The reference CO2 concentration has to be within the range 400 ppm ≤ cref(CO2) ≤ 2000 ppm.
The FRC method imposes a permanent update of the CO2 calibration curve which persists after repowering the sensor. The
most recently used reference value is retained in volatile memory and can be read out with the command sequence given below.
After repowering the sensor, the command will return the standard reference value of 400 ppm.
Protocol
Command (hex)
I2C
0x5204 argument
Protocol
Function Code
Address
Data to write
Modbus
6
0x0039
Argument
Argument
Description
Format: uint16
CO2 concentration in ppm
See notes above.
Full sequence examples:
Protocol
I2C
Data to write
Set Forced Recalibration value
Start
Write
Cmd
Header
MSB
Start
0xC2
0x52
Get Forced Recalibration value
Write:
Start
Write
Cmd
Header
MSB
Start
0xC2
0x52
Read:
Start
Start
Modbus
Read
Header
0xC3
FRC
MSB
0x01
Description
Cmd LSB
0x04
FRC
MSB
0x01
FRC
LSB
0xC2
Cmd LSB
Stop
0x04
Stop
FRC LSB
CRC
Stop
0xC2
0x50
Stop
CRC
Stop
0x50
Stop
Set Forced Recalibration value
Request:
Slave
Function Address
Address
Code
MSB
0x61
0x06
0x00
Address
LSB
0x39
Content
MSB
0x01
Response:
Slave
Function
Address
Code
0x61
0x06
Address
MSB
0x00
Address
LSB
0x39
Content
MSB
0x01
Content
LSB
0xC2
CRC
LSB
0xD0
CRC
MSB
0x66
Get Forced Recalibration value
Request:
Slave
Function Address
Address
Code
MSB
Address
LSB
No. of
registers
LSB
0x01
CRC
LSB
CRC
MSB
0x5D
0xA7
CRC
LSB
0xB8
CRC
MSB
0x4D
0x61
0x03
Response:
Slave
Function
Address
Code
0x61
0x03
www.sensirion.com
0x00
0x39
No. of
registers
MSB
0x00
No. of
Bytes
0x02
Content
MSB
0x01
Content
LSB
0xC2
Content
LSB
0xC2
CRC
LSB
0xD0
Version 1.0 – D1 – May 2020
CRC
MSB
0x66
Example: Set FRC with
argument
450 ppm
14/21
1.4.7 Set Temperature Offset
The on-board RH/T sensor is influenced by thermal self-heating of SCD30 and other electrical components. Design-in alters the
thermal properties of SCD30 such that temperature and humidity offsets may occur when operating the sensor in end-customer
devices. Compensation of those effects is achievable by writing the temperature offset found in continuous operation of the
device into the sensor.
Temperature offset value is saved in non-volatile memory. The last set value will be used for temperature offset compensation
after repowering.
Protocol
Command (hex)
I2C
0x5403 argument
Protocol
Function Code
Address
Data to write
Modbus
6
0x003B
argument
Argument
Description
Format: uint16
Temperature offset, unit
[°C x 100], i.e. one tick
corresponds to 0.01°C
See notes above.
Full sequence examples:
Protocol
Data to write
Set
Temperature
Offset Start
Start
I2C
Write
Header
Cmd
MSB
Cmd
LSB
0xC2
0x54
0x03
Get Temperature Offset
Write:
Start
Write
Cmd
Header MSB
Start
0xC2
0x54
Cmd
LSB
0x03
Stop
SHT
Offset
LSB
0xF4
CRC
Stop
0x33
Stop
Read:
Start
Start
Modbus
Description
Read
Header
0xC3
SHT
Offset
MSB
0x01
SHT
Offset
MSB
0x01
SHT
Offset
LSB
0xF4
CRC
Stop
0x33
Stop
Stop
Set Temperature Offset
Request:
Slave
Function Address
Address
Code
MSB
0x61
0x06
0x00
Address
LSB
0x3B
Content
MSB
0x01
Response:
Slave
Function
Address
Code
0x61
0x06
Address
MSB
0x00
Address
LSB
0x3B
Content
MSB
0x01
Content
LSB
0xF4
CRC
LSB
0xF1
CRC
MSB
0xB0
Get Temperature Offset
Request:
Slave
Function Address
Address
Code
MSB
Address
LSB
No. of
registers
LSB
0x01
CRC
LSB
CRC
MSB
0xFC
0x67
CRC
LSB
0x38
CRC
MSB
0x5B
0x61
0x03
Response:
Slave
Function
Address
Code
0x61
0x03
www.sensirion.com
0x00
0x3B
No. of
registers
MSB
0x00
No. of
Bytes
0x02
Content
MSB
0x01
Content
LSB
0xF4
Content
LSB
0xF4
CRC
LSB
0xF1
Version 1.0 – D1 – May 2020
CRC
MSB
0xB0
Example: Set temperature
offset to 5 K
15/21
1.4.8 Altitude Compensation
Measurements of CO2 concentration based on the NDIR principle are influenced by altitude. SCD30 offers to compensate
deviations due to altitude by using the following command. Setting altitude is disregarded when an ambient pressure is given to
the sensor, please see section 1.4.1.
Altitude value is saved in non-volatile memory. The last set value will be used for altitude compensation after repowering.
Protocol
Command (hex)
I2C
0x5102 argument
Protocol
Function Code
Address
Data to write
Modbus
6
0x0038
argument
Argument
Description
Format: uint16
Height over sea level in
[m] above 0.
See notes above.
Full sequence examples:
Protocol
I2C
Data to write
Set altitude:
Start
Write
Header
Start
0xC2
Cmd
MSB
0x51
Cmd
LSB
0x02
Altitude
MSB
0x03
Get altitude:
Write:
Start
Write
Header
Start
0xC2
Cmd
MSB
0x51
Cmd
LSB
0x02
Stop
Altitude
MSB
0x03
Altitude
LSB
0xE8
CRC
Stop
0xD4
Stop
Set altitude:
Request:
Slave
Function
Address Code
0x61
0x06
Address
MSB
0x00
Address
LSB
0x38
Content
MSB
0x03
Content
LSB
0xE8
Response:
Slave
Function
Address Code
0x61
0x06
Address
MSB
0x00
Address
LSB
0x38
Content
MSB
0x03
Content
LSB
0xE8
CRC
LSB
0x01
CRC
MSB
0x19
Get altitude:
Request:
Slave
Function
Address Code
Address
MSB
Address
LSB
CRC
MSB
0x00
0x38
No. of
registers
LSB
0x01
CRC
LSB
0x61
No. of
registers
MSB
0x00
0x0C
0x67
No. of
Bytes
0x02
Content
MSB
0x03
Content
LSB
0xE8
CRC
LSB
0x38
CRC
MSB
0xF2
Read:
Start
Start
Modbus
Read
Header
0xC3
0x03
Response:
Slave
Function
Address Code
0x61
0x03
www.sensirion.com
Description
Altitude
LSB
0xE8
CRC
Stop
0xD4
Stop
Stop
CRC
LSB
0x01
Version 1.0 – D1 – May 2020
CRC
MSB
0x19
Set altitude to 1000m above
sea level
16/21
1.4.9 Read firmware version
Following command can be used to read out the firmware version of SCD30 module
Protocol
Address (hex)
Description
I2C
0xD100, no argument needed
Protocol
Function Code
Address
Modbus
3
0x0020
Returns the firmware
version
Full sequence examples:
Protocol
I2C
Modbus
Data to write/Read
Write:
Start
Write
Header
Start
0xC2
Description
Cmd
MSB
0xD1
Cmd
LSB
0x00
Stop
Firmware
version
major
0x03
Firmware
version
minor
0x42
CRC
Stop
0xF3
Stop
No. of
regist
ers
LSB
0x01
CRC
LSB
CRC
MSB
0x8C
0x60
Stop
Read:
Start
Read
Header
Start
Request
Slave
Addre
ss
0xC3
Functi
on
Code
Addre
ss
MSB
Addre
ss
LSB
0x61
0x03
0x00
0x20
Response:
Slave
Function
Address Code
0x61
0x03
No. of
Bytes
0x02
No. of
regist
ers
MSB
0x00
Firmwa
re
version
major
0x03
Firmwa
re
version
minor
0x42
CRC
LSB
CRC
MSB
0xB8
0x8D
Firmware version:
Major.Minor
I2C: SDA is controlled by the I2C master in clear blocks and by the sensor in dark blocks.
www.sensirion.com
Version 1.0 – D1 – May 2020
17/21
1.4.10 Soft reset
The SCD30 provides a soft reset mechanism that forces the sensor into the same state as after powering up without the need
for removing the power-supply. It does so by restarting its system controller. After soft reset the sensor will reload all calibrated
data. However, it is worth noting that the sensor reloads calibration data prior to every measurement by default. This includes
previously set reference values from ASC or FRC as well as temperature offset values last setting.
The sensor is able to receive the command at any time, regardless of its internal state. In order to start the soft reset procedure
the following command should be sent.
Protocol
Command (hex)
Argument
I2C
0xD304
Protocol
Function Code
Address
Data to write
Modbus
6
0x0034
0x0001
Description
Restarts the sensor
Full sequence examples:
Protocol
I2C
Data to write
Start
Start
Write
Header
0xC2
Request:
Slave
Address
0x61
Modbus
Description
Cmd
MSB
0xD3
Cmd
LSB
0x04
Stop
Stop
Function
Code
0x06
Address
MSB
0x00
Address
LSB
0x34
Content
MSB
0x00
Content
LSB
0x01
CRC
LSB
0x00
CRC
MSB
0x64
Response:
Slave
Function
Address Code
0x61
0x06
Address
MSB
0x00
Address
LSB
0x34
Content
MSB
0x00
Content
LSB
0x01
CRC
LSB
0x00
CRC
MSB
0x64
www.sensirion.com
Version 1.0 – D1 – May 2020
Restarts the sensor
18/21
1.5 Signal conversion to physical values
All data read from the sensor are float numbers in big-endian format2. Conversion of digital values Sx, (x = c(CO2), RH, T) to
physical values and respective units are shown in the following table
Physical quantity
Conversion formula
Units
Range
CO2 concentration c(CO2)
c(CO2) = Sc(CO2)
ppm
0 – 10000
Temperature T
T = ST
°C
-40 – 125°C
Relative humidity RH
RH = SRH
%RH
0 – 100
Table 4: Signal conversion table.
Conversation of temperature to °F as well as relative humidity to absolute humidity and dew point temperature can be found in
Sensirion’s online support center3
Sample pseudo code for converting data read from the sensor to physical value can be found below.
// CO2 concentration
float co2Concentration;
unsigned int tempU32;
// read data is in a buffer. In case of I2C CRCs have been removed
// beforehand. Content of the buffer is the following
unsigned char buffer[4];
buffer[0]
buffer[1]
buffer[2]
buffer[3]
=
=
=
=
0x43;
0xDB;
0x8C;
0x2E;
//
//
//
//
MMSB
MLSB
LMSB
LLSB
CO2
CO2
CO2
CO2
// cast 4 bytes to one unsigned 32 bit integer
tempU32 = (unsigned int)((((unsigned int)buffer[0])
很抱歉,暂时无法提供与“SEK-SCD30”相匹配的价格&库存,您可以联系我们找货
免费人工找货