03-11-2020 05:21 PM - edited 03-11-2020 05:24 PM
We are integrating the BME280 into our units and have noticed several invalid values being obtained from the BME280 registers. We have roughly 200 units created and about 30-40 of these units have BME280 that are reading invalid data.
This following is the serial output from our microcontroller reading the BME280 on a working sensor:
Displaying ID, reset and ctrl regs
ID(0xD0): 0x60
Reset register(0xE0): 0x0
ctrl_meas(0xF4): 0xB7
ctrl_hum(0xF2): 0x5
Displaying all regs
0x80:AD 71 89 53 2C 19 5E 06 16 6D 33 67 32 00 E8 8C
0x90:71 D6 D0 0B 31 1B 62 00 F9 FF 0C 30 20 D1 88 13
0xA0:00 4B 86 00 00 00 00 00 00 00 00 00 33 00 00 C0
0xB0:00 54 00 00 00 00 60 02 00 01 FF FF 1F 4E 08 00
0xC0:08 40 B7 FF 00 00 00 00 05 00 00 00 00 00 00 00
0xD0:60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xE0:00 48 01 00 19 2C 03 1E DB 41 FF FF FF FF FF FF
0xF0:FF 00 05 0C B7 10 00 80 00 00 80 00 00 80 00 80
Displaying concatenated calibration words
dig_T1, uint16: 27926
dig_T2, int16: 26419
dig_T3, int16: 50
dig_P1, uint16: 36072
dig_P2, int16: -10639
dig_P3, int16: 3024
dig_P4, int16: 6961
dig_P5, int16: 98
dig_P6, int16: -7
dig_P7, int16: 12300
dig_P8, int16: -12000
dig_P9, int16: 5000
dig_H1, uint8: 75
dig_H2, int16: 328
dig_H3, uint8: 0
dig_H4, int16: 412
dig_H5, int16: 50
dig_H6, uint8: 30
Temperature: 24.40 degrees C
Temperature: 75.92 degrees F
Pressure: 71354.62 Pa
Altitude: 2959.04m
Altitude: 9708.12ft
%RH: 31.83 %
This following is the serial output from our microcontroller reading the BME280 on a non-working sensor:
Displaying ID, reset and ctrl regs
ID(0xD0): 0x60
Reset register(0xE0): 0x0
ctrl_meas(0xF4): 0xB7
ctrl_hum(0xF2): 0x5
Displaying all regs
0x80:94 50 89 10 58 30 9C 06 C8 6F 85 69 32 00 FD 8B
0x90:9B D7 D0 0B C2 19 35 00 F9 FF AC 26 0A D8 BD 10
0xA0:00 4B FB 00 00 00 00 00 00 00 00 00 33 00 00 C0
0xB0:00 54 00 00 00 00 60 02 00 01 FF FF 1F 4E 08 00
0xC0:08 40 B7 FF 00 00 00 00 05 00 00 00 00 00 00 00
0xD0:60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xE0:00 73 01 00 12 29 03 1E 00 41 FF FF FF FF FF FF
0xF0:FF 00 05 0C B7 10 00 FF FF C0 FF FF C0 FF FF 80
Displaying concatenated calibration words
dig_T1, uint16: 28616
dig_T2, int16: 27013
dig_T3, int16: 50
dig_P1, uint16: 35837
dig_P2, int16: -10341
dig_P3, int16: 3024
dig_P4, int16: 6594
dig_P5, int16: 53
dig_P6, int16: -7
dig_P7, int16: 9900
dig_P8, int16: -10230
dig_P9, int16: 4285
dig_H1, uint8: 75
dig_H2, int16: 371
dig_H3, uint8: 0
dig_H4, int16: 297
dig_H5, int16: 50
dig_H6, uint8: 30
Temperature: 190.42 degrees C
Temperature: 374.76 degrees F
Pressure: -21802.65 Pa
Altitude: nanm
Altitude: nanft
%RH: 100.00 %
Temperature: 190.42 degrees C
Temperature: 374.76 degrees F
Pressure: -21802.65 Pa
Altitude: nanm
Altitude: nanft
%RH: 100.00 %
I have attached some oscilliscope images of the I2C lines from both sensors at the bottom of the post. Images 1-4 corresponds to the non-working sensor while 5-8 corresponds to the working sensor.
According to the oscilliscope, we are send the correct/valid messages to the sensor in accordance to the BME280 datasheet and the sensor is holding/reporting invalid data from its registers. We would like to know why some of these sensors are working and others sensors are not. Is this a known issue?
03-11-2020 07:10 PM
From the chip ID and trimming value dumps, it seems that I²C reads are working for both sensors.
For the "working" sensor, no raw LSB values were shared to confirm that the compensation outputs look as expected (in the register map dump, all values still shows "skipped" measurements).
For the "non-working" sensor, at least the bad T/P/H outputs match the raw LSB values from the register map dump. But for the "non-working" sensor, the LSB values also look as if they were 'capped' ("FF"s). Is that always the case or is the output sometimes changing at all? Are all the devices 'brand new' (coming out of production) or have the "non-working" devices ever been working normally before showing signs of failure? If you are seeing such failures on brand new devices for the first time, please confirm that you are following the recommendations in BME280's HSMI manual, in particular that you are using no processes that could be harmful to the BME280.
From your oscilloscope capture, it seems that you are reading-out data using single-byte reads. I would note that it is recommended to use "burst" reads instead (see chapter 4 "Data readout" in the datasheet).
03-12-2020 06:18 PM
It's interesting that the register map dump is showing "skipped measurements". I'll look into this and try and share more valuable information to you from this sensor.
The data that I gathered for you was indeed using single-byte reads but this is not how we program our units. We use burst reads but for debugging purposes, we are using single-byte reads.
From what I have noticed, all the non-working sensors are capped and giving constant 0xFF while the sensors are powered. Majority of the sensors are seeing failures from the initial start up, but a few were working as expected then went down over certain duration of time.
Our units are manufactored in a mass manufactoring facility and we provided them the HSMI manual to ensure it is being followed. I would like to highlight the key points I have found and ensure I didn't miss any with you so I can start a converation with them and ensuring these instructions are being followed. Ignoring the placement details which we confirmed are being followed, the instructions are as follows:
Are there any main instructions that I missed?
Are there any other procedures we can conduct with the working/non-working sensors as we talk to our manufactoring team to determine if something else is occuring?
03-13-2020 12:05 PM
I would say you covered the main topics, in particular forbidden assembly and soldering processes are probably the most common causes for production failures (contamination and/or damages to the sensing elements inside the protective lid).
06-01-2021 12:24 AM
Hi there. I have something that may be related. I've built numerous prototypes with BME280s as well as production devices. In this thread the "working device" has a data dump showing a calculated pressure of Pressure: 71354.62 Pa. I would assume that was taken at nominally sea level instead, but that value seems much too low. I'm at sea level approximately at the moment and my units are also showing very similar values. I've always assumed I have a bug someplace in the compensation code, though it is a cut-and-paste from a Bosch code example. The temperature and humidity values seem to be correct, and my calibration parameters are very similar (and sometimes exactly the same as) those in the thread above for a "working unit".
So let's start with a simple question: Is that pressure reading in the right range of expected results ?