I have a handful of identical boards all with SI7020's. I've done the layout carefully so as to avoid thermal coupling with MCU and LDO. The center pad is connected. I've confirmed the board temperature and chip temperature of the SI7020 to be about 22.5C using an infrared thermometer. Ambient room temperature is about .5C lower than PCB temperature. CPU temperature is about 23.5.
However, the I2C is returning a temperature of about 29.5C. The error among my handful of boards seems to range approximately 4-8C but is consistent for each board...
I have read the USER1 register which returns 0x3a and indicates that the heater is not turned on.
I have read the serial number and it seems incorrect:
SI7020_Init: Serial A is: 3ffffbe0
SI7020_Init: Serial B is: 0
After a temperature read using the 0xe3 temperature read command and using I2C clock stretch, the 16 bit data returned (every minute) looks like:
SI7020_GetTemperature: datum is: 0x6f 0x48
SI7020_GetTemperature: datum is: 0x6f 0x50
SI7020_GetTemperature: datum is: 0x6f 0x50
SI7020_GetTemperature: datum is: 0x6f 0x54
After power up, I issue the 0xfe RESET command, then wait 15ms per the data sheet max time and then send a 0xe3. Subsequently, I only ever issue 0xe3 to read, only resetting the first time after power up.
I believe I have eliminated thermal coupling as the cause. The parts were reflowed in a toaster oven while covered with foil. The white teflon on top of the part appears undamaged..
Is it possible the calibration data is incorrect? Is there a way to recalibrate the part in-situ?
I cannot think of way the parts would be out of spec like this.
Can you read out the following memory locations?
0x0E - 0x1B
The numbers in 0x0E - 0x1B should be the same on all parts and the numbers in 0x6E and 0x6F will vary from part to part.
It would be easier for me if you can enter this as a technical support request rather than the user forum as I do not always monitor the forum.
I should have told you
To read a memory location use the command 0x84. So
start 0x40 write 0x84 repeated_start 0x40 read data stop
It's ok. I have a million things on the go as well and this project is a distraction...
I was playing around with it some more this morning and I clearly have some thermal coupling going on somewhere. Immediately after powerup the temperature reading is about 4deg high and then after a minute or so, it creeps up to about 9deg high. The top of the chip says it's only about a degree higher than ambient but under the board it's very hot, 9+ deg higher than ambient. I didn't realize these things drew so much current.
I tried to read 0e-1b and 6e/6f but must not be doing it correctly...
This is what I'm getting:
First off, I'm using address 0x80 instead of 0x40. But I must not be handling the start/stop correctly.
I'll dig out my logic analyzer tomorrow any try to puzzle it out.
Well, I must not be getting this right. I can't seem to read from those locations. I've tried to exactly implement the read sequence per the datasheet (section 5.4, read firmware revision) and all I seem to get is 0xff for firmware revision and for locations 0xe - 0x1b ...
My earlier instruction was incomplete.
The Si7020 uses a 7 bit address 0x40 the 8t bit is the read/write flag. The full read sequence would be
start 0x40 0 ack 0x84 ack register ack repeated_start 0x40 1 ack data nack stop
The heating issue is very odd. The Si7020 draws less than 1uA when no conversion is in process and only a few 100uA for the 10-20 msec conversion times.
ok. I got it. It was a dumb mistake...
The heating issue is odd. If I put the bottom of the board against my upper lip, it definitely feels hot right under the SI7020. I only have 10k pullups on the I2C lines. I have the SI7020 on an island, relative to other heat generation sources on the board so maybe it's not able to dissipate heat. I wouldn't expect it to get that warm with only a few uA...
Here's what I've got:
User 1 says: 0x3a
This data says the calibration data is correct.
We need to track down the heating source so I think the next step is to review schematics.
Rather than do this on the forum can you enter a technical support request? Please go to
and click the link for create a support request. Specify the part number as Si7020 and the request will come to me. If you can attach a schematic I can review it.