Tengo un dispositivo I2C que sé que la dirección es 0x70 (se detectó cuando se conectó a Raspberry Pi usando i2cdetect -y 1). Mi problema es que los bytes que quiero ver deben llamarse en WiringPi. La cadena de salida tiene una longitud de siete bytes y WiringPi mira la dirección del dispositivo y luego la dirección del byte que quiero leer.
Dicho esto, el direccionamiento sería:
Device Addr. = 0x70: Primer byte Addr. = 0x01 ----o---- Primer byte Addr. = 0x71
¿La dirección necesita una "nueva" identificación de dirección (comenzando desde 1) o el número de la dirección se "anexa" (sí, lo uso a la ligera) a la dirección del dispositivo?
Nueva información: Encontré esta documentación después de tamizar más profundo: Guía de actualización y Guía de comunicación corta
Parece que en la hoja de actualización, la dirección interna del esclavo para el byte de dirección es 0xE0 para escribir . El byte de comando que quiero usar es el comando (# 3.5): 0b000001100 (que asumo en hexadecimal: 0x0C ). Entonces parece que el byte de dirección para leer es 0xE1 . A partir de este punto, ¿cómo leería de los bytes de datos ya que sus registros no se muestran explícitamente (consulte la Guía de actualización)?
Aquí está mi código actual en WiringPi (C ++):
#include <iostream>
#include <errno.h>
#include <wiringPiI2C.h>
using namespace std;
#define SLAVE_ADDR 0x70
#define DEV_ADDR_W 0XE0
#define DEV_ADDR_R 0XE1
#define DEV_COMMAND 0X0C //GET STATUS
int main(){
int fd,writeRes,comm_res,readRes;
fd=wiringPiI2CSetup(SLAVE_ADDR);
cout<<"Initial Result: "<<fd<<endl;
for(int i=0;i<1;i++){
writeRes=wiringPiI2CWriteReg8(fd,DEV_ADDR_W,0);
cout<<"Write to Address(write): "<<writeRes<<endl;
comm_res=wiringPiI2CWriteReg8(fd,DEV_COMMAND,0);
cout<<"Slave Command Acknowledge: "<<comm_res<<endl;
readRes=wiringPiI2CWriteReg8(fd,DEV_ADDR_R,0);
cout<<"Write to Recieve Data: "<<readRes<<endl;
int readD_1=wiringPiI2CReadReg8(fd,0x0D);
cout<<"Data 1, VOC= "<<readD_1<<endl;
}
return 0;
}