【51单片机】别再搞混 IIC 和 UART!51 单片机 IIC 协议:原理 + 帧结构 + 通信流程全拆解

🔥小龙报:个人主页

🎬作者简介:C++研发,嵌入式,机器人方向学习者

❄️个人专栏:《工科必装软件安装教程》《嵌入式的开端 ---- 51单片机》
永远相信美好的事情即将发生

文章目录

  • 前言
  • 一、IIC与UART协议
    • [1.1 什么是IIC](#1.1 什么是IIC)
    • [1.2 IC协议和UART协议的区别:](#1.2 IC协议和UART协议的区别:)
    • [1.3 总结](#1.3 总结)
  • 二、IIC的构成
    • [2.1 IIC的硬件构成](#2.1 IIC的硬件构成)
    • [2.2 主机与从机](#2.2 主机与从机)
    • [2.3 IIC如何发送数据](#2.3 IIC如何发送数据)
    • [2.4 IIC通信帧构成](#2.4 IIC通信帧构成)
  • 三、IIC完整的通讯过程
    • [3.1 主机发送一个字节到从机](#3.1 主机发送一个字节到从机)
    • [3.2 主机读取从机一个字节](#3.2 主机读取从机一个字节)
    • [3.3 发送读取多个字节](#3.3 发送读取多个字节)
  • 总结与每日励志

前言

IIC(I2C)是嵌入式开发中核心的串行通信协议,凭借双线制、多主从、易扩展的特性,广泛应用于传感器、存储芯片等外设通信场景。本文从 IIC 与 UART 协议的核心差异切入,拆解 IIC 的硬件构成、数据传输规则、通信帧结构,再通过 "主机发 / 读单个字节""多字节传输" 等完整通信流程,通俗讲解 IIC 的工作逻辑,帮助初学者吃透协议本质,掌握 51 单片机 IIC 通信的核心原理。

一、IIC与UART协议

1.1 什么是IIC

IIC协议,又称I2C协议,是由PHILP公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备

1.2 IC协议和UART协议的区别:

UART协议: 一种异步的、点对点的串行通信协议。它通常用于两个设备之间的全双工通信。你需要 三根数据线(TX、RX、GND)来实现双向通信

I2C: 一种同步的、多主从的串行通信协议。它使用非常少的引脚(两根线)就可以连接多个从设备。这两根线一根是时钟线,一根是数据线

1.3 总结

二、IIC的构成

2.1 IIC的硬件构成

  1. IIC串行总线一般有两根信号线,一根是时钟线SCL,另一根是数据线SDA,时钟线用于同步有效数据和控制通信速率,数据线是用来传输数据的
  2. IIC总线会默认需要接上拉电阻,在没有设备发送数据时,使得IIC总线电平为高电平,也就是如果IIC两根线的电平都为高电平时,代表总线当前为空闲状态
  3. 特别注意:一条总线上的每个从设备都有唯一的地址

2.2 主机与从机

在上面的电路中,51单片机就是IIC通信的主机(master),就是老板,上班时间、下班时间、都是他来决定的,指令都是他来发出来的,他要找谁干啥,谁就干啥,一般主机就是我们的单片机

2.3 IIC如何发送数据

例如:主机通过IIC发送0xF5(0b1111 0101)

从上图我们可以了解到一些信息,

  1. IIC的有效数据,是在SCL高电平时读取的SDA电平
  2. IIC的通信速率,是由SCL的速率决定的,SCL翻转速度越快,IIC总线速率越高,实际使用IIC的速率,需要根据从机,传感器可支持的最大速率而定

2.4 IIC通信帧构成

一次完整的IIC通信,除了要发送数据外,还需要有其它信号一起完成,例如起始信号、一个或多个数据帧、应答位、停止信号组成

三、IIC完整的通讯过程

3.1 主机发送一个字节到从机


发送1Byte数据给从机过程 :​

1.主机发送->起始信号​

2.主机发送->从机地址7bit+写标志1bit​

3.等待从机应答​

4.主机发送->数据8bit​

5.等待从机应答​

6.主机发送->结束信号

3.2 主机读取从机一个字节


读取从机1Byte数据的过程

1.主机发送->起始信号

  1. 主机发送->从机地址7bit+读标志1bit

  2. 等待从机应答

  3. 主机读取->从机数据8bit

  4. 主机发送非应答信号(告诉从机停止发送)

  5. 主机发送->结束信号

3.3 发送读取多个字节

总结与每日励志

✨本文完整解析了 IIC 协议的核心知识点:从与 UART 的协议差异,到硬件构成、数据传输规则,再到主机发 / 读字节、多字节传输的完整通信流程,清晰呈现了 IIC"双线通信、主从协作、应答交互" 的核心逻辑。嵌入式通信协议的学习重在理解帧结构与交互流程,每一次对时序、应答的拆解,都是技术积累的过程。✨ 沉下心吃透每一个协议细节,你的代码终将精准驾驭各类外设通信,在嵌入式之路上稳步前行

相关推荐
寻寻觅觅☆13 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
YJlio13 小时前
1.7 通过 Sysinternals Live 在线运行工具:不下载也能用的“云端工具箱”
c语言·网络·python·数码相机·ios·django·iphone
fpcc13 小时前
并行编程实战——CUDA编程的Parallel Task类型
c++·cuda
ceclar12314 小时前
C++使用format
开发语言·c++·算法
lanhuazui1015 小时前
C++ 中什么时候用::(作用域解析运算符)
c++
charlee4415 小时前
从零实现一个生产级 RAG 语义搜索系统:C++ + ONNX + FAISS 实战
c++·faiss·onnx·rag·语义搜索
不做无法实现的梦~15 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
老约家的可汗15 小时前
初识C++
开发语言·c++
crescent_悦15 小时前
C++:Product of Polynomials
开发语言·c++
小坏坏的大世界16 小时前
CMakeList.txt模板与 Visual Studio IDE 操作对比表
c++·visual studio