我已經通過了Linux kernel documents on i2c讀取和寫入代碼,試圖複製命令i2cset -y 0 0x60 0x05 0xff
的write()返回-1寫I2C_SLAVE設備
我寫代碼的時候是在這裏:
#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
我試着跟隨正是文檔告訴我,我的understandi ng是該地址首先被設置爲ioctl
,然後我需要write()
這個寄存器,然後是我想要發送到寄存器的數據。
我也試過使用使用SMbus,但我不能讓我的代碼編譯使用它,它抱怨在鏈接階段,它無法找到函數。
我在這段代碼中犯了什麼錯誤嗎?我是i2c
的初學者,也沒有很多c
的經驗。
編輯:errno給出以下消息:Operation not supported
。我以root身份登錄到這臺機器上,所以我不認爲它可能是一個權限的事情,雖然我可能是錯的。
我已經添加了errno輸出,謝謝。 – James