如何不用 i2cget 命令读取 i2c?

问题描述 投票:0回答:3

我目前正在使用 Kontron smarc-samx6i 板,并且我正在使用 Yocto 内核运行该板。这里内核不支持命令

i2cget
检查要从传感器读取的 i2c 数据。那么,还有其他可能的方法从传感器读取 i2c 数据吗?

embedded-linux i2c yocto
3个回答
2
投票

您可以将“i2c-tools”添加到您的图像中:

IMAGE_INSTALL_append = " i2c-tools"

它们包括

i2cget.c

食谱可以在:

/meta/recipes-devtools/i2c-tools/

找到

1
投票

阅读:

#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;
}

0
投票

您可能还想考虑使用 i2c 开发接口编写自己的应用程序。请参阅 i2c 上的内核文档。

© www.soinside.com 2019 - 2024. All rights reserved.