如何使用i2c程序和raspberry pi(C语言)配置霍尔效应传感器(si7210)

如何使用i2c程序和raspberry pi(C语言)配置霍尔效应传感器(si7210),c,raspberry-pi3,sensors,i2c,C,Raspberry Pi3,Sensors,I2c,我想配置一个带有I2C的霍尔效应传感器,但我真的不知道如何管理它。 我真的不知道我必须在每个寄存器中输入哪个值,但这不是最大的问题。 事实上,我想阅读这些登记册,以便对其进行修改,从而了解我可以改变什么 为此,我编写了两个程序,分别写入/读取寄存器。 但我远不是一个专家,我不想得到一些关于如何修改代码以使其正常工作的建议和建议 包括这两个文件 #include <unistd.h> #include <fcntl.h> #include <sy

我想配置一个带有I2C的霍尔效应传感器,但我真的不知道如何管理它。 我真的不知道我必须在每个寄存器中输入哪个值,但这不是最大的问题。 事实上,我想阅读这些登记册,以便对其进行修改,从而了解我可以改变什么

为此,我编写了两个程序,分别写入/读取寄存器。 但我远不是一个专家,我不想得到一些关于如何修改代码以使其正常工作的建议和建议

包括这两个文件

#include <unistd.h>     
#include <fcntl.h>      
#include <sys/ioctl.h>      
#include <linux/i2c-dev.h>  
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <stdint.h>
我希望你能帮忙,非常感谢,
yocvito

最后,阅读程序运行良好

那条线上有个问题

register_addr = i >> 8;
我在不知道为什么的情况下右移了8位

所以我用

register_addr = i;
所以我得到了预期的回报(值​​与预期一致)

至于编写程序,它已经在工作了(他在指定的寄存器中写得很好)。但是,书面价值观​​错误(第一个寄存器除外)

写:

Valeur de registre pour 0xC0 : 00010100

Valeur de registre pour 0xC1 : 11111111

Valeur de registre pour 0xC2 : 11111111

阅读:

int file_i2c;

int addr = 0x31;

int main(void)
{

    //----- OPEN THE I2C BUS -----
    char *filename = (char *)"/dev/i2c-1";
    if ((file_i2c = open(filename, O_RDWR)) < 0)
    {
        return EXIT_FAILURE;
    }

    if (ioctl(file_i2c, I2C_SLAVE, addr) < 0)
    {
        return EXIT_FAILURE;
    }

    uint8_t register_addr;
    uint8_t str;
    for( int i = 0xC0 ; i<0xE5 ; i++)
    {
        if( i < 0xD1 || i > 0xE0)
        {
            register_addr = i >> 8;
            if(write(file_i2c, &register_addr, 1) == 1)
            {
                if (read(file_i2c, &str, 1) != 1)   
                {
                    fprintf(stderr,"Failed to read\n");
                }
                else
                {
                    printf("data on 0x%02X : 0x%02X\n",i,str);
                }
            }
        }
    }
    close(file_i2c);
    return EXIT_SUCCESS;
}
data on 0xC0 : 0x14
data on 0xC1 : 0x7F
data on 0xC2 : 0x1F


您知道这可能来自何处吗?

您是否使用命令行工具检查您是否可以使用已知良好的软件进行读取?是的,我尝试使用命令“i2cdetect-y 1”,它输出了数据表上所写的i2c地址
data on 0xC0 : 0x14
data on 0xC1 : 0x00
data on 0xC2 : 0x00
data on 0xC3 : 0x00
data on 0xC4 : 0x02
data on 0xC5 : 0x00
data on 0xC6 : 0xB0
data on 0xC7 : 0x12
data on 0xC8 : 0xE6
data on 0xC9 : 0xBD
data on 0xCA : 0xD1
data on 0xCB : 0x58
data on 0xCC : 0xB9
data on 0xCD : 0x00
data on 0xCE : 0x05
data on 0xCF : 0x33
data on 0xD0 : 0x00
data on 0xE1 : 0x00
data on 0xE2 : 0x00
data on 0xE3 : 0x00
data on 0xE4 : 0x00
Valeur de registre pour 0xC0 : 00010100

Valeur de registre pour 0xC1 : 11111111

Valeur de registre pour 0xC2 : 11111111

data on 0xC0 : 0x14
data on 0xC1 : 0x7F
data on 0xC2 : 0x1F