当前位置:   article > 正文

stm32 IIC协议

stm32 IIC协议

该文章为大家介绍了 IIC协议 的基础知识。


前言


一、IIC 概念

  1. IIC协议是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,是一个多主机的半双工通信方式 每个挂接在总线上的器件都有个唯一的地址。位速在标准模式下可达 100kbit/s,在快速模式下可达 400kbit/s,在高速模式下可待3.4Mbit/s。
  • 数据线:完成收据的收发。
  • 时钟线:在时钟的作用下,数据按位完成传输。
  1. IC总线外接两个上拉电阻的作用:在总线处于空闲状态,总线为高电平的状态
  • 问 :为何SCL也要使用上拉电阻?

  • 答 :在第9个时钟之后,如果有某一方需要更多的时间来处理数据,它可以一直驱动三极管把SCL拉低。当SCL为低电平时候,大家都不应该使用IIC总线,只有当SCL从低电平变为高电平的时候,IIC总线才能被使用。当它就绪后,就可以不再驱动三极管,这是上拉电阻把SCL变为高电平,其他设备就可以继续使用I2C总线了。

在这里插入图片描述

  1. I2C总线系统结构,如下所示 :
  • 在一个芯片(SoC)内部,有一个或多个I2C控制器

  • 在一个I2C控制器上,可以连接一个或多个I2C设备

  • I2C总线只需要2条线:时钟线SCL、数据线SDA

  • 在I2C总线的SCL、SDA线上,都有上拉电阻

  • 时钟线只能由主机产生,作用给从机,完成数据收发同步

  • 主机:主动向数据线上发起数据/结束(起始信号/停止信号) 。从机:只能被接收数据

    在这里插入图片描述

二、IIC 信号

I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。传输时,先传输最高位(MSB)。

  • 空闲状态 当总线上的SDA和SCL两条信号线同时处于高电平,便是空闲状态,如上面的硬件图所示,当我们不传输数据 时, SDA和SCL被上拉电阻拉高,即进入空闲状态。

  • 开始信号(S):当SCL为高期间,SDA由高到低的跳变;便是总线的启动信号,只能由主机发起,且在空闲状态下才能启动 该信号,如下图所示:

在这里插入图片描述

  • 结束信号(P):当SCL为高期间,SDA由低到高的跳变;便是总线的停止信号,表示数据已传输完成,如下图所示:

在这里插入图片描述

  • 响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA。当接收方接收该字节成功,便会输出一个ACK应答信号,当SDA为高电平,表示为非应答信 号NACK,当SDA为低电平,表示为有效应答信号ACK。

    ( PS :当主机为接收方时,收到最后一个字节后,主机可以不发送ACK,直接发送停止信号来结束传输。)

在这里插入图片描述

  • SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化

    在这里插入图片描述

I2C协议信号如下:

在这里插入图片描述

三、IIC 数据传输格式

3.1 写操作

流程如下:

  • 主芯片要发出一个start信号

  • 然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读)

  • 从设备回应(用来确定这个设备是否存在),然后就可以传输数据

  • 主设备发送一个字节数据给从设备,并等待回应

  • 每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。

  • 数据发送完之后,主芯片就会发送一个停止信号。

下图:白色背景表示"主→从",灰色背景表示"从→主"

在这里插入图片描述

3.2 读操作

流程如下:

  • 主芯片要发出一个start信号

  • 然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读)

  • 从设备回应(用来确定这个设备是否存在),然后就可以传输数据

  • 从设备发送一个字节数据给主设备,并等待回应

  • 每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。

  • 数据发送完之后,主芯片就会发送一个停止信号。

下图:白色背景表示"主→从",灰色背景表示"从→主"
在这里插入图片描述

四、UART/IIC总线区别

  1. UART总线有三根线:TXD/RXD/GND
  2. IIC总线有两根线:SCL / SDA
  3. UART总线属于异步通信方式,IIC总线有SCL时钟线,所有IIC总线为同步通信方式
  4. UART有接收数据线和发送数据线,所有UART属于全双工通信方式
  5. IIC总线只有一根双向的数据信号线,所以IIC属于半双工通信方式
  6. UART总线处于空闲状态时,总线默认为高电平状态
  7. IIC总线因为外接两根上拉电阻,总线处于空闲状态时,也是默认为高电平状态

总结

下一篇文章为大家介绍 SPI 通信协议。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/406237
推荐阅读
相关标签
  

闽ICP备14008679号