输入“/”快速插入内容

12、I2C

5月29日修改
一、简介
IIC协议,又称I2C协议,是由PHILP公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备,IIC属于半双工同步通信方式。
代码块
IIC是一种同步的串行通信总线协议它可以在多个设备之间传输数据。IIC总线由两根线组成:数据线(SDA)和时钟线(SCL)。它使用主从模式,其中一个设备作为主设备控制总线并向其他设备发出命令。IIC协议可以支持高速数据传输和多设备通信,但它的距离限制较短。
UART是一种异步的串行通信协议,它用于在两个设备之间传输数据。UART协议使用两根线:TX(发送)和RX(接收)。UART没有时钟线,数据传输的时序是通过发送和接收设备之间的协议约定实现的。UART协议通常用于短距离通信,例如在计算机和串口设备之间进行通信。
因此,IIC和UART协议在通信的方式、数据传输速度和距离限制等方面存在差异,根据具体的应用场景和需求选择合适的协议更为重要。
多主控(multimastering)
其中任何能够进行发送和接收的设备都可以成为主总线,一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
特征:简单性和有效性
两根线,在标准模式下,I2C总线的最大长度为5米,最大速率为100 kbit/s。在快速模式下,I2C总线的最大长度为1米,最大速率为400 kbit/s。在高速模式下,I2C总线的最大长度为0.4米,最大速率为3.4 Mbit/s。需要注意的是,总线长度的实际限制还取决于总线上的电容负载和电缆质量等因素。
IIC完成的通讯过程如下:
IIC完整的通讯过程
1、总线是空闲状态,SCL=1,SDA =1;
2、要开始传输数据了,此时SCL还是高电平,SCL=1,主机将SDA从1变成0;
3、跟哪个从机通讯,把从机的地址发出去。一般地址是8个bit(也有16个bit的),这8个bit其实真实的地址是7个bit,最后1个bit是用来表示读或者写的。1表示读,0表示写;这个过程相当于主机往SDA上发了8个bit的数据(地址也是数据啊);
4、主机发地址的过程,相当于在找从机,从机是要给应答信号的,就是ACK,你老板喊你,你也得先回答声A吧;
5、应答之后,就是要传输数据了,如果第3步中发的地址是写操作,那就由主机来控制SDA的电平变化,如果第3步中发的地址是读操作,那就由从机来控制SDA的电平变化;
6、每次8bit的数据传输完成,都要有个应答信号,谁接收数据,谁来应答
7、完事之后,在SCL高电平时,主机把SDA从低电平拉高,表示结束。
STM32中的I2C
STM32 芯片有多个 I2C 外设,它们的 I2C 通讯信号引出到不同的 GPIO 引脚上,使用时必须配置到这些指定的引脚。
SMBus(系统管理总线—System Management Bus)
SMBus总线和I2C是比较类似的,所以STM32兼容了这两种设计,一般场景比较少用SMBus,I2C则是非常多外设使用的接口,我们本节课以I2C为主,看看如何使用STM32的I2C功能。
选择为I2C功能后,会自动选择对应的IO作为I2C的IO,这里I2C是支持重映射的,我们可以根据需要手动修改。