i2c_smbus_read_i2c_block_data() 读16bit寄存器值 实例
时间: 2023-08-01 15:09:33 浏览: 174
好的,下面是一个读取16位寄存器值的实例:
```c
#include <linux/i2c-dev.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int file;
char filename[20];
int addr = 0x42; // 设备地址
int reg = 0x10; // 寄存器地址
char buf[2]; // 读取的数据将存储在这里
sprintf(filename, "/dev/i2c-1"); // I2C接口路径
if ((file = open(filename, O_RDWR)) < 0) { // 打开文件描述符
perror("Failed to open the bus.\n");
exit(1);
}
if (ioctl(file, I2C_SLAVE, addr) < 0) { // 设置设备地址
perror("Failed to acquire bus access and/or talk to slave.\n");
exit(1);
}
if (i2c_smbus_read_i2c_block_data(file, reg, 2, buf) < 0) { // 读取16位寄存器值
perror("Failed to read from the i2c bus.\n");
exit(1);
}
printf("Read value: %d\n", (buf[0] << 8) | buf[1]); // 打印读取的值
close(file);
return 0;
}
```
注意:这个例子假设你的设备文件路径是`/dev/i2c-1`,设备地址是`0x42`,要读取的寄存器地址是`0x10`。你需要根据自己的实际情况进行修改。
阅读全文