SPI—读写串行FLASH

一、SPI协议简介

SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛的使用在ADC、LCD等设备与MCU之间,要求通讯速率比较高的场合。

SPI物理层的特点

SPI—读写串行FLASH_第1张图片

 SS:从设备选择信号:常称为片选信号线,也称为NSS,CS.

每个设备都有独立的这一条SS信号线,本信号线独占主机一个引脚,即有多少个从设备,就有多少条片选信号线。I2C协议中通过设备地址来寻址,选中总线上的某个设备并与其进行通讯;而SPI协议中没有设备地址,它使用SS信号线来进行寻址,当主机要选择从设备时,把该设备的SS信号线设置为低电平,即该从设备被选中,即片选有效,接着主机开始与被选中的从设备进行SPI通讯。所以SPI通讯以SS线置低电平为起始信号,以SS线被拉高作为结束信号。

SCK(Serial Clock):时钟信号线,用于通讯数据同步。

它由通讯主机产生,决定了通信的速率,不同的设备支持的最高时钟频率不一样,比如STM32的SPI时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。

MOSI(Master Output,Slave Input):主设备输出/从设备输入引脚

主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据。即这条线上的数据方向为主机到从机。

MISO(Master Iutput,Slave Output):主设备输入/从设备输出引脚

主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上的数据方向为从机到主机。

SPI的协议层

SPI的协议层定义了通讯的起始和停止信号,数据的有效性,时钟的同步等环节。

1.1 SPI的基本通讯过程

SPI—读写串行FLASH_第2张图片

 1.2 通讯的起始和停止信号

  • 标号①处,NSS信号线由高变低,是SPI通讯的起始信号。NSS是每个从机各自独占的信号线,当从机在自己的NSS线上检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。
  • 在图中的标号⑥处,NSS信号由低变高,是SPI通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。

1.3 数据的有效性

SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。

MOSI及MISO数据线在SCK的每个时钟周期传输一位数据,且数据输入输出是同时进行的。

1.4 CPOL/CPHA及通讯模式

SPI—读写串行FLASH_第3张图片

  • 时钟极性CPOL是指SPI通讯设备处于空闲状态时,SCK信号线的电平信号(即SPI通讯开始之前,NSS线为高电平时的SCK状态)。CPOL = 0时,SCK在空闲状态时为低电平,CPOL = 1时,SCK在空闲状态为高电平。
  • 时钟相位CPHA是指数据的采样时刻,当CPHA = 0时,MOSI或MISO数据线上的信号将会在SCK时钟线的“奇数边沿”被采样。当CPHA = 1时,数据线在SCK的“偶数边沿”采样。
  • SCK信号线在空闲状态为低电平时,CPOL = 0;空闲状态为高电平时,CPOL = 1;
  • CPHA = 0,MOSI和MISO数据线的有效信号在SCK的奇数边沿保持不变。

由CPOL以及CPHA的不同状态,SPI分成了四种模式,主机与从机需要工作在相同的模式下才能正常通信,实际中采用较多的是“模式0”与“模式3”

SPI模式

CPOL

CPHA

空闲时SCK时钟

采样时刻

0

0

0

低电平

奇数边沿

1

0

1

低电平

偶数边沿

2

1

0

高电平

奇数边沿

3

1

1

高电平

偶数边沿

二、STM32的SPI特性及架构

三、SPI初始化结构体详解

四、SPI读写穿行FLASH实验

你可能感兴趣的:(网络,嵌入式软件)