Problema I2C NACK en el tercer byte MLX90614 - Inicio repetido

2

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 condición de inicio repetido aparece OK, tenemos una condición de inicio en el medio sin una condición de detención previa. La dirección es correcta y el comando (dirección para leer) también es correcto (0b00000110 - 6)

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

    

1 respuesta

1

Es difícil decirlo sin acercar aún más el zoom, pero parece que es posible que haya enviado un Stop de forma involuntaria inmediatamente después del inicio repetido. Parece que SDA se fue un poco alto antes de que SCL bajara. Esto ciertamente evitaría que el esclavo ACKing.

El primer inicio tiene el mismo comportamiento, pero parece que no fue tan malo y por lo tanto no fue percibido como un alto.

    
respondido por el Annie

Lea otras preguntas en las etiquetas