深入了解I2C协议的功能和配置方法

I2c的功能

适用于主从机之间的通信,通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线,实现100khz/400khz的通信

通信的流程

通信对于主机从机都是有接受和发送的模式,主模式的时候,i2c启动数据传输同时产生时钟信号起始条件和中止条件都由软件进行控制。从模式能够识别自己的地址,软件可以控制开启或者关闭识别。

数据和地址按照8位进行一个传输,由高位到地位,传输完成一个字节之后接收器返回一个ack进行应答,如果数据接收完毕,不再进行传输的话,返回一个nack。

启动条件:SCL,SDA默认情况下都是高电平,当sda转化为低电平

停止条件:SCL高电平,SDA转化为高电平

通信的时候,0表示为低电平,1表示为高电平

I2C默认工作在从模式,检测到起始条件时,SDA上接受到的地址将被送到移位寄存器,与自己的地址进行比较。匹配成功的从机会发送一个低电平

地址帧的末尾有一个读写位,如果是主机发送是低电平,接受为高电平

当SCL为高电平的时候,读取SDA上的信号值

使用小马哥四轴学习平台的例程进行说明

通过配置GPIO口为复用输出和浮空输入,实现对SDA线的一个电平配置

配置GPIO口的原理如上图

起始信号的配置

首先配置mcu使开启SDA,把SDA,SCL设置为高电平,确定为待机,通过拉低SDA的电平,表示起始信号,延时,拉低SCL的电平,准备最开始的通信,具体原理看上面的时序图。

停止信号的配置

读取数据

发送数据

发送应答

等待应答的配置

MPU9250与MCU的通信

MPU9250与i2c的通信时序如图

该图为多字节写入

首先由主机发送一个起始信号,表示通信开始,之后发送地址和从机的控制(读写)指令。等目标从机发送ack之后发送需要写入的外设的寄存器的地址,之后进行数据的传输,代码实现如图

多字节读取

注意发送寄存器地址之后要写入一个读的指令

物联沃分享整理
物联沃-IOTWORD物联网 » 深入了解I2C协议的功能和配置方法

发表评论