我目前正在使用控创smarc-samx6i主板,我正在使用Yocto内核运行此主板。这里内核不支持命令i2cget
来检查从传感器读取的i2c数据。那么,有没有其他可能的方法从传感器读取i2c数据?
答案 0 :(得分:1)
您可以添加" i2c-tools"你的形象:
IMAGE_INSTALL_append = " i2c-tools"
它们包括i2cget.c
。
配方可在以下网址找到:/meta/recipes-devtools/i2c-tools/
答案 1 :(得分:0)
您可能还希望使用i2c dev界面编写自己的应用程序。请参阅i2c上的内核文档。
答案 2 :(得分:0)
阅读:
#include <stdio.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <errno.h>
#define I2C_ADDR 0x20
int main (void) {
char buffer[1];
int fd;
fd = open("/dev/i2c-0", O_RDWR);
if (fd < 0) {
printf("Error opening file: %s\n", strerror(errno));
return 1;
}
if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) {
printf("ioctl error: %s\n", strerror(errno));
return 1;
}
buffer[0]=0xFF;
write(fd, buffer, 1);
read(fd, buffer, 1);
printf("0x%02X\n", buffer[0]);
return 0;
}
写:
#include <stdio.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <errno.h>
#define I2C_ADDR 0x20
int main (void) {
int value;
int fd;
fd = open("/dev/i2c-0", O_RDWR);
if (fd < 0) {
printf("Error opening file: %s\n", strerror(errno));
return 1;
}
if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) {
printf("ioctl error: %s\n", strerror(errno));
return 1;
}
for (value=0; value<=255; value++) {
if (write(fd, &value, 1) != 1) {
printf("Error writing file: %s\n", strerror(errno));
}
usleep(100000);
}
return 0;
}