以下是一个简单的Linux下I2C驱动示例,用于读取或写入I2C设备寄存器的数据:
#include <linux/i2c-dev.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
int main() {
int file;
char *filename = "/dev/i2c-1"; // I2C总线设备节点
int addr = 0x68; // I2C设备地址
if ((file = open(filename, O_RDWR)) < 0) { // 打开I2C总线设备
perror("Failed to open the bus.");
return 1;
}
if (ioctl(file, I2C_SLAVE, addr) < 0) { // 设置I2C设备地址
perror("Failed to acquire bus access and/or talk to slave.");
return 1;
}
// 写入寄存器示例
char writeBuffer[3] = {0x00, 0x01, 0x02}; // 要写入的数据
if (write(file, writeBuffer, sizeof(writeBuffer)) != sizeof(writeBuffer)) {
perror("Failed to write to the register.");
return 1;
}
// 读取寄存器示例
char readBuffer[4];
char reg = 0x10; // 要读取的寄存器地址
if (write(file, ®, sizeof(reg)) != sizeof(reg)) { // 先写入要读取的寄存器地址
perror("Failed to write to the register.");
return 1;
}
if (read(file, readBuffer, sizeof(readBuffer)) != sizeof(readBuffer)) { // 读取数据
perror("Failed to read from the register.");
return 1;
}
close(file); // 关闭I2C总线设备
return 0;
}
请注意,此示例仅供参考,具体的使用方法和设备地址需要根据实际情况进行调整。同时,编译和运行该示例可能需要一些额外的设置和权限。
内容由零声教学AI助手提供,问题来源于学员提问