Processing math: 100%

1 votos

MS5611 envía un byte adicional después de NACK

Actualmente estoy tratando de usar el MS5611 (sentado en un CJMCU-117) sobre I²C con libopencm3 en un STM32F103C8.

Cuando hago una lectura, el esclavo envía un byte adicional (0xFF) después de que el maestro haya enviado un NACK. Esto sucede tanto para la lectura de la PROM (2 bytes) como para la lectura del ADC (3 bytes).

El siguiente código da como resultado la siguiente forma de onda, la hoja de datos [1] muestra en la página 13 cómo debería ser.

// Send
i2c_transfer7(I2C2, 0x77,
    commandPtr, 1,
    nullptr, 0);

// Read
i2c_transfer7(I2C2, 0x77,
    nullptr, 0,
    bufferPtr, 3);

Waveform

¿Alguien puede ayudarme a resolver esto?

[1] https://www.te.com/commerce/DocumentDelivery/DDEController?Action=showdoc&DocId=Data+Ficha%7FMS5611-01BA03%7FB3%7Fpdf%7FInglés%7FENG_DS_MS5611-01BA03_B3.pdf

1voto

Jean Poole Puntos 71

La función i2c_transfer7 de libopencm3 está implementada usando I2C con polling, pero no está siguiendo el manual de referencia de STM32 (RM0008, Página 759, Método 2), que establece un manejo especial de las recepciones de 1 y 2 bytes. Esto hace que se borre el bit ACK en el momento equivocado.

Ver http://libopencm3.org/docs/latest/stm32f2/html/i2c__common__v1_8c_source.html#l00492

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X