我已经阅读了i2c 上的 Linux 内核文档并编写了一个代码来尝试复制该命令i2cset -y 0 0x60 0x05 0xff
我写的代码在这里:
#include <stdio.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <stdint.h>
#include <string.h>
int main(){
int file;
file = open("/dev/i2c-0", O_RDWR);
if (file < 0) {
exit(1);
}
int addr = 0x60;
if(ioctl(file, I2C_SLAVE, addr) < 0){
exit(1);
}
__u8 reg = 0x05;
__u8 res;
__u8 data = 0xff;
int written = write(file, ®, 1);
printf("write returned %d\n", written);
written = write(file, &data, 1);
printf("write returned %d\n", written);
}
当我编译并运行这段代码时,我得到: 写返回 -1
写返回 -1
我试图完全按照文档告诉我的内容进行操作,我的理解是首先通过调用设置地址ioctl
,然后我需要到write()
寄存器,然后是我想要发送到寄存器的数据。
我也尝试过使用 SMbus,但我无法使用它来编译我的代码,它在链接阶段抱怨它找不到函数。
我在这段代码中犯了任何错误吗?我是初学者i2c
,也没有很多经验c
。
编辑:errno 给出以下消息:Operation not supported
. 我在这台机器上以 root 身份登录,所以我不认为这可能是权限问题,尽管我可能错了。