Evite el estiramiento del reloj I2C

0

Estoy tratando de leer la temperatura de un Si7050 usando una TI CC3220SF. No estoy seguro de si el alargamiento del reloj se maneja correctamente desde el controlador de TI y la opción NACK (alternativa al estiramiento del reloj, de acuerdo con la hoja de datos).

¿Hay una manera de leer esa temperatura evitando esas características específicas? Quiero decir, para mí está bien enviar el comando "medir" y volver a leer el valor convertido después de un tiempo de conversión.

No entiendo si es posible y (si es) cómo.

    
pregunta Mark

2 respuestas

0

No pude hacer funcionar el reloj. He terminado de esta manera:

_i16 WriteRegister(_u8 address)
{
    I2C_Transaction i2cTransaction;
    _u8 writeBuf[1];

    writeBuf[0] = address;

    i2cTransaction.slaveAddress = SI7051_ADDRESS;
    i2cTransaction.writeBuf = writeBuf;
    i2cTransaction.writeCount = 1;
    i2cTransaction.readBuf = NULL;
    i2cTransaction.readCount = 0;

    return I2C_transfer(_i2cHandle, &i2cTransaction);
}

_i16 ReadRegister(_u8 *readBuf, _u8 readCount)
{
    I2C_Transaction i2cTransaction;

    i2cTransaction.slaveAddress = SI7051_ADDRESS;
    i2cTransaction.writeBuf = NULL;
    i2cTransaction.writeCount = 0;
    i2cTransaction.readBuf = readBuf;
    i2cTransaction.readCount = readCount;

    return I2C_transfer(_i2cHandle, &i2cTransaction);
}

void Measure()
{
    _u8 readBuf[2] = {0, 0};

    WriteRegister(SI7051_MEASURE_NO_HOLD);
    while (ReadRegister(readBuf, 2) == 0) Task_sleep(1);
    // convert measurement
}
    
respondido por el Mark
1

El controlador no maneja el alargamiento del reloj porque ya está manejado por el hardware.

Asegúrese de que el recuento de tiempo de espera bajo del reloj maestro I²C esté lo suficientemente alto (consulte la sección 7.2.1.6 del Manual de referencia técnica).

    
respondido por el CL.

Lea otras preguntas en las etiquetas