i2c同时与多个从设备进行通信的C语言代码
时间: 2024-01-21 20:17:47 浏览: 132
I2C通信代码
以下是一个使用 C 语言编写的 I2C 总线上同时与多个从设备进行通信的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#define I2C_BUS "/dev/i2c-1"
int main() {
int fd;
int addr1 = 0x3C; // 从设备1地址
int addr2 = 0x48; // 从设备2地址
char buf[10];
// 打开 I2C 总线设备
if ((fd = open(I2C_BUS, O_RDWR)) < 0) {
perror("Failed to open I2C bus");
exit(1);
}
// 与从设备1通信
if (ioctl(fd, I2C_SLAVE, addr1) < 0) {
perror("Failed to set I2C address");
exit(1);
}
// 向从设备1发送数据并读取响应
buf[0] = 0x01; // 发送的数据
if (write(fd, buf, 1) != 1) {
perror("Failed to write to I2C device");
exit(1);
}
if (read(fd, buf, 1) != 1) {
perror("Failed to read from I2C device");
exit(1);
}
printf("Received data from device 1: 0x%02X\n", buf[0]);
// 与从设备2通信
if (ioctl(fd, I2C_SLAVE, addr2) < 0) {
perror("Failed to set I2C address");
exit(1);
}
// 向从设备2发送数据并读取响应
buf[0] = 0x02; // 发送的数据
if (write(fd, buf, 1) != 1) {
perror("Failed to write to I2C device");
exit(1);
}
if (read(fd, buf, 1) != 1) {
perror("Failed to read from I2C device");
exit(1);
}
printf("Received data from device 2: 0x%02X\n", buf[0]);
close(fd);
return 0;
}
```
在这个例子中,我们使用 `ioctl()` 函数来设置从设备的地址,并且在每次通信前改变从设备的地址。在实际应用中,可以使用多个 I2C 总线或者多路复用器来同时与多个从设备进行通信,从而提高通信效率。
阅读全文