Tengo problemas para que el LPC2148 funcione con el sensor SRF10. LPC es un dispositivo de 3.3v con i2c compatible con 5v (al menos el usuario docu afirma que). En el otro lado hay un dispositivo SRF10 que es 5v. He intentado con ambos niveles como lvl pull-up conectado con una resistencia de 4.7 k (tengo 3 dispositivos en la misma línea, así que usé una resistencia de mayor valor).
Lo extraño es que a veces lee el valor correctamente pero no puede leer los valores de 2 registros ... Básicamente, no funciona.
Ahora, lo que es extraño en esta imagen, es que la lógica lvl en SDA es 0 por defecto y debería ser 1. ¿Eso significa que el pull-up no está haciendo bien el trabajo? ¿Podría estar relacionado con las diferencias lógicas de lvl entre uc y esclavo?
EDIT: 01.03
Aquí está mi implementación del estado 0x50, a_chn es i2c0 o i2c1
void slaveDataReceived (uint8_t a_chn)
{
uint8_t k;
volatile unsigned char *i2cConClear;
volatile unsigned char *i2cConSet;
volatile unsigned char *i2cData;
if (a_chn == 1) {
i2cData = (volatile unsigned char *)(0xE005C008);
i2cConClear = (volatile unsigned char *)(0xE005C018);
i2cConSet = (volatile unsigned char *)(0xE005C000);
}
else {
i2cData = (volatile unsigned char *)(0xE001C008);
i2cConClear = (volatile unsigned char *)(0xE001C018);
i2cConSet = (volatile unsigned char *)(0xE001C000);
}
k = *i2cData;
appendToDataBuffer (a_chn, k);
if (i2cDataRcv[a_chn] == i2cDataHead[a_chn]){
I2CMasterState[a_chn] = I2C_IDLE;
*i2cConSet = I2CON_SET_STO;
*i2cConClear = I2CON_CLR_AAC;
}
else {
*i2cConSet = I2CON_SET_AA;
}
*i2cConClear = I2CON_CLR_SIC;
}