Linux эквиваленты для библиотек Arduino I²C (Wire)? - PullRequest
1 голос
/ 17 февраля 2011

Я пытаюсь перенести программу 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» является эквивалентом receive, и что он будет увеличивать доступные байты, если вызывается по очереди.

Параметры 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)

1 Ответ

0 голосов
/ 02 апреля 2011

Я думаю, что вы, вероятно, ищете i2c_smbus_read_block_data, который принимает дескриптор файла, команду, которую нужно выполнить, и блок байтов, который нужно прочитать с устройства.

Код для его использования, вероятно, будет выглядеть примерно так:

int retval;
uint8_t *block;

block = malloc(32); //i2c_smbus_read_block_data() can return up to 32 bytes
retval = i2c_smbus_read_block_data(fd, req, block);

// check retval.  retval returns bytes read on success, or <0 on error

Вот ссылка на описание функции: http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/re1222.html

...