SPI通信协议详解

SPI协议基本概念

SPI接口
(1)SPI(Serial Peripheral interface)是一种同步串行传输规范,也是单片机外设芯片串行外设扩展接口,该接口是一种高速,全双工,同步的通信总线,并且在芯片的管脚上占用4根线
(2)SPI接口主要应用在EEPROM,Flash,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间
(3)SPI由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换
(4)SPI接口由MOSI(串行数据输出),MISO(串行数据输入),SCLK(串行移位时钟),/SS(从设备使能信号),四种信号构成
SPI通信协议详解_第1张图片
(5)MOSI(串行数据输出),MISO(串行数据输入),SCL(串行移位时钟)都是公用的,只有SS(从设备使能信号)不是公用的,每增加一个从设备,那么就要增加一个SS使能信号,从而实现寻址的功能,当你的引脚不够用的时候,最好使用IIC(只有两根线)
引脚描述
MOSI:主设备数据输出,从设备数据输入
MISO:主设备数据输入,从设备数据输出
SCLK:时钟信号,由主设备产生
/SS:从设备使能信号,由主设备控制。当有多个从设备的时候,每个从设备都有一个片选接入到主设备机中,当我们的主设备和某个从设备通信时,需要将从设备对应的片选信号拉低或拉高
SPI接口特点
(1)SCLK信号线只由主设备控制,从设备不能控制信号线,同样,在一个基于SPI的设备中,至少有个主设备
(2)与普通的串行通信不同,普通的串行通讯一次连续传输至少8位数据(UART,但是还有一个起始位,一个停止位,还有校验位(可有可无)),而SPI允许数据一位一位的传送,甚至允许暂停,因为SCLK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据,也就是说,主设备通过对SCLK时钟线的控制可以完成对通讯的控制
(3)SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同的定义。
移位传输
SPI通信协议详解_第2张图片
在SCLK的控制下,两个双向移位寄存器进行数据交换
(4)在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显的简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比IIC系统要稍微复杂,SPI的一个缺点;没有指定的流控制,没有应答机制确认是否接收到数据

SPI的工作模式

概述
SPI通信有4种不同的模式,不同的从设备可能在出厂时就是配置为某种模式,这个不能更改,但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们的主设备的通信模式:
SPI通信协议详解_第3张图片
时钟极性CPOL是用来配置SCLK的电平出于空闲态或者有效态,时钟相位CPHA是用来配置数据采样是在第几个边沿
CPOL=0;表示当SCLK = 0时,处于空闲态,所以有效态就是SCLK处于高电平
CPOL=1;表示当SCLK = 1时,处于空闲态,所以有效态就是SCLK处于低电平
CPHA=0;表示数据采样是在第1边沿,数据发送在第2个边沿,也就是奇数边沿被采样
CPHA=1;表示数据采样是在第2边沿,数据发送在第1个边沿,偶数边沿被采样SPI通信协议详解_第4张图片
(1)起始信号:NSS信号线由高变低,是SPI通讯的起始信号
(2)借宿信号:NSS信号由低变高,是SPI通讯的停止信号
(3)数据传输:SPI使用MOSI以及MISO信号来传输数据,使用SCK信号线进行数据同步。MOSI及MISO数据线在SCK的每个时钟周期传输一位数据,且数据输入输出时同时进行的。SPI每次传输数据可以8位或16位为单位,每次传输的单位数不受限制
通信模式的设置
由于CPOL以及CPHA的不同状态,SPI分成了四种模式,主机与从机需要工作在相同的模式下才可以正常通信,因此通常主机要按照从机支持的模式去设置
SPI通信协议详解_第5张图片

STM32F4-SPI控制器特性

STM32F4的MOSI以及MISO都连接到数据移位寄存器上,数据移位寄存器的数据来源于接收缓冲区与发送缓冲区
(1)通过写SPI的“数据寄存器DR”把数据填充到发送缓冲区
(2)通过读“数据寄存器DR”可以获取接收缓冲区中的内容
(3)其中数据帧长度可以通过“控制寄存器CR1”的“DFF位”配置为8位或16位模式,配置“LSBFIRST位”可选择MSB先行还是LSB先行

内部SPI设置

STM32F429有高达6个SPI(45Mbits/s),其SPI接口提供两个主要功能:支持SPI协议和I2S音频协议。默认情况下,选择的是SPI功能。可通过软件将接口从SPI切换到I2S。
串行外设接口SPI可与外部器件进行半双工/全双工的同步串行通信。该接口可配置为主模式,在这种情况下,它可为外部器件提供通信时钟SCLK。该接口还能够在多主模式下工作
它可用于多种用途,包括基于双线的单工同步传输,其中一条可作为双向数据线,或使用CRC检验实现可靠通信SPI通信协议详解_第6张图片
片选接到了主控制逻辑芯片上面,主控制逻辑芯片又连接到了MOSI和MISO上面,时钟引脚接到了我们的波特率发生器上面,波特率是由SPI_CR1上面产生的,
单个主器件/单个从器件应用
SPI通信协议详解_第7张图片
主模式
SPI通信协议详解_第8张图片

你可能感兴趣的:(嵌入式常用通信协议,算法,c语言,单片机)