Я пытаюсь перенести программу Arduino на Linux. Я застрял, потому что не могу найти эквиваленты функциям I²C который Arduino имеет в «Wire.h».
Заголовок провода: Библиотека проводов
Linux i2C-dev.h: Использование I²C из пространства пользователя в Linux
В частности, я не понимаю, как я могу сделать
Wire.request(address, num_of_bytes); //Request 4 bytes
int a = Wire.receive(); //Receive the four bytes
int b = Wire.receive();
int c = Wire.receive();
int d = Wire.receive();
Похоже, что в Linux нет эквивалента запроса определенного количества байтов от устройства I²C. Я предполагаю, что «i2c_smbus_read_byte» является эквивалентом приема и что при последовательном вызове он будет увеличивать доступные байты.
Опции I²C в Linux:
i2c_smbus_write_quick( int file, __u8 value)
i2c_smbus_read_byte(int file)
i2c_smbus_write_byte(int file, __u8 value)
i2c_smbus_read_byte_data(int file, __u8 command)
i2c_smbus_write_byte_data(int file, __u8 command, __u8 value)
i2c_smbus_read_word_data(int file, __u8 command)
i2c_smbus_write_word_data(int file, __u8 command, __u16 value)
i2c_smbus_process_call(int file, __u8 command, __u16 value)
i2c_smbus_read_block_data(int file, __u8 command, __u8 *values)
i2c_smbus_write_block_data(int file, __u8 command, __u8 length, __u8 *values)
i2c_smbus_read_i2c_block_data(int file, __u8 command, __u8 *values)
i2c_smbus_write_i2c_block_data(int file, __u8 command, __u8 length, __u8 *values)
i2c_smbus_block_process_call(int file, __u8 command, __u8 length, __u8 *values)