如何用i2cget命令读取i2c?

时间:2016-07-07 07:02:47

标签: embedded-linux i2c yocto

我目前正在使用控创smarc-samx6i主板,我正在使用Yocto内核运行此主板。这里内核不支持命令i2cget来检查从传感器读取的i2c数据。那么,有没有其他可能的方法从传感器读取i2c数据?

3 个答案:

答案 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;
}