第十三篇,STM32 I2C串行总线通信实现

1.概念

    IIC(I2C)是一种串行通信方式,属于两线式式的半双工,飞利浦公司发明的用于连接微控制器和外部设备的一种总线。

    IIC由数据线(SDA)和时钟线(SCL)组成总线,实现在CPU和外设之间的双向传输,传输度 100K ~ 400K bps

2.物理连接

    IIC属于一主多从(Master-Slave)的传输模式,主设备一般都是CPU,IIC总线的传输永远是由主设备发起,从设备被动响应。IIC中使用从设备地址来区分不同的从设备,IIC传输一次传输1字节。

    IIC外设和开发板连接一般都是4根线,SCL SDA VCC GND

3.IIC通信协议

    SCL和SDA默认高电平,表示总线空闲

(1)起始信号 ---------- 开始通信

特征:保持SCL为高电平,SDA由高向低跳变

(2)停止信号 ---------- 结束通信

特征:保持SCL为高电平,SDA由低向高跳变

(3)应答信号(ACK)

    发送完一个字节之后的第9个时钟周期由接收者控制数据线进行应答(低电平表示有效应答,高电平表示无效应答)。

(4)数据传输

    数据的接收者在SCL为高电平读取SDA的电平作为该位数据,因此在SCL为高电平时SDA要保持电平稳定,在SCL为低电平期间发送者改变SDA。

4.IIC总线的传输步骤

(1)主设备发送起始信号

(2)主设备发送从设备地址(7位)+读写信号(1表示读,0表示写)

      如果从设备在位(地址匹配),向主设备发送ACK(有效应答)

(3)主设备按照从设备的要求和从设备进行通信

      参考从设备说明手册

(4)通信完成之后由主设备发送停止信号

5.at24c02通信实现

    at24c02是一款eeprom芯片,eeprom是电擦除的掉电数据不丢失的存储芯片,和外部通过IIC接口进行通信。

(1)原理图

 

从原理图中得到的信息有:WP写保护(关闭),A0,A1,A2接地,对应的地址位为0

IIC的SCL和SDA连接到了PB8 PB9

(2)at24c02的说明手册

读写操作低层实现原理(非常重要):

        写操作,主机发送信息给从机、从机收到主机的写信号(上图蓝色第一个字节的第8位表示写信号)和从机的设备地址(上图蓝色第一个字节的前7位表示从机地址),第8 位配置的方向为“写数据”方向,接受的数据包大小为8位(一个byte);

       主机每发送完一个字节的从设备地址和写信号,都要等待从机的应答信号(ACK);第二个橙色字节为发送的数据存放的片内地址(也是8位),等待从机的应答信号(ACK);第三个紫色字节为主机向从机发送的数据(也是8位),重复这个过程;当数据传输结束时,主机向从机发送一个停止传输信号,表示不再传输数据。

        读操作,主机发送信息给从机、从机收到主机的写信号(上图蓝色第一个字节的第8位表示写信号)和从机的设备地址(上图蓝色第一个字节的前7位表示从机地址),第8 位配置的方向为“写数据”方向,接受的数据包大小为8位(一个byte);

       为什么要先配置一个写信号呢?

       因为主机接下来还要发送一个读的数据的片内地址给从机,从机要接收这个读的数据的片内地址,所以第一个蓝色字节要设置为写信号和从机的片内地址。

        主机每发送完一个字节的从设备地址和写信号,都要等待从机的应答信号(ACK);第二个橙色字节为读的数据存放的片内地址(也是8位),等待从机的应答信号(ACK);主机再次发送开始信号给从机,第三个蓝色字节为主机向从机发送的从机设备地址和读信号(也是8位),等待从机的应答(ACK);第四个紫色字节为主机接收从机上的1字节要读的数据;当数据传输结束时,从机向主机发送一个应答信号(ACK),表示传输下一个数据,或者一个不回复应答,表示停止,这时,主机发送一个停止信号给从机。

(3)IIC通信的编程实现(两种方式)

  1)使用GPIO模拟IIC时序进行通信

  2)使用芯片内部的IIC控制器进行传输(如果有的话)

    只需要将数据交给IIC控制器(发送),从控制器直接读取数据(接收)

    通信引脚必须有IIC复用功能

    

猜你喜欢

转载自blog.csdn.net/weixin_44651073/article/details/125752407