【杂谈】SPI的基本时序

SPI(串行外围设备接口)是一种高速的、全双工、同步的通信协议,常用于微控制器与外围设备(如传感器、闪存、实时时钟等)之间的短距离通信。SPI接口通常由四个信号线组成:SCLK(串行时钟)、MOSI(主设备输出从设备输入)、MISO(主设备输入从设备输出)和SS/CS(从设备选择/片选)

SPI的通信是通过主设备控制时钟信号来实现的,其基本时序如下:

1.SPI帧格式

SPI通信通常基于一个帧的概念,一个帧由以下部分组成:

  • 起始位(可选):某些SPI设备可能需要起始位来标识数据的开始
  • 据位:通常是8位,但也可以是16位、32位等
  • 停止位(可选):某些SPI设备可能需要停止位来标识数据的结束

2.时序细节

以下是SPI通信的典型时序

  1. SS/CS片选信号
    1. 低电平有效:在通信开始前,主设备将SS/CS线拉低,选中从设备
    2. 高电平无效:在通信结束后,主设备将SS/CS线拉高,释放从设备
  2. SCLK(串行时钟)
    1. 主设备产生SCLK信号,控制数据传输的节奏
    2. 数据在SCLK的上升沿或下降沿进行移位
  3. MOSI和MISO信号
    1. MOSI:主设备通过MOSI线发送数据给从设备
    2. MISO:从设备通过MISO线发送数据给主设备

以下是SPI通信的详细时序步骤

  1. 初始化:所有设备未选中状态,SS/CS为高电平
  2. 启动传输
    1. 主设备将SS/CS线拉低,选中从设备
    2. 主设备开始提供SCLK时钟信号
  3. 数据传输
    1. 在SCLK的第一个时钟沿(上升沿或下降沿,取决于配置),主设备将第一个数据位放在MOSI线上,同时从设备在MISO线上放置相应的数据位
    2. 在接下来的时钟周期,数据位依次移位。例如,如果配置为上升沿触发,那么在每个上升沿,MOSI和MISO上的数据位都会更新
    3. 数据位可以是8位、16位或更多,这取决于设备和配置
  4. 完成传输
    1. 当所有数据位都传输完毕后,主设备停止提供SCLK时钟
    2. 主设备将SS/CS线拉高,释放从设备

3.时钟极性和相位(CPOL和CPHA)

SPI协议的灵活性在于时钟极性(CPOL)和时钟相位(CPHA)的配置,它们决定了数据在时钟信号上的采样时机

  • CPOL(Clock Polarity):定义了SCLK空闲状态时的电平。CPOL=0表示空闲状态为低电平,CPOL=1表示空闲状态为高电平
  • CPHA(Clock Phase):定义了数据采样时刻。CPHA=0表示在时钟的第一个边沿(通常是上升沿)采样数据,CPHA=1表示在时钟的第二个边沿(下降沿)采样数据

根据CPOL和CPHA的不同组合,SPI有四种工作模式

  • 模式0:CPOL=0, CPHA=0;
  • 模式1:CPOL=0, CPHA=1;
  • 模式2:CPOL=1, CPHA=0;
  • 模式3:CPOL=1, CPHA=1;

        不同的设备可能支持不同的模式,因此在使用SPI进行通信时,需要确保主从设备的模式设置匹配。 注意:SPI的数据位传输具有先后顺序,在SPI通信中,数据位是从最高有效位(MSB)开始传输,还是从最低有效位(LSB)开始传输,取决于设备的配置。以下是两种可能的传输顺序

  1. MSB先行(Most Significant Bit First)
    1. 在这种方式下,数据传输从最高有效位开始,然后依次传输接下来的位,直到最低有效位结束
    2. 例如,如果传输一个8位的数据0b10101100,那么传输的顺序将是:1, 0, 1, 0, 1, 1, 0, 0
  2. LSB先行(Least Significant Bit First)
    1. 在这种方式下,数据传输从最低有效位开始,然后依次传输接下来的位,直到最高有效位结束
    2. 使用同样的数据0b10101100,传输的顺序将是:0, 0, 1, 1, 0, 1, 0, 1

SPI协议本身并没有规定必须使用哪一种传输顺序,因此不同的SPI设备可能会使用不同的传输顺序。当两个SPI设备进行通信时,必须确保它们的数据传输顺序设置是一致的。如果主设备和从设备的数据传输顺序不匹配,接收到的数据将会是错误的。

通常,设备的硬件手册或者数据手册会指明该设备是使用MSB先行还是LSB先行。在配置SPI接口时,主设备需要根据从设备的这一特性来设置相应的传输顺序。在软件编程时,这也通常是一个可配置的参数。

相关实验:

【实验】ESP32S3的SPI通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值