【STM32】STM32学习笔记-I2C通信协议(31)

00. 目录

文章目录

    • [00. 目录](#00. 目录)
    • [01. I2C简介](#01. I2C简介)
    • [02. I2C主要特点](#02. I2C主要特点)
    • [03. I2C硬件电路](#03. I2C硬件电路)
    • [04. I2C时序基本单元](#04. I2C时序基本单元)
    • [05. I2C时序波形图](#05. I2C时序波形图)
    • [06. 附录](#06. 附录)

01. I2C简介

I2C(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。

串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s,快速模式下可达 400kbit/s,高速模式下可达 3.4Mbit/s。

I2C是一个多主机的总线,每个设备既可以当主控器或被控器,又可作为发送器或接收器,一条总线上可以有多个主机,但同一时刻只允许一个主机工作。

可以用来连接存储器(EEPROM、FLASH)、A/D、D/A转换器、LCD驱动器、传感器等等。

I2C一共有只有两个总线: 一条是双向的串行数据线SDA,一条是串行时钟线SCL。

SDA(Serial data)是数据线,D代表Data也就是数据,Send Data 也就是用来传输数据的

SCL(Serial clock line)是时钟线,C代表Clock 也就是时钟 也就是控制数据发送的时序的

所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。I2C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。

02. I2C主要特点

通常我们为了方便把I2C设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。

  • I2C主设备功能:主要产生时钟,产生起始信号和停止信号

  • I2C从设备功能:可编程的I2C地址检测,停止位检测

  • I2C的一个优点是它支持多主控(multimastering), 其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。

  • 串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速

    模式下可达 3.4Mbit/s

  • SCL和SDA都需要接上拉电阻保证数据的稳定性,减少干扰。

  • I2C是半双工,而不是全双工 ,同一时间只可以单向通信

为了避免总线信号的混乱,要求各设备连接到总线的输出端时必须是漏极开路(OD)输出或集电极开路(OC)输出。

03. I2C硬件电路

• 所有I2C设备的SCL连在一起,SDA连在一起

• 设备的SCL和SDA均要配置成开漏输出模式

• SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右

04. I2C时序基本单元

•起始条件:SCL高电平期间,SDA从高电平切换到低电平

•终止条件:SCL高电平期间,SDA从低电平切换到高电平

•发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节

•接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)

•发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

•接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)

05. I2C时序波形图

•指定地址写

•对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data)

•当前地址读

•对于指定设备(Slave Address),在当前地址指针指示的地址下,读取从机数据(Data)

•指定地址读

•对于指定设备(Slave Address),在指定地址(Reg Address)下,读取从机数据(Data)

06. 附录

参考: 【STM32】江科大STM32学习笔记汇总

相关推荐
名字不要太长 像我这样就好5 小时前
【iOS】OC源码阅读——alloc源码分析
笔记·学习·macos·ios·objective-c
xin007hoyo5 小时前
算法笔记.染色法判断二分图
数据结构·笔记·算法
bloxd yzh6 小时前
简易版2D我的世界C++程序(有点BUG,但是可以玩!!!)
stm32·单片机·嵌入式硬件
conkl6 小时前
如何初入学习编程包含学习流程图
学习·流程图
大学生亨亨6 小时前
go语言八股文(五)
开发语言·笔记·golang
FAREWELL000759 小时前
C#进阶学习(十六)C#中的迭代器
开发语言·学习·c#·迭代器模式·迭代器
无敌小茶9 小时前
Linux学习笔记之动静态库
linux·笔记
DXM052110 小时前
牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记3-地图基本操作与实战案例
开发语言·笔记·学习·arcgis·c#·ae·arcgis engine
qsmyhsgcs11 小时前
Java程序员转人工智能入门学习路线图(2025版)
java·人工智能·学习·机器学习·算法工程师·人工智能入门·ai算法工程师
Humbunklung11 小时前
PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRectF)
笔记·python·学习·pyqt