gpt4 book ai didi

Arduino I²C 库 (Wire) 的 Linux 等价物?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:37 27 4
gpt4 key购买 nike

我正在尝试将 Arduino 程序移植到 Linux。我被卡住了,因为我似乎找不到与 I²C 等价的东西Arduino 在“Wire.h”中具有的功能。

线头: Wire Library

Linux i2C-dev.h: Using I²C from userspace in 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”相当于接收,如果连续调用它会增加可用字节数。

Linux 中的 I²C 选项:

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)

最佳答案

我认为您可能正在寻找 i2c_smbus_read_block_data,它接收文件描述符、要发出的命令以及要从设备读取的字节 block 。

使用它的代码可能看起来像这样:

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

关于Arduino I²C 库 (Wire) 的 Linux 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5029279/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com