如何使用 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;
}