当前位置: 首页 > news >正文

I2C 总线

一、I2C 总线的核心目的

I2C 总线是一种用于短距离设备间通信的串行总线,主要解决 “主控芯片与外设(如传感器、OLED 屏)之间的数据传输” 问题。
例如:STM32 单片机(主机)通过 I2C 总线读取 SHT20 温湿度传感器(从机)的数据,再通过 UART 发送到 PC 端显示。

二、I2C 总线基础概念

  1. 定义:串行、同步、半双工总线(飞利浦设计),仅需 2 根线(SCL 时钟线、SDA 数据线),均为双向。
  2. 硬件必备:SCL 和 SDA 需外接上拉电阻(作用:空闲时保持高电平,稳定电路)。
  3. 通信速率:低速 100Kbps、中速 400Kbps、高速 3.4Mbps(常用中低速)。
  4. 主从模式:支持单主机多从机(最常用)或多主机多从机。
    • 主机:主动发起 / 结束通信(如 STM32);从机:被动响应(如传感器)。
  5. 设备地址:每个从机有唯一 7 位地址(如 SHT20 的地址为 0x40),用于主机识别目标设备。

三、硬件连接示例(单主机多从机)

  • 主机:STM32U575RIT6
  • 从机:SHT20(温湿度,0x40)、MAX30102(心率,地址另设)等
  • 连接方式:所有设备的 SCL 引脚相连,SDA 引脚相连,各自接 3.3V 和 GND,SCL/SDA 线接 10KΩ 上拉电阻到 3.3V。

四、关键时序(通信的 “语法规则”)

1. 起始信号(S)与终止信号(P)
  • 起始信号(S):SCL 高电平时,SDA 从高→低(下降沿),标志通信开始(仅主机产生)。
  • 终止信号(P):SCL 高电平时,SDA 从低→高(上升沿),标志通信结束(仅主机产生)。
  • 例:主机想和 SHT20 通信,先发送起始信号 “唤醒” 总线。
2. 数据传输时序
  • 数据以字节(8 位)为单位传输,每 bit 需 1 个时钟周期(SCL 高 + 低)。
  • 发送数据:SCL 低电平时,SDA 可改变(发送器写数据)。
  • 接收数据:SCL 高电平时,SDA 需稳定(接收器读数据)。
  • 例:发送 “0x40” 时,SCL 每低一次,SDA 依次输出该字节的 8 位(从高位到低位)。
3. 应答信号(ACK/NACK)
  • 每传输 1 字节后,第 9 个时钟周期需回复应答:
    • ACK(0):接收器确认收到数据;
    • NACK(1):接收器未收到或结束通信。
  • 例:主机给 SHT20 发完地址后,SHT20 回复 ACK 表示 “我在”。
4. 寻址信号(找目标设备)
  • 主机发送 7 位从机地址 + 1 位读写位(W=0 写,R=1 读),凑成 8 位。
  • 例:主机想读 SHT20(地址 0x40),寻址信号为 (0x40 << 1) | 1 = 0x81;想写则为 0x80

五、通信协议格式(实际 “对话流程”)

示例 1:主机从 SHT20 读取温度数据(单字节)
  1. 主机发起始信号(S);
  2. 主机发寻址信号(0x80,写方向,找 SHT20);
  3. SHT20 回复 ACK;
  4. 主机发 “读取温度” 命令(寄存器地址 0xE3);
  5. SHT20 回复 ACK;
  6. 主机发起始信号(重新开始);
  7. 主机发寻址信号(0x81,读方向);
  8. SHT20 回复 ACK;
  9. SHT20 发送温度数据(8 位);
  10. 主机回复 NACK(表示 “够了,结束”);
  11. 主机发终止信号(P)。
示例 2:为什么读数据需要 “先写后读”?
  • 第一步 “写”:主机先告诉 SHT20“我要和你说话(地址),并要读你的温度寄存器(0xE3)”;
  • 第二步 “读”:确认 SHT20 准备好后,主机再读取该寄存器的数据。

六、实战:SHT20 温湿度传感器应用

  1. 设备地址:7 位地址 0x40(寻址信号写 0x80,读 0x81)。
  2. 关键寄存器
    • 温度测量:0xE3(hold 模式,单主机);
    • 湿度测量:0xE5(hold 模式)。
  3. 精度设置:默认温度 14 位、湿度 12 位(可通过用户寄存器修改)。
  4. 数据转换公式
    • 温度:T(℃) = -46.85 + 175.72 × (温度数字量 / 65536)
    • 湿度:RH(%) = -6 + 125 × (湿度数字量 / 65536)

总结

I2C 总线的核心是 “通过时序和地址实现设备间有序通信”,理解起始 / 终止信号、应答机制、寻址规则是关键。实际应用中,需结合具体设备的地址和寄存器手册,按协议格式编写读写代码(如 STM32 通过 GPIO 模拟时序或使用硬件 I2C 外设)。


文章转载自:

http://Ewn9pB44.yLtyz.cn
http://kOulns95.yLtyz.cn
http://CnsLpcNW.yLtyz.cn
http://znTdDM0V.yLtyz.cn
http://VVvOjbyI.yLtyz.cn
http://igElXmc0.yLtyz.cn
http://TPC7JHzX.yLtyz.cn
http://FDMk6D0s.yLtyz.cn
http://ItU8joVa.yLtyz.cn
http://PN10QpeQ.yLtyz.cn
http://65gT1Ika.yLtyz.cn
http://H07z9YRd.yLtyz.cn
http://WxQNQetH.yLtyz.cn
http://u7Gzpe9h.yLtyz.cn
http://Az3eWV0n.yLtyz.cn
http://FxfmB5Y1.yLtyz.cn
http://kif5WeYY.yLtyz.cn
http://VFrvzNiF.yLtyz.cn
http://R47rQwnl.yLtyz.cn
http://br1TPxcX.yLtyz.cn
http://PjhXekmj.yLtyz.cn
http://cSMEv44e.yLtyz.cn
http://eBTlCL20.yLtyz.cn
http://fo1fiisU.yLtyz.cn
http://TsNqrSyR.yLtyz.cn
http://3rUlbQE5.yLtyz.cn
http://9q0sh8SN.yLtyz.cn
http://8PAMbqtC.yLtyz.cn
http://ZqdX4VJ5.yLtyz.cn
http://rABA6u1T.yLtyz.cn
http://www.dtcms.com/a/379421.html

相关文章:

  • 设计模式——七大常见设计原则
  • 请创建一个视觉精美、交互流畅的进阶版贪吃蛇游戏
  • 利用美团龙猫添加xlsx的sheet.xml读取sharedStrings.xml中共享字符串输出到csv功能
  • 时序数据库:定义与基本特点
  • 【WorkManager】Android 后台任务调度的核心组件指南
  • python项目批量安装包和生成requirements.txt文件
  • 零部件力学测试系统参数
  • 3D Web轻量引擎HOOPS赋能BIM/工程施工:实现超大模型的轻量化加载与高效浏览!
  • Java Web应用的安全性与防护措施!
  • 填写简历信息
  • 优先算法——专题十一:字符串
  • [Spring Cloud][3]从零开始简单工程搭建实践详解,远程调用
  • 为什么要显示调用析构函数
  • MySQL 数据完整性与约束:从基础到实战,守护数据准确性
  • Python中的“占位符”艺术:深入理解pass关键字的妙用
  • 构建企业级Python离线包仓库:从下载到服务部署全流程指南
  • C++面向对象之多态
  • 个人自留笔记——git操作
  • 命令模式,餐厅订单管理系统C++
  • Android EDLA测试命令总结
  • opencv基础实践;银行卡号识别
  • 【录屏软件】 实用工具推荐——电脑录屏软件班迪(Bandicam)录屏图文安装指南
  • 微服务事务管理实践与 Seata 框架解析
  • 今日行情明日机会——20250911
  • P4105 [HEOI2014] 南园满地堆轻絮
  • Docker 命令核心语法、常用命令
  • Windows安装Chroma DB
  • 60_基于深度学习的羊群计数统计系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • Linux 命令 top、vmstat、iostat、free、iftop 正常用法和退出.
  • 深入解析HashMap:从原理到实践的全方位指南