有没有人尝试在 Raspberry Pi 4 上使用i2c_smbus_write_byte或任何类似功能?
我无法让它编译它在链接时失败并且找不到它。我按照这里的描述使用它:http: //synfare.com/599N105E/hwdocs/rpi/rpii2c.html
所有推荐的头文件都在那里,而且Makefile 中还有-li2c。
谁能告诉问题可能是什么?我现在不知道。
有没有人尝试在 Raspberry Pi 4 上使用i2c_smbus_write_byte或任何类似功能?
我无法让它编译它在链接时失败并且找不到它。我按照这里的描述使用它:http: //synfare.com/599N105E/hwdocs/rpi/rpii2c.html
所有推荐的头文件都在那里,而且Makefile 中还有-li2c。
谁能告诉问题可能是什么?我现在不知道。
您链接到的页面说:
对于 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>
}
可能值得检查一下您的系统上是否存在 libi2c-dev。
sudo apt-get install libi2c-dev
可能就是您所需要的。