写在前面:在单片机的学习过程中,各种通信协议的学习是必不可少的,在前面我们学习了串口通信、IIC通信,本节我们来认识一下SPI通信协议。包括其SPI基本概念、NORFLASH芯片的介绍以及相关的例程实验。
目录
一、SPI介绍
1.1什么是SPI?
SPI全称为: Serial Peripheral interface;其中文翻译为:串行外设设备接口,是一种高速的、全双工的、同步的通信总线;
我们前面学习了IIC通信,STM32---IIC通信协议(含源码,小白进)_stm32 iic-CSDN博客再此,将SPI同IIC做出对比:
SPI | IIC | |
通信方式 | 同步、串行、全双工 |
同步、串行、半双工 |
总线接口 | MOSI、MISO、SCL、CS | SDA、SCL |
拓扑结构 | 一主多从、一主一从 | 多主从 |
从机选择 | 片选引脚 | SDA设备地址片选 |
通信速率 | 一般500MHz以下 | 100KHz、400KHz、3.4MHz |
数据格式 | 8/16位 | 8位 |
传输顺序 | MSB/LSB | MSB |
1.2SPI结构框图
相关引脚:
MOSI:输出数据线;
MISO:输入数据线;
SCK:时钟线,由主设备产生。
NSS/CS:从设备片选信号,由主设备产生。
STM32F103引脚对应SPI:
引脚 | SPI1 | SPI2 | SPI3 |
NSS | PA4 | PB12 | PA15 |
CLK | PA5 | PB13 | PB3 |
MISO | PA6 | PB14 | PB4 |
MOSI | PA7 | PB15 | PB5 |
SPI工作原理:
在从机与主机内部都含有一个移位寄存器,主机通过它的SPI串行寄存器写入一个字节来发起一次传输。串行移位寄存器通过MOSI将字节按位进行传输给从机,从机也将自己的串行移位寄存器的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就能够发生交换。
外设的写与读操作时同步进行的,如果只是写操作,主机可以忽略接受到的数据;如果只是读操作,则需要发送一个空字节引发进行从机传输。
SPI具有三种传输方式:全双工、半双工以及单工;
全双工通信,就是在任何时刻,主机与从机之间都可以同时进行数据的发送和接收。
单工通信,就是在同一时刻,只有一个传输的方向,发送或者是接收。
半双工通信,就是在同一时刻,只能为一个方向传输数据 。
1.3SPI工作模式
在前面学习IIC通信时,STM32与具有IIC接口的设备进行通信时,必须遵循IIC的通信协议。那同理我们使用SPI接口进行通信时,也需要遵循对应的通信协议,也就是对应的读与写时序。SPI通信协议具有4种工作模式。
首先,在学习4种工作模式之前,先了解两个概念:时钟极性(CPOL)与时钟相位(CPHA);
时钟极性:是指当主机没有数据传输时即空闲状态下,SCL线的电平状态;若空闲状态为高电平 ,CPOL为1;若空闲状态为低电平,则CPOL为0;
时钟相位:在同步通信时,数据的采集与变化都是在时钟边沿进行的,也称为边沿协议(了解边沿协议与电平协议的区别),那每个时钟周期具有两个边沿,分别为上升沿与下降沿,那么数据的变化与采样就安排在两个不同的边沿,由于数据的产生和采样需要一定的时间,那么如果我们在第一个边沿把数据输出了,从机只能在第二个边沿进行采样。
CPHA的实质是指:采样时刻,如果CPHA=0就表示采样