知识点:
SPI通信原理,STM32配置SPI1,GD25Q16驱动步骤
详述:
1. SPI通信原理
SPI(Serial Peripheral interface,串行外围设备接口)是一种高速全双工的同步通信总线,SPI以主从方式工作,数据通信需要4根IO线,其中SPI_CS用于主机控制选中从机芯片,一般低电平认为从机被选中,SPI_CLK是由主机产生的同步时钟用来同步数据,SPI_MOSI是主机发送引脚,SPI_MISO是主机接收引脚。SPI通信一般有4种模式,不同的从设备在出厂时便会被厂家配置为其中一种模式,不允许用户修改,主从设备必须在用一模式下通信,详见下表所示。
模式 | 时钟极性(CPOL) | 时钟相位(CPHA) |
0 | 0(空闲SCLK为低电平) | 0(第1个时钟沿采样数据,即上升沿) |
1 | 0(空闲SCLK为低电平) | 1(第2个时钟沿采样数据,即下降沿) |
2 | 1(空闲SCLK为高电平) | 0(第1个时钟沿采样数据,即下降沿) |
3 | 1(空闲SCLK为高电平) | 1(第2个时钟沿采样数据,即上升沿) |
2. STM32配置SPI1--基于CubeMx HAL库
CubxMx配置GPIO和SPI,此处选择16分频,则170MHZ下SPI时钟频率约为10.625MHZ.
3. GD25Q16驱动步骤
从GD26Q16数据手册中获取通用信息:
1)支持SPI mode0和mode3模式,此处选择mode3模式,空闲状态SCLK为高电平,在时钟信号的第二个跳变沿采样数据(上升沿采样数据)
2)复位指令 99H 66H
3) 获取当前寄存器状态指令05H
4) 获取芯片ID指令90H
5)擦写一个SECTOR指令 20H
6) 页写指令02H
7) 读数据指令03H
以获取ID号为例用示波器观察实际波形,如下,主机发送90H,从机回复ID号C8 14
注意此处是为了示波器显示波形规整,SPI1时钟由主频170MHZ分频64得来2.65625MHZ,若是分频16得来10.625MHZ时钟频率,则示波器会显示近视正弦波而非方波了,应该是跟示波器的分辨率有关系的。
主机发送90H
从机回复C8 14
代码中也按照上述步骤配置后便可以读写FLASH了。