以下是一个基于Linux内核的读写I2C从设备寄存器的示例代码:
#include <linux/i2c-dev.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#define I2C_DEV "/dev/i2c-1" // I2C设备文件路径
#define SLAVE_ADDR 0x50 // 从设备地址
int main() {
int i2c_fd;
unsigned char buf[2];
// 打开I2C设备文件
if ((i2c_fd = open(I2C_DEV, O_RDWR)) < 0) {
perror("Failed to open I2C device");
return -1;
}
// 设置从设备地址
if (ioctl(i2c_fd, I2C_SLAVE, SLAVE_ADDR) < 0) {
perror("Failed to set I2C slave address");
close(i2c_fd);
return -1;
}
// 向指定寄存器写入数据
buf[0] = 0x10; // 寄存器地址
buf[1] = 0xAB; // 写入的数据
if (write(i2c_fd, buf, 2) != 2) {
perror("Failed to write to register");
close(i2c_fd);
return -1;
}
// 从指定寄存器读取数据
buf[0] = 0x10; // 寄存器地址
if (write(i2c_fd, &buf[0], 1) != 1) {
perror("Failed to write register address");
close(i2c_fd);
return -1;
}
if (read(i2c_fd, &buf[1], 1) != 1) {
perror("Failed to read from register");
close(i2c_fd);
return -1;
}
printf("Read data: 0x%02X\n", buf[1]);
// 关闭I2C设备文件
close(i2c_fd);
return 0;
}
以上代码演示了如何打开I2C设备文件,设置从设备地址,以及读写寄存器的操作。请根据实际情况修改I2C_DEV
和SLAVE_ADDR
的值,并适配到您的项目中。
内容由零声教学AI助手提供,问题来源于学员提问