STM32学习笔记 —— I2C通信

本期小政带领大家了解一下I2C通信的相关概念。

1、I2C定义

I2C(IIC,Inter—Intergrated Circuit),两线式串行总线,用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被IC之间,IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。

IIC是半双工通信方式。

2、多主机I2C总线系统结构

STM32学习笔记 —— I2C通信_第1张图片

3、I2C协议

① 空闲状态

② 开始信号

③ 停止信号

④ 应答信号

⑤ 数据有效性

⑥ 数据传输

(1)空闲状态

I2C总线的SDA与SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

(2)起始信号与停止信号

● 起始信号:当SCL为高电平,SDA由高到低的跳变:启动信号是一种电平跳变时序信号,而不是电平信号。
● 停止信号:当SCL为高期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。
STM32学习笔记 —— I2C通信_第2张图片

(3)应答信号ACK

发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。
如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P。
STM32学习笔记 —— I2C通信_第3张图片

(4)数据有效性

I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或者低电平状态才允许变化。
即:数据在SCL的上升沿到来之前就需准备好。并在下降沿到来之前必须稳定。
STM32学习笔记 —— I2C通信_第4张图片

(5)数据的传送

在I2C总线上传送的每一位数据都有一个时钟脉冲相对(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。

4、分析I2C底层驱动程序

(1)EEPROM(24C02)

总容量:256(2K/8)个字节。
接口:I2C

STM32学习笔记 —— I2C通信_第5张图片
STM32学习笔记 —— I2C通信_第6张图片
STM32学习笔记 —— I2C通信_第7张图片

(2)24C02字节写时序

STM32学习笔记 —— I2C通信_第8张图片

(3)24C02读时序

STM32学习笔记 —— I2C通信_第9张图片

本期的STM32自学笔记就到这里啦,如果有朋友还想学习在程序中对I2C有跟深入的了解,私信小政,小政会给你发送程序并进行详解哦!

你可能感兴趣的:(STM32学习笔记 —— I2C通信)