[TOC]

SPI总线详解

一、SPI简介

SPI英文全称(Serial Perripheral Interface),即串行外围设备接口,是一种同步全双工串行接口,MCU可以通过SPI方式与各种外围设备进行高速数据通信

二、SPI协议

2.1 软件协议

SPI是四线通讯协议,有4条逻辑线,这四根线功能如下:

连线 功能
CS 用于 Master 设备片选 Slave设备, 使被选中的 Slave 设备能够被 Master 设备所访问
SCK 主要的作用是 Master 设备往 Slave 设备传输时钟信号, 控制数据交换的时机以及速率
MISO Master Out Slave Input 主机输入数据,从机输出数据
MOSI Master InputSlave Out 主机输出数据,从机输入数据

4线SPI进行通讯时首先拉低CS片选信号选中目标从机,因为SPI可以进行多机通讯,然后SCK要产生连续的脉冲信号,在每个SCK信号的边沿MISO线上的数据(高电平为1,低电平为0,电平由Slave控制)传输到主机Master而MOSI线上的数据(高电平为1,低电平为0,电平由Master控制)传输到从机Slave,参考协议图如下:CS拉低后,在SCK边沿MISO发送1到主机,MOSI发送0到从机

img

以上就是SPI通讯大致流程,除此之外SPI通讯协议根据SCK空闲电平的高低时钟脉冲的第一个边沿还是第二个边沿传数据可以分为4种,四种模式我列在下表:

模式 特点
模式1 SCK空闲电平为低电平,数据传输在SCK的第一个边沿
模式2 SCK空闲电平为低电平,数据传输在SCK的第二个边沿
模式3 SCK空闲电平为高电平,数据传输在SCK的第一个边沿
模式4 SCK空闲电平为高电平,数据传输在SCK的第二个边沿

2.2 硬件SPI

SPI通讯一般是基于硬件SPI收发器进行通讯的,主机和从机间都有一个SPI收发器,收发器的简图如下:

SPI收发器 (1)

简图上主要描述了3个寄存器类别:

寄存器 功能
SSPBUF(Synchronous Serial Port Buffer) 指SPI设备里面的内部缓冲区, 一般以FIFO(先进先出)方式临时存储数据
SSPSR(Synchronous Serial Port Register) 指SPI 设备里面的移位寄存器(Shift Regitser),它的作用是根据设置好的位宽把数据移入或者移出SSPBUF
Controller 指控制寄存器组,配置SPI总线的传输模式

使用流程: 用户配置控制寄存器组,装载数据到SSPBUF缓冲区,拉低CS,启动SCK电平后,在SCK产生边沿信号是,通过移位寄存器将0/1信号传输到主机或者从机,硬件SPI通讯用户只需要配置速率,位宽,拉低片选传入数据就行,具体的协议传输过程则有收发器自己完成,减少CPU的负担,传输稳定且方便,缺点就是需要借助硬件资源,成本较高

2.3 软件SPI

SPI的实现除了通过硬件SPI来实现,也可以通过软件SPI进行实现,软件SPI就是用IO口模拟SPI端口的协议,这总方向代码编写比较麻烦,但是对硬件资源要求不高,可扩展性强

如果要编写软件SPI代码可以参考这篇文章: 软件模拟SPI接口程序代码(4种模式)

三、SPI协议特点

3.1 采用主- 从控制模式

**两个SPI 设备之间通信必须由主设备 (Master) 来控制从设备(Slave)**,一个 Master 设备可以通过提供 SCK信号进而控制是否数据传输,并且在多从机控制时,与IIC通过地址选择从机不同,SPI协议使用片选CS对 Slave 设备进行选择,达到多从机选择通信的目的

3.2 同步通信

SPI通信方式属于同步通信,首先了解一下同步和异步通信区别

  • 同步通信: 同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息,在没有信息要传输时,要填上空字符进行传输,而不是选择停止通信,因为同步传输不允许有间隙

  • 异步通信: 异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的,因为每一个字符的开始和结束的地方都有设置标志位,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来

参考文章:同步通信与异步通信区别

3.3 全双工通信

SPI通信时是全双工通信,双工指的是主机与从机可以进行双向通信全双工指双向通信可以同时进行,半双工指的是双向通信不能同时进行,以其他方式比如一发一回的形式进行,此处SPI通信在每个时钟边沿到来时进行了双向数据交换,交换是同时进行的,所以SPI是全双工、而IIC通信不能同时进行双向通信,所以他是半双工通信

四、其他文章推荐

你和PID调参大神之间,就差这篇文章!

神器!200元开发板运行神经网络模型,吊打OpenMV!(保姆级教程)

51单片机多线程神器:Tiny-51操作系统

用树莓派做服务器运行博客网页

wechat