Откуда исходит значение i2c_master_recv? - PullRequest
0 голосов
/ 23 февраля 2019

Я не понимаю, почему i2c_master_send нужен адрес регистра?

Но i2c_master_recv не нужен адрес регистра.

Могу ли я получить конкретное значение адреса регистра, используя i2c_master_recv?

Откуда берется значение i2c_master_recv?

Почему для i2c_master_send третий параметр равен 2, а для i2c_master_recv третий параметр равен 1?

Ниже приведен пример кода для i2c_master_send и i2c_master_recv.

Большое спасибо.

    struct i2c_client *client
    unsigned char buf[2] = {0};
    int ret;

    buf[0]=0x30;//set register's address
    buf[1]=0x05;//set register's value

    //set register
    ret = i2c_master_send(client, buf, 2);
    if(ret < 0)
        printk(KERN_ERR "Write data failed\n");
    //read register
    ret = i2c_master_recv(client, buf, 1);
    if(ret < 0)
        printk(KERN_ERR "Read data failed\n");

1 Ответ

0 голосов
/ 23 февраля 2019

Протокол I2C может использовать два адреса: адрес микросхемы на шине I2C (7 или 10 бит) и адрес регистра.Технически говоря, адрес регистра находится на уровне выше, чем I2C, поэтому он не является частью протокола I2C.

Когда вы отправляете данные, все отправленные данные будут поступать с хоста.Не будет никакого «ответа».

При получении данных все полученные данные будут поступать с устройства.Здесь нет «регистрационного адреса».

Таким образом, в этом случае вы по существу задаетесь вопросом, как вы можете прочитать регистр по его адресу.Это зависит от устройства, но обычно работает, сначала сообщая (отправляя) устройству какой-либо адрес, к которому вы обращаетесь, без его значения, а затем читая данные с устройства.

Я не уверен, как выразработан конкретный чип, но если бы я был разработчиком микрочипа, я бы поддержал чтение с произвольного адреса регистра, записав только 1 байт (адрес, без значения), а затем прочитав 1 байт (таким образом, возвращая значение по адресу).Я бы также поддержал запись в произвольный адрес регистра, записав 2 байта (адрес, значение).

Итак, по сути, вы должны выбрать регистр, отправив его адрес, а затем вы можете получить доступ к регистру, получив егоСодержание.

Я не уверен, что ваш чип разработан таким образом.Вы должны серьезно взглянуть на спецификации I2C чипа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...