I have a MCP9808 temperature sensor and a Raspberry Pi 3B plus. I had great success reading the temperature from this sensor via i2c on an Arduino Uno, but am not able to read the temperature with the Raspberry Pi. There are several libraries available to read the sensor through Python and C, but I get error messages with all of them. Therefore, I'm attempting to use simple command line tools to diagnose the issue.
Datasheet can be found here: http://ww1.microchip.com/downloads/en/DeviceDoc/MCP9808-0.5C-Maximum-Accuracy-Digital-Temperature-Sensor-Data-Sheet-DS20005095B.pdf
I have already enabled i2c on the Pi, and am able to detect the sensor (default address 0x18):
root@raspberrypi:~# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
...etc...
Furthermore, I can probe the registers of the sensor:
root@raspberrypi:~# i2cdump 1 0x18
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: XX 00 00 00 00 80 00 04 03 60 a0 27 00 XX XX XX X....?.??`?'.XXX
10: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
...etc...
But I can not get individual bytes or words from the sensor:
root@raspberrypi:~# i2cset -y 1 0x18 0x05
Error: Write failed
root@raspberrypi:~# i2cget -y 1 0x18 0x05 w
Error: Read failed
root@raspberrypi:~# i2cget -y 1 0x18 0x05 b
Error: Read failed
root@raspberrypi:~# i2cget -y 1 0x18 0x05 i
Error: Invalid mode!
Nor can I set the config register of the sensor:
root@raspberrypi:~# i2cset -r 1 0x18 0x01 0x0000 w
Error: Write failed
I've read the relevant portions of the datasheet (i think), yet I don't understand why I'm not getting data. If I understand correctly, I don't have to write anything to any registers to prepare the sensor (the power-on defaults render it ready to go).
What am I doing wrong?
i2cdetect
will detect a device even if the GND is not connected at all. \$\endgroup\$