I2C EEPROM solo primero para leer correctamente

5

Tengo un problema muy extraño en mi circuito. Es decir, tengo 24LC01 EEPROM conectada a mi PIC32. Hice "biblioteca" para leer y escribir en la memoria. Lo que está sucediendo es que solo la primera lectura de datos me da datos correctos, mientras que cada intento posterior me da datos incorrectos. El experimento está siguiendo. Escribí una página con 0x30 (0 caracteres Ascii), por lo que de la dirección 0 - 7. Luego leo 8 bytes a partir de la dirección 0. La primera lectura es correcta e imprimo 00000000. El siguiente intento de leer me da 0 y 7 caracteres desconocidos. Esto sucede de la misma manera hasta que se reinicia MC.

Aquí hay algunas formas de onda.

En la primera ola, puede ver que la palabra de control se envía, fue ACKed por el esclavo, luego viene la dirección de memoria en la que comenzar, en este caso 0. Luego viene ACK y el evento de inicio repetido. A continuación, la palabra de control se envía de nuevo, pero esta vez con el indicador de lectura establecido. Después sigue el primer carácter 0x30, y así sucesivamente, hasta el 8º.

Alfinaldelprimerintentodelectura,puedeverqueNACKseenvíadespuésdelúltimobyte,seguidodelacondicióndeDETENERenelbus.

Acontinuación,puedevereliniciodelacomunicacióndelsegundointento.LaprimerapalabradecontrolseenvíacorrectamenteyseACKed.Luegovinoladireccióndesdedondedebenleerselosdatos(nuevamente0),tambiénfueACKed.Elsiguientemaestroenvíauncomandodelecturarepetida,ylasegundapalabradecontrolconelindicadordelecturaestablecido(porcierto,ladireccióndeldispositivoes1010xxx).LasegundapalabradecontroltambiénfueACKed,yllegóelprimerbytedesdelaubicacióndememoria0,quees0x30y,comopuedever,tambiénestábien,peroalfinaldeesebyte,SDLvaaltoypermaneceallíhastaelfinaldelrecepción.

Enlasiguientefotosemuestraelfinaldelaola.Comosepuedever,laSDLsiemprefuealtayalfinalsoloseenvíalacondiciónSTOp.

¿Cuál podría ser el problema aquí?

    
pregunta Nexy_sm

1 respuesta

1

El problema fue incorrecto, ya que el indicador para establecer ACK / NACK se restablecerá después de que deshabilite el pin I2C. Por lo tanto, el firmware estaba mal.

Por lo tanto, al final del primer ciclo de lectura, el indicador para NACK se establece y nunca se vuelve a cambiar a ACK.

    
respondido por el Nexy_sm

Lea otras preguntas en las etiquetas