文章目录
SPI总线
SPI总线有SCK,MOSI,MISO,CS 构成,支持高速,全双工,同步
目前单片机CLK可以达到几十MHZ
三线SPI
三线制指的是CS,CLK,MOMI,是半双工方式
四线SPI
由SCK,MOSI,MISO,CS 构成
时钟极性与时钟相位
时钟极性: CPOL 为0 代表SCK空闲为低电平,为1代表SCK空闲为高电平
时钟相位: CPHA 为0 代表第一个边沿采样,为1代表第二个边沿采样
工作模式
SPI总线可以配置为一主多从模式,允许多个从设备挂接在同一SPI总线上
每个从设备需要独立的CS(片选)信号线
每次SPI的数据传输都是主从设备在交换数据
在SPI总线的传输中,CS信号线在低电平时是有效的。当要与某个外设通信时,需要将该外设上的CS线置低。
SPI总线有四种工作方式(SP0, SP1, SP2, SP3)
SP0
CPOL为0 ,CPHA为0
SCK空闲为低电平,下降沿采样,上升沿输出(从设备在上升沿采样)
SP1
CPOL为0 ,CPHA为1
SCK空闲为低电平,上升沿采样,下降沿输出(从设备在下降沿采样)
SP2
CPOL为1 ,CPHA为0
SCK空闲为高电平,下降沿采样,上升沿输出(从设备在上升沿采样)
SP3
CPOL为1 ,CPHA为1
SCK空闲为高电平,上升沿采样,下降沿输出(从设备在下降沿采样)
SPI在flash中的应用
QUADSPI 是一种专用的通信接口,连接单、双或四(条数据线) SPI Flash 存储介质。该接
口可以在以下三种模式下工作:
①间接模式:使用 QUADSPI 寄存器执行全部操作。
②状态轮询模式:周期性读取外部 Flash 状态寄存器,而且标志位置 1 时会产生中断(如擦除或烧写完成,会产生中断)。
③内存映射模式:外部 Flash 映射到微控制器地址空间,从而系统将其视作内部存储器。
采用双闪存模式时,将并行访问两个 Quad-SPI Flash,可同时发送/接收 8 位数据,吞吐量和容量均可提高二倍。
单线SPI (signal spifalsh) [Standard SPI]
传统 SPI 模式允许串行发送/接收单独的 1 位。在此模式下,数据通过 SO 信号(其 I/O 与IO0 共享)发送到 Flash。从 Flash 接收到的数据通过 SI(其 I/O 与 IO1 共享)送达。
通过将( QUADSPI_CCR 中的) IMODE/ADMODE/ABMODE/DMODE 字段设置为 01,可对不同的命令阶段分别进行配置,以使用此单个位模式。
在每个已配置为单线模式的阶段中:
①IO0 (SO) 处于输出模式
②IO1 (SI) 处于输入模式(高阻抗)
③IO2 处于输出模式并强制置“0”(以禁止“写保护”功能)
④IO3 处于输出模式并强制置“1”(以禁止“保持”功能)
若 DMODE = 01,这对于空指令阶段也同样如此。
通常我们说的SPI就是Standard SPI,有4根信号线,分别为CLK、CS、MOSI和MISO。数据线工作在全双工。
双线SPI (dual spiflash)
在双线模式下,通过 IO0/IO1 信号同时发送/接收两位。
通过将 QUADSPI_CCR 寄存器的 IMODE/ADMODE/ABMODE/DMODE 字段设置为 10,可对不同的命令阶段分别进行配置,以使用双线 SPI 模式。
在每个已配置为双线模式的阶段中:
①IO0/IO1 在数据阶段进行读取操作时处于高阻态(输入),在其他情况下为输出
②IO2 处于输出模式并强制置“0”
③IO3 处于输出模式并强制置“1”
在空指令阶段,若 DMODE = 01,则 IO0/IO1 始终保持高阻态。
四线SPI模式 (quad spiflash)
在四线模式下,通过 IO0/IO1/IO2/IO3 信号同时发送/接收四位。
通过将 QUADSPI_CCR 寄存器的 IMODE/ADMODE/ABMODE/DMODE 字段设置为 11,可对不同的命令阶段分别进行配置,以使用四线 SPI 模式。
在每个已配置为四线模式的阶段中, IO0/IO1/IO2/IO3 在数据阶段进行读取操作时均处于高阻态(输入),在其他情况下为输出。
在空指令阶段中,若 DMODE = 11,则 IO0/IO1/IO2/IO3 均为高阻态。
IO2 和 IO3 仅用于 Quad SPI 模式,如果未配置任何阶段使用四线 SPI 模式,即使 QUADSPI激活,对应 IO2 和 IO3 的引脚也可用于其他功能。
IO3 (HOLD)
IO2 (WP)
WP : 写保护信号的作用是防止QSPI Flash的状态寄存器被写入错误的数据,WP信号低电平有效,但是当状态寄存器2的QE位被置1时,WP信号失去写保护功能,它变成Quad SPI的一个双向数据传输信号。
HOLD: HOLD信号的作用是暂停QSPI Flash的操作。当HOLD信号为低,并且CS也为低时,串行输出信号DO将处于高阻态,串行输入信号DI与串行时钟信号SCLK将被QSPI Flash忽略。当HOLD拉高以后,QSPI Flash的读写操作能继续进行。当多个SPI设备共享同一组SPI总线相同的信号的时候,可以通过HOLD来切换信号的流向。和WP信号一样,当状态寄存器2的QE位被置1时,HOLD信号失去保持功能,它也变成Quad SPI的一个双向数据传输信号。
四线模式的状态为以下几个:
- 空闲状态:用来初始化各个寄存器的值
- 发送命令状态:用来发送8-bit的命令码
- 发送地址状态:用来发送24-bit的地址码
- 读等待状态(单线模式):当读数据操作正在进行的时候进入此状态等待读数据完毕
- 写数据状态(单线模式):在这个状态FPGA往QSPI Flash里面写数据
- 写状态寄存器状态:用来把状态寄存器的QE(Quad Enable)置1
- Dummy Clock状态:四线读数据之前需要等待8个dummy clock
- 写数据状态(四线模式):在这个状态FPGA往QSPI Flash里面通过四线模式写数据
- 读等待状态(四线模式):在这个状态等待FPGA从QSPI Flash里面通过四线模式读数据完成
- 结束状态:一条指令操作结束,并给出一个结束标志
QSPI通过命令与Flash通信,每条命令包括指令、地址、交替(复用)字节、空指令和数据共五个阶段,而这五个阶段任一阶段均可跳过,但至少要包含指令、地址、交替字节或数据阶段之一。