Estoy tratando de leer el sensor de temperatura infrarrojo Melexis MLX90614 a través de SMBus (I2C o TWK como protocolo).
El protocolo (SMBus) implementa un tipo especial de comando o secuencia llamado inicio repetido, lo que significa que enviamos una condición de inicio sin una condición de detención previa.
Estoy usando un microcontrolador XMEGA usando las bibliotecas TWI usadas en la nota de aplicación AN1308
Para leer los datos del sensor, necesito enviar 1 byte para escribir la dirección a leer, y luego leer 3 bytes de datos. Por eso se usa inicio repetido.
ElproblemaesqueobtengoACKde2primerosbytes(escribaladirecciónyescribaelcomando)peroobtengoNACKcuandoenvíoladireccióndespuésdeunacondicióndeiniciorepetida
Tengo3capturasdelosciloscopio:
Secuenciageneral
La inicialización del módulo es:
// ************** TWI Master config ****************
TWI_MasterInit(&twiMaster,
&TWIC,
TWI_MASTER_INTLVL_HI_gc,
TWI_BAUDSETTING);
Y el uso es:
TWI_MasterWriteRead(&twiMaster,
MLX90164_ADDR,
bufferTX,
1,
3);
MLX90614 es 0x5A y bufferTX es una matriz de caracteres sin firma con un 0x06 en la primera posición. También la velocidad en baudios se establece en 100kHz
No sé por qué obtengo NACK en el segundo byte de dirección para leer los datos del sensor, la condición de inicio repetido se ve bien. Además, las configuraciones de hardware deben estar bien porque recibo ACK del primer y segundo byte
Gracias de antemano