无人机底层驱动+STM32F4学习心得-5.I2C通讯时序解析

  • I2C,两线式串行总线。分别为数据线SDA和时钟线SCL构成的串行总线,可发送和接受数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速总线可达400kbps以上。I2C是半双工通信方式。
  • I2C的空闲状态。当I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。
  • I2C的起始信号。当SCL为高期间,SDA由高到低的跳变。

 启动信号是一种电平跳变时序信号,而不是一个电平信号

  • I2C的停止信号。在SCL为高期间,SDA由低到高的跳变;

 

l停止信号也是一种电平跳变时序信号,而不是一个电平信号。 

  • 应答信号ACK。发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位。

 接收器在第九个时钟脉冲(高电平)之前将SDA线拉低,SCL高电平到来时,产生一个应答位,并且需要确保SCL线在该时钟的高电平期间为稳定的低电平。最后将SDA拉高,为接受下一个字节准备。

  • 无效应答NoACK。和上面一样,当SCL高电平到来时,SDA若为高,则为无效应答位。
  • 等待应答waitACK。即第九个时钟脉冲(高电平)到来时,如果SDA线为低电平,则表示有效ACK,否则无效ACK。
  • 发送数据。I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。即:数据在SCL的上升沿到来之前就需准备好。并在在下降沿到来之前必须稳定。

 当SDA为高电平,传输高电平(1),反之传输0。

  • 读数据:从从机设备寄存器中读取数据。

  • 向设备寄存器中写入值(写1个字节)的时序。

主机:起始信号 + 7位地址位1个写位 + 读取ACK + 发送寄存器 + 读取ACK + 发送寄存器的值 + 读取ACK + 停止信号

  • 从设备寄存器中读值(读一个字节)的时序。

主机:起始信号 + 7位地址位1个写位 + 读取ACK + 发送寄存器 + 读取ACK + 起始信号 + 7位地址位1个读位 + 读ACK + 读寄存器数据 + 发送NoACK + 停止信号

猜你喜欢

转载自blog.csdn.net/qq_41422043/article/details/83793689
今日推荐