Estoy intentando leer la temperatura de un sensor SHT21 usando una placa ESP32-WROOM. El controlador I2C es de ESP-IDF SDK. Esta es mi secuencia de lectura:
cmd = i2c_cmd_link_create();
i2c_master_start(cmd); // Send i2c start on bus
i2c_master_write_byte(cmd, (I2C_ADD<<1) | I2C_MASTER_WRITE, 1);
i2c_master_write_byte(cmd, command, 1);
i2c_master_start(cmd);
i2c_master_write_byte(cmd, (I2C_ADD<<1) | I2C_MASTER_READ, 1);
i2c_master_read_byte(cmd, data+0, 1); // data MSB
i2c_master_read_byte(cmd, data+1, 1); // data LSB
i2c_master_read_byte(cmd, &checksum, 1); // CRC
i2c_master_stop(cmd);
ret = i2c_master_cmd_begin(I2C_NUM_0, cmd, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd);
Según la grabación de mi analizador lógico, puedo decir que todos los comandos de escritura se ejecutan correctamente. Sin embargo, no hay reloj para leer la respuesta del sensor. La línea CLK permanece baja durante otros 41 ms.
Entonces, ¿dónde está el reloj para leer la respuesta? ¿Estoy usando el controlador I2C incorrectamente? ¿El retardo de 41 ms producido por el sensor se debe al estiramiento del reloj? ¿Pero no debería entonces el ESP32 continuar con el reloj de lectura después? ¿Me estoy perdiendo algo más?
Gracias por todas las respuestas!