00. 目录
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)
文章来源:https://www.toymoban.com/news/detail-817703.html
06. 附录
参考: 【STM32】江科大STM32学习笔记汇总文章来源地址https://www.toymoban.com/news/detail-817703.html
到了这里,关于【STM32】STM32学习笔记-I2C通信协议(31)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!