linux i2c读写寄存器代码
时间: 2023-11-21 19:22:53 浏览: 112
I2C.rar_i2c_linux i2c驱动
好的,以下是一个简单的 Linux C 语言程序,可以使用 I2C 总线读写寄存器:
```
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
int main()
{
int file;
char *filename = "/dev/i2c-1"; // I2C 设备文件路径
int addr = 0x50; // 设备地址
int reg = 0x10; // 寄存器地址
char buf[2] = {0}; // 数据缓冲区
// 打开 I2C 设备文件
if ((file = open(filename,O_RDWR)) < 0) {
perror("Failed to open I2C device file");
exit(1);
}
// 设置设备地址
if (ioctl(file,I2C_SLAVE,addr) < 0) {
perror("Failed to set I2C device address");
exit(1);
}
// 读取寄存器的一个字节
if (write(file,®,1) != 1) {
perror("Failed to write register address");
exit(1);
}
if (read(file,buf,1) != 1) {
perror("Failed to read register value");
exit(1);
}
printf("Read register 0x%02x: 0x%02x\n",reg,buf[0]);
// 将数据写入寄存器
buf[0] = 0x11;
if (write(file,buf,1) != 1) {
perror("Failed to write register value");
exit(1);
}
printf("Write register 0x%02x: 0x%02x\n",reg,buf[0]);
// 关闭 I2C 设备文件
close(file);
return 0;
}
```
这段程序使用了 Linux 的 I2C 设备驱动,打开 I2C 总线设备文件 `/dev/i2c-1`,并设置设备地址为 `0x50`,寄存器地址为 `0x10`。然后读取寄存器的一个字节,并将数据 `0x11` 写入寄存器中。注意,这里使用了 `write` 函数写入寄存器地址,然后使用 `read` 函数读取寄存器的值,而不是直接使用 `read` 函数读取数据。因为在 I2C 设备中,通常需要先写入寄存器地址,然后再读取或写入寄存器的值。
阅读全文