ESP32-C3入门教程 基础篇⑦——I2C通信读写EEPROM AT24CXX

81 篇文章 545 订阅 ¥59.90 ¥99.00

一、前言

本文基于VS Code IDE进行编程、编译、下载、运行等操作
基础入门章节请查阅:ESP32-C3入门教程 基础篇①——基于VS Code构建Hello World
教程目录大纲请查阅:ESP32-C3入门教程——导读

二、IIC简介

IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。
它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。
在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。

I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

  • 开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
  • 结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
  • 应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号&#
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
以下是一个简单的在Linux系统下使用I2C协议AT24CXX系列EEPROM的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <linux/i2c-dev.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #define I2C_ADDR 0x50 // EEPROM的I2C地址 #define EEPROM_SIZE 256 // EEPROM的大小 int main(void) { int fd; char buf[EEPROM_SIZE], data[EEPROM_SIZE]; int i; // 打开I2C总线 if ((fd = open("/dev/i2c-1", O_RDWR)) < 0) { perror("Failed to open i2c bus"); exit(1); } // 设置从设备地址 if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) { perror("Failed to set i2c address"); exit(1); } // EEPROM if (read(fd, buf, EEPROM_SIZE) != EEPROM_SIZE) { perror("Failed to read from the i2c bus"); exit(1); } // 打印EEPROM中的数据 printf("Read data: "); for (i = 0; i < EEPROM_SIZE; i++) { printf("%02x ", buf[i]); } printf("\n"); // EEPROM for (i = 0; i < EEPROM_SIZE; i++) { data[i] = i & 0xff; } if (write(fd, data, EEPROM_SIZE) != EEPROM_SIZE) { perror("Failed to write to the i2c bus"); exit(1); } // EEPROM if (read(fd, buf, EEPROM_SIZE) != EEPROM_SIZE) { perror("Failed to read from the i2c bus"); exit(1); } // 打印EEPROM中的数据 printf("Read data: "); for (i = 0; i < EEPROM_SIZE; i++) { printf("%02x ", buf[i]); } printf("\n"); // 关闭I2C总线 close(fd); return 0; } ``` 在使用该代码之前,需要确保已经将I2C总线驱动加载到内核中,并且已经连接好了AT24CXX系列EEPROM。如果需要使用其他I2C从设备,只需要将I2C_ADDR修改为对应从设备的地址即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小康师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值