MCU常见通信协议UART/SPI/I2C学习笔记

首先先了解通信的三种基本类型:

  1. 单工通信:只允许一方向另一方传送信息,而另一方不能回传信息。
  2. 半双工通信:数据可以在双方之间相互传播,但是同一时刻只能其中一方发给另外一方。
  3. 全双工通信:发送数据的同时也能接收数据,两者同步进行,互不干扰。

UART、I2C和SPI是单片机系统中最常用的三种串行通信协议,实际应用中一般采用中断方式发送和接收,避免程序堵塞

一、UART

UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用于单片机和计算机之间以及单片机和单片机之间的通信。

UART有发送和接收 2条 数据线,互不干扰,属于全双工通信方式,不同的MCU驱动方式也不相同,实际应用中一般会自定义收发数据格式,增加校验方法,避免数据出错,比如校验和和CRC校验。双方通信时需要设置相同波特率 ,调试碰到问题时首先检查两边实际波特率是否相同。

常见连接方式如下:

 通信数据格式如下图

起始位:发送一位逻辑电平0开始传输数据

空闲位:当为高电平时,无数据传输

数据位:先发低位再发高位,传输8位数据

校验位:奇偶校验,1的位数为偶数(偶校验),1的位数为奇数(奇校验)

停止位:发送逻辑电平1停止数据传输

 二、SPI

SPI(Serial Peripheral Interface串行外围设备接口):是一种高速的、全双工、同步通信总线。(如MCU与EEPROM、FLASH、实时时钟、数字信号处理器之间的通信)

SPI主从模式有一点需要注意,SPI从机是没有时钟的,从机发送数据时,需要主机发送数据提供时钟信号。

SPI有4根线:

SSEL(SCS):片选,从设备片选使能信号(一主机多从机情况);

SCLK(SCK):时钟,由主机产生,类似I2C的SCL;

MOSI(Master Output/Slave Input):主机输出从机输入,主机给从机发送指令或者数据的通道;

MISO(Master Input/Slave Output):主机输入从机输出,主机读取从机的状态或者数据的通道。

4种SPI模式:

CPOL(Clock Polarity):时钟的极性。

  • CPOL = 1: SCK空闲状态为高电平;
  • CPOL = 0: SCK空闲状态为低电平;
  • CPHA(Clock Phase):时钟的相位。

  • CPHA = 1: 数据的输出是在一个时钟周期的第一个沿;(采样自然在第二个沿)
  • CPHA = 0: 数据的采样是在一个时钟周期的第一个沿;(输出自然在第二个沿)
  •  当MCU作为SPI主机时通信格式如下图:

    作为SPI从机时:

     三、I2C

    I2C(Inter-Integrated circuit)总线是由PHILIPS公司开发的两线式串行总线,多用于连接微处理器及其外围设备(特别是外部存储器件)。I2C总线的主要特点是接口方式简单,两条线可以挂多个参与通信的器件,即多机模式,而且任何一个器件都可以作为主机,当然同一时刻只能有一个主机。UART通信多用于板间通信,比如单片机和计算机,这个设备和另外一个设备之间的通信。而I2C多用于板内通信,比如单片机和E2PROM。

    在硬件上,I2C总线是由时钟总线SCL和数据总线SDA两条线构成,连接到总线上的所有器件的SCL都连到一起,所有SDA都连到一起。

    I2C通信的起始信号后,首先要发送一个从机的地址,这个地址一共有7位,紧跟着的第8位是数据方向位(R/W),“0”表示接下来要发送数据(写),“1”表示接下来是请求数据(读)。需要注意的是,起始信号与停止信号都是由主机产生的。

    1.起始信号:I2C通信的起始信号的定义是SCL为高电平期间,SDA由高电平向低电平变化产生一个下降沿,表示起始信号。

    2.数据传输:I2C通信是高位在前,低位在后。I2C通信没有固定波特率,但要求当SCL在低电平的时候,SDA允许变化,也就是说,发送方必须先保持SCL是低电平,才可以改变数据线SDA,输出要发送的当前数据的一位;而当SCL在高电平的时候,SDA绝对不可以变化,因为这个时候,接收方要来读取当前SDA的电平信号是0还是1,因此要保证SDA稳定。

    3.停止信号:I2C通信停止信号是SCL为高电平期间,SDA由低电平向高电平变化产生一个上升沿,表示结束信号。

    通信数据格式如下图:

     1.主机发送:

     2.主机接收:

    3.从机发送:

    4.从机接收:

     如有问题,感谢指正!

    作者:又来学习了呀

    物联沃分享整理
    物联沃-IOTWORD物联网 » MCU常见通信协议UART/SPI/I2C学习笔记

    发表评论