Tengo problemas para que I2C se ejecute con un PIC32MX795F512L. No reconocía que el byte de dirección se enviaba, así que puse un analizador lógico en SDA y SCL y obtuve el rastreo que se muestra a continuación:
LasdosexcursionesenlalíneaSCLsonlasúnicasqueocurren.Asíquenoentiendoporquésolohaydos,enlugardeunoporbitmáslascondicionesdeinicioyfinalización.Obviamente,estaeslarazónporlaquenuncaveoningúnreconocimiento.
Además,SCLestábajotodoeltiempoantesdequecomienceestasecuencia,yesperabaquefueraaltayluegobajaraconSDAaltaparaindicarunacondicióndeinicio.HecomprobadoquetengopullupstantoenSCLcomoenSDA.
Elcódigoqueestoyusandoestásacadode
// 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);
}
Llega a la llamada I2CByteWasAcknowledged y falla. ¿Alguien tiene algún indicador sobre cómo obtener I2C en un PIC32 para que funcione con el código de la Biblioteca Periférica?