Используя штатные средства Linux пытаюсь заставить плату одновременно работать с 2мя IIC устройствами. Работа с отдельным устройством для меня не проблема, но с 2мя возникли сложности:
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <i2c-dev.h>
//Открытие порта
if(( fd = open("/dev/i2c-1", O_RDWR)) < 0) qDebug()<<("Error failed to open I2C bus /dev/i2c-1.\n");
//Открытие устройства
if( ioctl( fd, I2C_SLAVE, _address) != 0) qDebug()<<"Error can't find BNO055 at address [0x%02X].\n", _address;
//Запись
void BMP280::writeByte(uint8_t address, uint8_t subAddress, uint8_t data)
{
//if(write(fd, &address, 1) != 1) qDebug()<<"Error: I2C write failure for register"<<subAddress << "readBytes BMP280";
uint8_t buf[3] = { address , subAddress, data };
if(write(fd, &buf, 3) != 3) qDebug()<<"Error: I2C write failure for register"<<subAddress << "writeByte BMP280";
}
//Чтение
void BMP280::readBytes(uint8_t address, uint8_t subAddress, uint8_t count, uint8_t * dest)
{
//if(write(fd, &address, 1) != 1) qDebug()<<"Error: I2C write failure for register"<<subAddress << "readBytes BMP280";
uint8_t buf[2] = { address, subAddress };
if(write(fd, &buf, 2) != 2) qDebug()<<"Error: I2C write failure for register"<<subAddress << "readBytes BMP280";
if(read(fd, dest, count) != count) qDebug()<<"Error: I2C read failure for register data "<<subAddress << "readBytes BMP280";
}
Проблема возникает в функции ioctl( fd, I2C_SLAVE, _address) данная функция принимает адрес только одного устройства и добавляет его при каждом обращении к шине I2C. Таким образом я могу работать только с одним устройством адрес которого в ней указан. Есть ли какой-то альтернативный способ чтения/записи?