5 votos

PIC32 I2C no funciona como se esperaba

Estoy teniendo un problema para conseguir I2C que se ejecuta con una PIC32MX795F512L. No fue reconocer la dirección de bytes que se envían, así que me puse un analizador lógico en SDA y SCL y consiguió la traza se muestra a continuación:

enter image description here

Las dos excursiones en la línea SCL son los únicos que se producen. Así que no entiendo por qué sólo hay dos, en lugar de uno por poco más el inicio y parada de condiciones. Esto es evidente por qué nunca veo ningún tipo de reconocimiento.

También, SCL es baja todo el tiempo antes de que estos secuencia empieza, y yo esperaba que fuera alto y luego se ir baja con SDA alto para indicar una condición de inicio. He comprobado que tengo pullups en ambos SCL y SDA.

El código que estoy utilizando es directamente de Microchip I2C código de ejemplo. Aquí es la parte pertinente:

   // Start the transfer to write data to the EEPROM
    if( !StartTransfer(FALSE) )
    {
        while(1);
    }

    // Transmit all data
    Index = 0;
    while( Success && (Index < DataSz) )
    {
        // Transmit a byte
        if (TransmitOneByte(i2cData[Index]))
        {
            // Advance to the next byte
            Index++;

            // Verify that the byte was acknowledged
            if(!I2CByteWasAcknowledged(EEPROM_I2C_BUS))
            {
                DBPRINTF("Error: Sent byte was not acknowledged\n");
                Success = FALSE;
            }
            else
            {
                Success = TRUE; 
            }
        }
        else
        {
            Success = FALSE;
        }
    }

    // End the transfer (hang here if an error occured)
    StopTransfer();
    if(!Success)
    {
        while(1);
    }

Se pone a la I2CByteWasAcknowledged llamada y se produce un error. Alguien tiene alguna sugerencia sobre cómo obtener I2C en un PIC32 a trabajar con el Periférico de la Biblioteca de código?

1voto

Matt McMinn Puntos 6067

El problema resultó ser una mala conector en el analizador lógico. Es una 34-canal de los ÁNGELES, pero hemos tendido a utilizar sólo el primer par de canales más y más. Al parecer el conector hembra para la línea SCL, que acepta un pin, como las de 0.1" de los encabezados, se había convertido en hojaldre. Me debería haber dado cuenta de que era algo que ver con el de los ANGELES cuando obtuve los mismos resultados con el Poco Whacker.

Miré a las señales con un ámbito de aplicación, y tanto el SCL y SDA eran altas cuando está inactivo, y cuando se baja con el inicio del protocolo.

Elegí un conjunto diferente de los canales de la LA, se reconfiguró el I2C intérprete para utilizarlas en lugar de los dos primeros canales, y tiene un muy bien interpretado protocolo I2C.

0voto

coto Puntos 117

Como usted menciona, las líneas SCL y SDA debe ralentí alto, así que definitivamente hay algo fundamentalmente mal con el SCL. Como un comentarista dijo, también parece haber un cruce de conversaciones que ocurren desde la SDA en ir a alta hace que el SCL a fallo.

  • Está usted seguro de que el SCL línea que has conectado es el que debería ser?
  • Compruebe que está utilizando el derecho de la interfaz I2C en el pic (I2C1 vs I2C2 etc)
  • Por favor verifique que usted está llamando a I2CSetFrequency y I2CEnable (y con el derecho de la interfaz)

He enumerado más información acerca de I2C y problemas típicos en un artículo separado: http://chipscoop.blogspot.com/2012/08/understanding-ic-and-some-typical-uses.html

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