Problema con i2c en Raspberry

Hola a tod@s, estoy comunicando la raspberry con un chip de entradas / salidas por i2c y tengo el siguiente problema.
Cuando uso la liberia i2c-tool de la propia raspberry todas las lecturas / escrituras me mueve un bit a la derecha y me añade un '0' en el MSB. Es decir , cuando quiero saber la direccion del circuito i2c que tengo conectado a la raspberry, uso el 'i2cdetect' y el comando me devuelve un 0x2C->(00101100), en cambio yo se (por el pdf del C.I.) que su direccion es la 0x58 -> (0101 1000)
Lo que esta ocurriendo es que no se porque, el 0x58 (0101 1000) lo está desplazando un bit a la derecha y esta añadiendo un '0' en el MSB. Esto lo he comprobado con el osciloscopio y cuando intento escribir un byte con el comando i2cset, tambien me despplaza el byte un bit a la derecha añadiendo un '0' en el bit mas sifnificadtivo. Es decir si quiero escribir un 0xF0 -> (1111 0000) cuando miro la linea SDA en el osciloscopio respecto a la de CLK lo que esta enviando por i2C es un (0111 1000) y me es imposible poder comunicar.
Alguien ha tenido el mismo problema?
Gracias por vuestro tiempo y un saludo
 
No he tenido problemas usando el I²C, todo ha ido bien.
Publica el código a ver, y si no pregunta en los foros de raspberry, son en inglés pero a mi me han ayudado alguna vez.

Ya no sé si es para SPI o para I²C pero me suena que hay modos que configurar, si quieres flanco ascendente o descendente en el clock. Yo lo puse por defecto, creo, pero lo mismo tu lo tienes cambiado o algo.
 
Saludos y gracias por responder.
TRILO-BYTE no puedo rotar por software porque no es mi programa el que mueve los bits, parece ser que es la librería interna.
Solamente el comando i2cdetect -y 1 ya me lee que el chip conectado al bus i2c tiene dirección 0x2c
1638535762625.png
Cuando realmente la dirección de este chip según el datasheet es 0x58.
Visto con el oscilospcopio cuando intento mandar un byte, he visto que siempre mueve un bit a la derecha del bite y le mete un '0' en el bit mas significativo.
No entiedo porque ya que estoy usando las librerías por defecto del i2c-tools.
Bueno si alguien tiene algo de idea agradecería la ayuda.
saludos
 
Aunque ya no programo microcontroladores, hace mucho tiempo se me planteó un problema parecido con un bus serie para la lectura de registros de desplazamiento.
El problema era que al dar la señal de selección de chip, el primer bit (bit de mayor peso) ya aparecía en la línea de datos, y solamente se necesitaban 7 ciclos de reloj para leer el resto de bits de un byte. Al dar 8 ciclos de reloj se producía un desplazamiento de un bit hacia la izquierda en mi caso, lo que equivalía a multiplicar por 2 el dato leído.
Tal vez en tu caso se presente un problema parecido pero con desplazamiento hacia la derecha. Puedes verificar cuantos ciclos de reloj se producen en la línea scl y cuando aparecen los datos en la línea sda. Suerte
 
Atrás
Arriba