嵌入式开发之STM32学习笔记day16
STM32F103C8T6 I2C通信协议
1 I2C简介
I2C(Inter-Integrated Circuit)是一种两线制的串行通信协议,广泛应用于微控制器与外围设备之间的数据传输,它支持多主多从的通信模式,允许多个设备连接在同一总线上,通过7位或10位的唯一地址进行识别,数据传输与时钟信号同步,支持标准模式(100 kbit/s)、快速模式(400 kbit/s)和高速模式(3.4 Mbit/s),并且通过起始和停止条件来标识通信的开始和结束,以及通过应答信号(ACK/NACK)来确认数据接收,因其简单、可靠且成本效益高,I2C协议成为许多嵌入式系统和微控制器系统中首选的通信协议。
I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线;两根通信线:SCL(Serial Clock)、SDA(Serial Data);同步,半双工;带数据应答;支持总线挂载多设备(一主多从、多主多从);所有I2C设备的SCL连在一起,SDA连在一起;设备的SCL和SDA均要配置成开漏输出模式;SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右。
2 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);
指定地址写:对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data)
这张图片显示的是I2C(Inter-Integrated Circuit)通信协议的波形图,它是一种用于连接微控制器和外围设备的两线制串行通信协议。图中展示了SCL(串行时钟线)和SDA(串行数据线)上的信号波形。
-
起始条件(S):通信开始于一个起始条件,由SDA线在SCL线为高电平时从高电平跳变到低电平。
-
发送字节(Send Byte):
-
第一个发送的字节是
0xD0
,这通常包含从设备的地址和读/写(R/W)位。图中显示了7位地址后跟一个位R/W位,其中R/W位为0表示写操作。 -
第二个发送的字节是
0x19
,这是寄存器地址,用于指定从设备中读取或写入数据的寄存器位置。 -
第三个发送的字节是
0xAA
,这是要写入从设备的数据。
-
-
应答信号(RA:0):在每个字节发送后,从设备通过拉低SDA线来发送一个应答信号(ACK),表示已成功接收到该字节。
-
停止条件(P):通信结束于一个停止条件,由SDA线在SCL线为高电平时从低电平跳变到高电平。
当前地址读:对于指定设备(Slave Address),在当前地址指针指示的地址下,读取从机数据(Data)
指定地址读:对于指定设备(Slave Address),在指定地址(Reg Address)下,读取从机数据(Data)