Appearance
SPI/FLASH
高速全双工的通信协议, 时钟线两根通信引脚, 一根片选引脚, SS引脚是低电平的时候选择这一个设备
在时钟的一个边沿时候进行数据的变换, 时钟的另一个边沿进行数据的采样, 可以设置为不同的模式
CPOL控制的是空闲的时候时钟的状态, 0的时候是低电平, CPHA控制的是数据采样的时间, 设置为0的时候为奇数边沿进行采样
QSPI
应用比SPI协议更加广泛, 对其功能进行增强, 增加队列传输机制, 推出队列串行外围接口协议
使用四条数据线进行数据传输, 使用的方式和SIP相似
- 四个阶段
指令, 地址, 复用字节, 空周期, 数据
在指令传输的时候使用的SPI的协议, 之后数据的传输, 发送的是四个数据线进行传输
STM32的实现
使用三跟线,可以选择单项的同步单工的功能
8位或者16为的传输格式, 主机或者从机的模式, 可以选的8个分频系数, 可以选的时钟的极性或者相位, MSB在前或者LSB在前, NSS可以选则是硬件控制还是软件控制
有中断标志位对于状态进行处理, SPI总线的忙状态位, 硬件校验, 可以作为最后一个字节进行传输, 支持DMA
- 升级
支持SPITI协议, 只要是片选信号线的差异
数据支持4位到16为的长度, 支持FIFO
4位到32位, 使用双时钟域, 对于片选极性以及时序, MISO和MOSI的切换
Quad-SPI的扩展, 主要用于控制SPI Flash
有三种模式, 间接模式, 使用寄存器进行所有操作
状态轮训模式, 周期性读取尾部Flash的状态寄存器, 标志位为1的时候会产生中断, 内部映射模式, 外部的Flash映射到内部的内存空间
支持双闪存, 提高容量
实际发送数据
拉低引脚
写入数据到缓冲区
发送完成标志BSY标志
当有数据接收到的时候会有一个RXNE标志
读取SPI的Flash的时候可以读取Flash的标志位
在使用容量比较大的flash的时候有专门的指令进入四字节表示一个地址, 状态寄存器里面有保存
QSPI
有三种模式
- 间接模式
直接操控寄存器
- 自动轮训模式
查询SPIFlsh的器件状态寄存器的状态, 有一个掩码功能, 用于匹配状态位
- 内存映射
将其视为一块内存, 直接使用指针进行操作
有一个限制, 只能够读取数据, 不能进行写入数据
在使用的时候需要设置指令的格式, QSPI_CommandTypeDef, 有具体的指令, 用几条线进行传输, 有的Flash可以设置之后的命令使用地址线发送, 这个不使能, 是否使用DDR(上下边沿进行采样)
最后使用HAL_SPI_Command()进行发送, 使用HAL_QSPI_Transmit()传输数据
可以使用命令HAL_QSPI_AutoPolling()进行自动轮询的读取状态寄存器, 有一个专门的结构体控制自动轮训的查询的标志位, 还可以设置匹配的标志位是与还是或(是否需要全部匹配)