我正在研究 VEML7700 Lux 传感器。数据表链接。我可以使用 i2c-tool 检测传感器并读取/写入数据。传感器的 I2C 地址为 0x10。在这里,我可以正确读取 0x04 结果寄存器。
apalis-imx8-06852506:~$ i2cdetect -y -r 4
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: 10 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
apalis-imx8-06852506:~$ i2cget -y 4 0x10 0x00 w
0x0000
apalis-imx8-06852506:~$ i2cget -y 4 0x10 0x00 w
0x0000
apalis-imx8-06852506:~$ i2cget -y 4 0x10 0x04 w
0x0930
apalis-imx8-06852506:~$ i2cget -y 4 0x10 0x04 w
0x093c
apalis-imx8-06852506:~$ i2cget -y 4 0x10 0x04 w
0x0939
apalis-imx8-06852506:~$
当我试图在 c 程序中读取寄存器时,我得到恒定的 0 值。但我也可以在 c 程序中使用 write 命令写入配置寄存器。
这是我的c程序。
#include <stdio.h>
#include <stdlib.h>
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
//sensor i2c address is 0x44
#define SLAVE_ADDR 0x10
void main()
{
// Create I2C bus
int file;
char *bus = "/dev/apalis-i2c1";
if((file = open(bus, O_RDWR)) < 0)
{
printf("Failed to open the bus. \n");
exit(1);
}
// Get I2C device, VEML7700 I2C address is 0x10-7BIT
ioctl(file, I2C_SLAVE, SLAVE_ADDR);
//unsigned char reg[1] = {0};
//unsigned char data[2] ;
__uint16_t reg_data;
//configuring the register 0x00
char config[3] = {0};
config[0] = 0x00;
config[1] = 0x00;
config[2] = 0x00;
write(file,config,3);
sleep(1);
unsigned char reg[1] = {0x04};
write(file, reg, 1);
sleep(1);
unsigned char data[2] = {0};
if(read(file, data, 2) != 2)
{
printf("Erorr : Input/output Erorr \n");
exit(1);
}
printf(" data[0] %x\n data[1] %x\n",data[0],data[1]);
close(file);
}
root@apalis-imx8-06852506:/bhagwatws# gcc light_sensor.c -o light_sensor
root@apalis-imx8-06852506:/bhagwatws# ./light_sensor
data[0] 0
data[1] 0
root@apalis-imx8-06852506:/bhagwatws# ./light_sensor
data[0] 0
data[1] 0
root@apalis-imx8-06852506:/bhagwatws# ./light_sensor
data[0] 0
data[1] 0