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);
}
このコードをコンパイルして実行すると、次のようになります
。
私はドキュメントが教えてくれることを正確に従おうとしました.私の理解では、アドレスは最初に への呼び出しで設定されioctl
、次に登録する必要があり、次にwrite()
登録に送信したいデータが必要です。
SMbus も使用しようとしましたが、これを使用してコードをコンパイルできません。リンク段階で関数が見つからないと文句を言います。
このコードで間違いを犯したことがありますか? 私は初心者で、どちらもi2c
あまり経験がありませんc
。
編集: errno 次のメッセージを表示します: Operation not supported
. 私はこのマシンにルートとしてログインしているので、間違っているかもしれませんが、パーミッションの問題ではないと思います。