0

有没有人尝试在 Raspberry Pi 4 上使用i2c_smbus_write_byte或任何类似功能?

我无法让它编译它在链接时失败并且找不到它。我按照这里的描述使用它:http: //synfare.com/599N105E/hwdocs/rpi/rpii2c.html

所有推荐的头文件都在那里,而且Makefile 中还有-li2c

谁能告诉问题可能是什么?我现在不知道

4

2 回答 2

1

您链接到的页面说:

对于 Buster 版本,截至 2019 年 6 月,使用 i2c_smbus_write_byte_data() 和兄弟的必要细节需要以下包含语句:

#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>

使用 fgrep 您可以确认该函数在 /usr/include/i2c/smbus.h 中声明:

# cd /usr/include; fgrep -R i2c_smbus_write_byte *
i2c/smbus.h:extern __s32 i2c_smbus_write_byte(int file, __u8 value);
i2c/smbus.h:extern __s32 i2c_smbus_write_byte_data(int file, __u8 command, __u8 value);

所以这应该工作:

#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>

int main(void) {
  int i2c = open("/dev/i2c-1", O_RDWR);
  i2c_smbus_write_byte(i2c, 1);
  close(i2c);
  return 0;
}

我测试了这个例子在最新的 Raspbian Buster Lite 中编译成功:

gcc test.c -otest -li2c

如果你使用 g++ 而不是 gcc,那么你应该用 extern "C" 包装 include 指令:

extern "C" {
  #include <linux/i2c-dev.h>
  #include <i2c/smbus.h>
}
于 2020-05-07T13:23:12.513 回答
1

可能值得检查一下您的系统上是否存在 libi2c-dev。

sudo apt-get install libi2c-dev

可能就是您所需要的。

于 2020-05-07T12:36:34.363 回答