stm入门教程 --SPI总线1(超详细!!)

SPI简介

 SPI(Serial Periheral Interface)串行外设接口的缩写,即串行外围设备接口,是由Motorola公司首先在其MC68HCXX系列处理器上定义的一种同步串行通信协议。它是一种高速、全双工、同步的通信总线,具有简单易用、节约芯片管脚、节省PCB布局空间等优点,因此被广泛应用于各种嵌入式系统中,连接微控制器与外部设备,实现数据的传输和通信。SPI是一种高速、全双工同步的串行通信总线;SPI采用主从方式工作,一般有一个主设备一个或多个从设备;SPI需要至少4根线,分别是MISO(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、CS(片选),SPI使用引脚少且布线方便,所以越来越多的芯片集成了这种通信协议。

 串行:数据依次发送

全双工:数据的收发可以同时进行

同步:发送设备和接收的设备时钟同步,发送端和接收端共用一个时钟线,SCL一条线相连

一、SPI的基本原理

SPI总线系统是一种同步串行外设接口,它允许MCU(微控制器)与各种外围设备以串行方式进行通信以交换信息。这种通信方式通常以一个主设备和一个或多个从设备的形式存在,主设备负责发起通信并控制通信过程,而从设备则根据主设备的指令进行响应。

SPI接口一般使用四根线进行通信:串行时钟线(SCK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)和低电平有效的从机选择线(SS,有的SPI接口芯片带有中断信号线INT,有的则没有MOSI线)。其中,SCK线用于提供时钟脉冲,控制数据的传输节奏;MISO和MOSI线则分别用于从设备和主设备之间的数据输入输出;SS线则用于选择被通信的从设备,当主设备与某个从设备通信时,会将该从设备的SS线电平拉低(一般低电平有效),从而选中该从设备进行通信。

二、SPI的通信过程

SPI的通信过程是以主从方式工作的,主设备通过控制SCK线来产生时钟信号,从而控制数据的传输。在通信过程中,数据是一位一位地传输的,每个时钟周期传输一位数据。数据的传输顺序可以是先发送先接收(MSB First)或先发送后接收(LSB First),具体的传输顺序由主设备和从设备协商确定。

当主设备需要向从设备发送数据时,它会通过MOSI线将数据发送给从设备,并在SCK线的时钟脉冲作用下,逐位传输数据。同时,从设备则通过MISO线将接收到的数据回传给主设备。在传输过程中,主设备和从设备都会根据时钟信号的上升沿或下降沿来采样或发送数据。

SPI主从模式

SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。

SPI是全双工且SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps
SPI信号线

SPI接口一般使用四条信号线通信:
SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)

    MISO: 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
    MOSI: 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
    SCLK:串行时钟信号,由主设备产生。
    CS/SS:从设备片选信号,由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。


SPI一对一

SPI一对多

SPI设备选择:

SPI是[单主设备]通信协议,这意味着总线中的有一只中心设备能发起通信。当SPI主设备想读/写从设备时,它首先拉低从设备对应的时ss线(ss是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,主设备把信号发到MOSI实现写,同时可对MISO采样实现读

  

SPI 数据发送接收
 SPI 主机和从机都有一个串行移位寄存器,主机通过向它的 SPI 串行寄存器写入一个字节来发起一次传输。
首先拉低对应 SS 信号线,表示与该设备进行通信主机通过发送 SCLK 时钟信号,来告诉从机写数据或者读数据,这里要注意, SCLK 时钟信号可能是低电平有效,也可能是高电平有效,因为 SPI 有四种模式,这个我们在下面会介绍
主机( Master )将要发送的数据写到发送数据缓存区( Menory ),缓存区经过移位寄存器(0~7),串行移位寄存器通过 MOSI 信号线将字节一位一位的移出去传送给从机,,同时 MISO 接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
从机( Slave )也将自己的串行移位寄存器(0~7)中的内容通过 MISO 信号线返回给主机。同时通过 MOSI 信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。

SPI 只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

SPI 的四种模式,简单地讲就是设置 SCLK 时钟信号线的那种信号为有效信号
 SPI 通信有4种不同的操作模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的 SPI 模式进行配置,通过CPOL (时钟极性)和 CPHA (时钟相位)来控制我们主设备的通信模式,具体如下:
时钟极性( CPOL )定义了时钟空闲状态电平:
 CPOL =0,表示当 SCLK =0时处于空闲态,所以有效
状态就是 SCLK 处于高电平时
 CPOL =1,表示当 SCLK =1时处于空闲态,所以有效状态就是 SCLK 处于低电平时
时钟相位( CPHA )定义数据的采集时间。 CPHA =0,在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样车第2个边沿发送数据CPHA =1,在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。,在第1个边沿发送数据例如:
Mode0:CPOL=0, CPHA =0:此时空闲态时, SCLK 处于低电平,数据采样是在第1个边沿,也就是 SCLK 由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。
Mode1:CPOL=0, CPHA =1:此时空闲态时, SCLK 处于低电平,数据发送是在第1个边沿,也就是 SCLK 由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
Mode2:CPOL=1, CPHA =0:此时空闲态时, SCLK 处于高电平,数据采集是在第1个边沿,也就是 SCLK 由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。
Mode3:CPOL=1, CPHA =1:此时空闲态时, SCLK 处于高电平,数据发送是在第1个边沿,也就是 SCLK 由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

 

三、SPI的应用场景

SPI接口因其高速、全双工和同步通信能力,以及节约芯片管脚和简化PCB布局的优点,被广泛应用于各种领域。以下是一些典型的应用场景:

  • EEPROM和Flash存储器:SPI常用于连接EEPROM和Flash存储器,进行程序存储和数据读写操作。
  • SD卡:在许多微控制器系统中,SPI用于连接SD卡,以提供额外的存储空间。
  • LCD和OLED显示器:SPI接口常用于连接显示模块,如LCD和OLED显示器,用于显示设备状态或用户界面。
  • ADC和DAC:SPI接口可以连接模数转换器(ADC)和数模转换器(DAC),实现模拟信号与数字信号之间的转换。
  • 传感器:如温度传感器、加速度计等,都可以通过SPI接口与微控制器连接,实现数据的采集和传输。
  • 无线通信模块:如2.4GHz无线收发模块,通过SPI与微控制器连接,实现无线数据传输。
  • RFID读卡器模块:SPI接口也广泛应用于RFID读卡器模块与微控制器之间的通信。
  • 五、SPI的优缺点

    SPI的优点主要包括:

  • 支持全双工通信,可以同时发送和接收数据。
  • 通信简单,仅使用四根线即可实现通信。
  • 数据传输速率快,适用于高速数据传输场景。

          然而,SPI也存在一些缺点:

  • 没有指定的流控制机制,无法确保数据的可靠传输。
  • 没有应答机制来确认是否接收到数据,因此在数据可靠性上有一定的缺陷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是lamune

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值