如何使用 i2cget 命令读取 i2c?
How to read i2c with out i2cget command?
我目前正在使用 Kontron smarc-samx6i 开发板,我 运行 这个开发板带有 Yocto 内核。此处内核不支持命令 i2cget
检查要从传感器读取的 i2c 数据。那么,还有其他可能的方法来从传感器读取 i2c 数据吗?
您可以将 "i2c-tools" 添加到您的图像中:
IMAGE_INSTALL_append = " i2c-tools"
它们包括 i2cget.c
。
可以在以下位置找到食谱:/meta/recipes-devtools/i2c-tools/
您可能还想研究使用 i2c 开发接口编写您自己的应用程序。请参阅 i2c.
上的内核文档
阅读:
#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;
}
我目前正在使用 Kontron smarc-samx6i 开发板,我 运行 这个开发板带有 Yocto 内核。此处内核不支持命令 i2cget
检查要从传感器读取的 i2c 数据。那么,还有其他可能的方法来从传感器读取 i2c 数据吗?
您可以将 "i2c-tools" 添加到您的图像中:
IMAGE_INSTALL_append = " i2c-tools"
它们包括 i2cget.c
。
可以在以下位置找到食谱:/meta/recipes-devtools/i2c-tools/
您可能还想研究使用 i2c 开发接口编写您自己的应用程序。请参阅 i2c.
上的内核文档阅读:
#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;
}