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

00. 目录

文章目录

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

01. I2C简介

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

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

I2C是一个多主机的总线,每个设备既可以当主控器或被控器,又可作为发送器或接收器,一条总线上可以有多个主机,但同一时刻只允许一个主机工作。
【STM32】STM32学习笔记-I2C通信协议(31)_第1张图片

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

【STM32】STM32学习笔记-I2C通信协议(31)_第2张图片

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Ω左右
【STM32】STM32学习笔记-I2C通信协议(31)_第3张图片

04. I2C时序基本单元

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

•终止条件:SCL高电平期间,SDA从低电平切换到高电平
【STM32】STM32学习笔记-I2C通信协议(31)_第4张图片

•发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节
【STM32】STM32学习笔记-I2C通信协议(31)_第5张图片

•接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)
【STM32】STM32学习笔记-I2C通信协议(31)_第6张图片

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

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

【STM32】STM32学习笔记-I2C通信协议(31)_第7张图片

05. I2C时序波形图

•指定地址写

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

【STM32】STM32学习笔记-I2C通信协议(31)_第8张图片

•当前地址读

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

【STM32】STM32学习笔记-I2C通信协议(31)_第9张图片

•指定地址读

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

【STM32】STM32学习笔记-I2C通信协议(31)_第10张图片

06. 附录

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

你可能感兴趣的:(STM32F103,stm32,学习,笔记,江科大,江科大stm32,I2C,i2c)