duda I2C para leer y escribir

Hola amigos hace poco estoy trabajando un sensor para el cual no existe nada de informacion en arduino, y basandome en la hoja de el fabricante lo e estado intentando utilizar, pero me han surgido varias dudas a ver si me las podrian resolver:

  1. en la biblioteca de "wire.h" nos dice que trabaja con la direccion real de 7 bits, que pasa o como se trata el 8 bit que es el de escritura/lectura del dispositivo, alguien me podria explicar un poco mejor como se maneja ese 8bit o como utilizarlo?

el fabricante mencioa que las direcciones AE (write mode) AE (read mode) pero como i2c maneja la direccion de 7 bits seria la 57, como manejo eso puesto que no entiendo como manejar esa parte.

por ejemplo el fabricante nos entrega este seudocodigo:

START;
Send device address + write mode
Send address of FIFO_WR_PTR;
REPEATED_START;
Send device address + read mode
Read FIFO_WR_PTR;
STOP;

yo e intentado con algo parecido:

// FIFO
#define FIFO_Write_Pointer  0x02 // R/W
#define Over_Flow_Counter   0x03 // R/W
#define FIFO_Read_Pointer   0x04 // R/W
#define FIFO_Data_Register  0x05 // R/W
//configuracion
#define LED_Configuration   0x09 // R/W



// segun la hoja de datos la direccion siguiente es el esclavo del dispositivo:

#define ID_adrres_slave    0x57



int lectura
;
void setup()
{
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
Serial.println("vamos a comenzar ");


}
void loop(){
 Wire.beginTransmission(ID_adrres_slave);
   Wire.write(FIFO_Write_Pointer);
   Wire.endTransmission();


  Wire.beginTransmission(ID_adrres_slave);

   lectura=Wire.read();
  Serial.println(lectura);
}

pero no e logrado una lectura valida.

Porque no empiezas detectando el dispositivo usando el scanner i2C?

Si corroboras que esta en 0x57 entonces ya es un error de como interpretaste el seudocódigo.
Sería bueno que pusieras la hoja de datos del sensor para que pudiéramos darte nuestra visión del tema.

sip ya revise con el i2c scanner y si me dice que es el 0x57

¿Y la hoja de datos?

Que tal este ejemplo? Maxim/Dallas DS3231 (hoja de datos).

Aca la librería (me concentro solo en DS3231.cpp, una de tantas.
Veamos como lo hace.
Bueno la hoja de datos dice que el DS3231 trabaja con 7 bits + 1 bit RW como en tu caso.

Observando la librería observo que te falta este procedimiento previo a Wire.read() y es

 Wire.requestFrom(ID_adrres_slave);

para mi la secuencia debería ser

void loop(){
  Wire.beginTransmission(ID_adrres_slave);
  Wire.write(FIFO_Write_Pointer);
  Wire.endTransmission();


  Wire.requestFrom(ID_adrres_slave, 1); // 1 es 1 byte
  
  lectura=Wire.read();
  Serial.println(lectura);
}

Mira esos archivos que te indico para ver las comparaciones.
A ver si doy en el clavo.