串口通信技术:UART、I2C、SPI简介与总结

B站账号:小光学嵌入式


  • ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大二学生。
  • ⏩最近开始系统性补习STM32基础知识,规划有:串口通信,Github,Ucos等等。
  • ⏩今天总结一下串口通信,后面再在代码实现做讲解。

  • 串口通信

  • 串行与并行
  • 1.串行通信
  • 2.并行通信
  • 全双工与半双工
  • 1.全双工:
  • 2.半双工
  • 同步通信和异步通信
  • 1.同步通信
  • 2.异步通信
  • 一.SPI通信
  • 1.传输步骤
  • 2.SPI优缺点
  • 二.UART通信
  • 1.工作原理
  • 2.传输步骤
  • 3.UART优缺点
  • 三.I2C通信
  • 1.工作原理
  • 总结
  • 串行与并行

    1.串行通信

    位通过单根线一一发送,下图显示了二进制(01000011)中字母“C”的串行传输。
    当时钟线为高电平时,接收数据位,高电平为1,低电平为0。

    2.并行通信

    数据位在导线中同时传输,下图显示了二进制(01000011)中字母“C”的并行传输:
    的当时钟线为高电平时,8个数据位同时接受数据,高电平为1,低电平为0

    所以UART、SPI、I2C都是串口通信,因为它们都是通过一根线作为数据线传输数据。

    全双工与半双工

    1.全双工:

    简单来说,比如我们在打电话时,我们可以在同一时间说话,这就是全双工通信;

    2.半双工

    相对的,虽然半双工也可以互相的通信,但是在同一时间只能单方向传输数据;

    UARTSPI都是全双工通信方式,因为他们的数据线都有两根,即可以在同一时间A发数据给B,B也可以在这个时间发数据给A。如I2C通信,因为他只有一根数据线,所以他不能在同一时间双向传输数据。

    同步通信和异步通信

    同步是阻塞模式,异步是非阻塞模式

    1.同步通信

    发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

    2.异步通信

    发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

    所以SPI和I2C都是同步通信,因为他们都有时钟线,UART是异步通信方式,他只有两个数据线,发送完数据不会确认你是否接收到。

    一.SPI通信

    SPI可以无中断传输数据,可以连续地发送或接收任意数量的位。但是I2C和UART中,数据以数据包的形式发送,有限定位数。
    在SPI设备中,设备分为主机控制设备(通常是微控制器)和从机(通常是传感器,显示器和存储芯片)设备,从机从主机那获取指令。
    SPI信号线有四种:
    MOSI-信号线:主机输出,从机输入;
    MISO-信号线:主机输入,从机输出;
    SCLK-时钟信号;
    SS/CS-片选信号;
    SPI协议特点
    实际上,从机的数量受系统负载电容的限制,它会降低主机在电压电平之间准确切换的能力。
    时钟信号
    每个时钟周期传输一位数据,因此数据传输的速度取决于时钟信号的频率。 时钟信号由于是主机配置生成的,因此SPI通信始终由主机启动。
    设备共享时钟信号的任何通信协议都称为同步。SPI是一种同步通信协议,还有一些异步通信不使用时钟信号。 例如在UART通信中,双方都设置为预先配置的波特率,该波特率决定了数据传输的速度和时序。
    片选信号
    主机通过拉低从机的CS/SS来使能通信。主机可以与存在多个CS/SS引脚,允许主机与多个从机进行通信。

    1.传输步骤

    1.主机输出时钟信号

    2.主机拉低SS/CS引脚,激活从机

    3.主机通过MOSI将数据发送给从机

    4.如果需要相应,则从机通过MISO将数据返回给从机

    2.SPI优缺点

    优点:无起始位和停止位,因此数据可以持续传输不会中断;数据传输速率快(比I2C快几乎两倍)。独立的MISO、MOSI可以同时发送和接收数据。
    缺点:使用四根线(I2C使用两根线),没有信号接收成功的确认(I2C由此功能),没有任何形式的错误检查(UART中的奇偶校验位)。

    二.UART通信

    两个UART直接相互通信。发送UART将控制设备(如CPU)的并行数据转换位串行形式,以串行的形式将其发送到接收UART。只需要两条线即可在两个UART之间传输信息:
    screen-capture
    UART属于异步通信,没有时钟信号。它会在数据包中增加开始和停止位。这些位定义了数据包的开始和结束,因此接收UART知道何时读取这些数据。
    当接收UART检测到起始位时,它将以特定的波特率的频率读取(数据传输速度的度量),以每秒比特数(bps)表示。两个UART必须以大约相同的波特率工作,发送的接收UART之间的波特率只能相差约10%。

    1.工作原理

    UART数据包包含有一个起始位,5到9个数据位(取决于UART),一个可选择的奇偶检验位以及一个或两个停止位:
    screen-capture
    起始位
    UART数据传输线通常在不传输数据时保持在高电平电平。开始传输时发送UART在一个时钟周期内将传输线从高电平拉低到低电平,当接收UART检测到高电压转换时,他开始以波特率的频率读取数据帧中的位。
    数据帧
    数据帧内包含正在传输的实际数据。使用奇偶校验位是5-8位,不使用最多可以是9位。
    校验位
    奇偶校验位是接收UART判断传输期间是否有任何数据更改的方式。接收UART读取数据帧后,它将对值为1的数进行技术,并且检查总数是偶数还是奇数,是否与数据相匹配。
    停止位
    向数据包的结尾发出信号,发送UART将数据传输线从低电压驱动到高电压至少两位的时间。

    2.传输步骤

    1.发送UART从数据总线并行接收数据
    screen-capture

    2.发送UART将起始位、奇偶校验位和停止位添加到数据帧。
    screen-capture

    3.整个数据包从发送UART串行发送到接收UART。接收UART以预先配置的波特率对数据线进行采样。
    screen-capture

    4.接收UART丢弃数据帧中的起始位、奇偶校验位和停止位:
    screen-capture

    5.接收UART将串行数据转换回并行数据,并将其传输到接收端的数据总线:
    screen-capture

    3.UART优缺点

    优点:
    1.仅使用两根线
    2.异步通信,无需时钟信号
    3.具有奇偶校验位以允许进行错误检查、
    4.只要双方都设置好数据包的结构
    缺点:
    1.数据帧的大小最大为9位
    2.不支持多个从属系统或多个系统
    3.每个UART的波特率必须在彼此的10%之内

    三.I2C通信

    半双工通信,它结合了SPI和UART的优点,可以将多个从机连接到单个主机(如SPI),也可以多个主机控制一个或多个从机。
    接线:
    screen-capture

    SDA–数据线
    SCL–时钟线
    串行通信协议,需要时钟同步信号并且由主机控制。

    1.工作原理

    I2C的数据传输是以多个msg的形式进行。每个msg包括:从机二进制地址帧、以及一个或者多个数据帧、开始条件和停止条件,读/写位和数据帧之间的ACK/NACK位:
    *screen-capture

    启动条件
    当SCL为高电平时,SDA从高电平向低电平切换

    停止条件
    当SCL是高电平时,SDA由低电平向高电平切换

    地址帧
    每个从属设备唯一的7位或10位序列,用于主从设备之间的地址识别。

    读/写位
    一位,如果主机是向从机发送数据则为低电平,请求数据则为高电平

    ACK/NACK
    消息中的每个帧后均有一个ACK/NACK位。如果成功接收到地址帧或数据帧,接收设备会返回一个ACK位用于表示确认。

    寻址
    不同于SPI的片选线,它是寻址确认从机设备。
    主机将要通信的从机地址发送给每个从机,然后每个从机将其与自己的地址进行匹配比较,如果匹配,他就向主机发送一个低电平ACK位。不匹配不执行操作,SDA保持高电平。

    读/写位
    位于地址帧的末尾。如果主机要向从机发送数据,则为低电平。如果是主机向从机发送请求数据,则为高电平。

    数据帧
    当主机检测到从机的ACK位后,就可以发送一个数据帧了。数据帧始终为8位,每个数据帧后紧跟一个ACK/NACK,未验证接收状态。发送完数据发送停止条件。

    传输步骤
    1.在SCL线为高电平时,主机通过将SDA线从高电平切换到低电平来启动总线通信。
    2.主机向总线发送要与之通信的从机的7位或10位地址,以及读/写位
    3.每个从机将主机发送的地址与其自己的地址进行比较。如果地址匹配,则从机通过将SDA线拉低一位返回一个ACK位。如果主机的地址与从机的地址不匹配,则从机将SDA线拉高。
    4.主机发送或接收数据帧;
    5.传输完每个数据帧后,接收设备将另一个ACK位返回给发送方,以确认已成功接收到该帧;
    6.随后主机将SCL切换为高电平,然后再将SDA切换为高电平,从而向从机发送停止条件。
    I2C优点
    1.仅仅使用两根线
    2.支持多个主机和从机
    3.硬件比UART更简单
    I2C缺点
    1.数据传输比SPI慢
    2.数据帧大小限制为8位

    总结

    在不同的时候可以选择使用不同的通信方式去完成一个项目,或者在使用一些传感器的时候,他就是特定的通信方式,所以这些通信方式都要去了解去学习和实现的。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 串口通信技术:UART、I2C、SPI简介与总结

    发表回复