I2C的功能和配置

I2C是一种用于主从设备间通信的总线协议,通过SDA和SCL引脚进行数据传输。通信过程中,主机控制时钟信号,从机识别自身地址。数据按8位传输,每次传输后接收方会返回ACK或NACK响应。起始和停止条件由SCL和SDA电平变化定义。文中还介绍了使用小马哥四轴学习平台进行I2C配置的示例,以及MPU9250传感器与MCU的通信时序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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之后发送需要写入的外设的寄存器的地址,之后进行数据的传输,代码实现如图

多字节读取

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值