No se pueden leer datos de MCP9808 usando i2c

Tengo un sensor de temperatura MCP9808 y una Raspberry Pi 3B plus. Tuve un gran éxito al leer la temperatura de este sensor a través de i2c en un Arduino Uno, pero no puedo leer la temperatura con Raspberry Pi. Hay varias bibliotecas disponibles para leer el sensor a través de Python y C, pero recibo mensajes de error con todas ellas. Por lo tanto, intento usar herramientas de línea de comandos simples para diagnosticar el problema.

La hoja de datos se puede encontrar aquí: http://ww1.microchip.com/downloads/en/DeviceDoc/MCP9808-0.5C-Maximum-Accuracy-Digital-Temperature-Sensor-Data-Sheet-DS20005095B.pdf

Ya he habilitado i2c en el Pi y puedo detectar el sensor (dirección predeterminada 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...

Además, puedo sondear los registros del 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...

Pero no puedo obtener bytes o palabras individuales del 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!

Tampoco puedo configurar el registro de configuración del sensor:

root@raspberrypi:~# i2cset -r 1 0x18 0x01 0x0000 w
Error: Write failed

He leído las partes relevantes de la hoja de datos (creo), pero no entiendo por qué no obtengo datos. Si lo entiendo correctamente, no tengo que escribir nada en ningún registro para preparar el sensor (los valores predeterminados de encendido lo hacen listo para funcionar).

¿Qué estoy haciendo mal?

Otro punto de datos: i2cdetectdetectará un dispositivo incluso si el GND no está conectado en absoluto.

Respuestas (1)

Bueno, añádeme a la larga lista de personas que tienen problemas de cableado. Había conectado los cables al Pi en los pines 1, 3, 5 y 7, pero debería haber estado usando 9 en lugar de 7.

Lo importante a observar aquí es que pude con éxito i2cdetectel sensor y i2cdumpel sensor, pero no pude i2cgeto i2csetel sensor. No estoy seguro de por qué es esto, pero los hechos hablan por sí mismos.