Интерпретация последовательности I2 C с помощью вызова I2C_RDWR - PullRequest
0 голосов
/ 06 апреля 2020

Я хочу получать данные из i2 c зарегистрироваться несколько раз. Вот последовательность: Here is the sequence

int i2c_read(u8 slave_addr, u8 *result, u8 *result1) {
    struct i2c_msg msgs[4];
    struct i2c_rdwr_ioctl_data msgset[1];
    static char adres1[1] = {FIFO_DATA_OUT_L};


    msgs[0].addr = slave_addr;
    msgs[0].flags = 0;
    msgs[0].len = 1;
    msgs[0].buf = adres1;

    msgs[1].addr = slave_addr;
    msgs[1].flags = I2C_M_RD | I2C_M_NOSTART;
    msgs[1].len = 1;
    msgs[1].buf = result;

    msgs[2].addr = slave_addr;
    msgs[2].flags = 0;
    msgs[2].len = 1;
    msgs[2].buf = adres1;

    msgs[3].addr = slave_addr;
    msgs[3].flags = I2C_M_RD | I2C_M_NOSTART;
    msgs[3].len = 1;
    msgs[3].buf = result1;

    msgset[0].msgs = msgs;
    msgset[0].nmsgs = 4;
    if (ioctl(fd, I2C_RDWR, &msgset) < 0) {
        perror("ioctl(I2C_RDWR) in i2c_read");
        return -1;
    }
    return 0;
}

Проблема в том, что он правильно читает данные в первый раз (result), а затем выдает 0 (result1). Мне интересно, как сделать комбинацию I2C_RDWR с более чем 2 сообщениями внутри.

...