Estoy teniendo problemas para hacer LPC2148 trabajo con sensor SRF10. LPC es de 3.3 v dispositivo con 5v compatible con i2c (al menos el usuario docu afirma que). En el otro lado hay SRF10 dispositivo que es de 5v. He probado con ambos niveles como pull-up lvl conectado con la resistencia de 4,7 k (tengo 3 dispositivos en la misma línea de lo que he usado más alto valor de la resistencia).
Cosa extraña es que a veces leer el valor correctamente, pero no para leer valores de 2 registros... Básicamente, no funciona.
Ahora, lo que es extraño en esta foto, es que la lógica de lvl en SDA es 0 por defecto y debe ser 1. Eso significa que pull-up no es para hacer bien el trabajo ? Que podrían estar relacionados con la lógica de lvl diferencias entre la uc y el esclavo ?
EDIT:01.03
Aquí está la implementación de mi 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;
}