使用cubemx工具的STM32对外部flash(W25Q64)的简单编程
SPI简介
SPI通信原理
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如flash闪存芯片W25Q64等。
多NSS片选图如下(还有其他方式,如菊花链等)
模式编号
- CPOL代表的是SCK时钟线闲置状态下的电平,如CPOL为0时,SCK时钟线,闲置时为0,反之为1。如下图所示。
- CPHA代表的是SCK在奇数边沿采样还是在数边沿采样,如下图,当CPHA=0时,在奇数边沿采样,也就是绿色画线的地方;当CPHA=1时,在偶数边沿采样,就是上面标着2、4、6……的地方。
SPI线的类型
- 一般的SPI为4-wire模式
芯片的管脚上只占用四根线。
MISO(Master Input Slave Output): 主器件数据输出,从器件数据输入。
MOSI(Master Output Slave Input):主器件数据输入,从器件数据输出。
SCK(Slava Clock): 时钟信号,由主设备控制发出。
NSS(CS): 从设备选择信号,由主设备控制。当NSS为低电平则选中从器件。
- SPI还有3-wire模式
芯片的管脚只占用3根
MISO/MOSI: 主从双向通信。
SCK(Slava Clock): 时钟信号,由主设备控制发出。
NSS(CS): 从设备选择信号,由主设备控制。当NSS为低电平则选中从器件。
其实质就是把MISO和MIOSI合成一条了,如下图所示。
W25Q64
W25Q64介绍
W25Q64。W25Q 系列为台湾华邦公司推出的是一种使用 SPI 通讯协议的 NOR FLASH 存储器,64代表的是64Mbit的大小,也就是8MB的大小。
> 8MB被分为128个块(一个块64KB),而一个块又被分为16个扇区(一个扇区4KB)。
W25Q64的最小擦除单位是一个扇区,而我们有时候不想擦除一个扇区里面的全部内容,于是我们需要开辟一个至少4KB的缓存,假如我们当前要擦掉一个字节,我们可以临时开辟一个4KB的缓冲区,把扇区中的内容读入到缓冲区中,我们只要对应删掉缓冲区里的那个字节,然后擦除扇区,再把缓存区里的内容拿出来,存入这个扇区,我们就可以保证不会丢失不必要的数据了。
- 芯片的特性:
- 1.芯片擦除后,不是把擦除的位置清0,而是全部置1。
- 2.芯片只有在擦除后,才能往里面写入数据(原先写入过数据的情况),若是未擦除就写入,则会导致,写入数据的地方全部清零。
引脚介绍(前面带个斜杠的都是低电平有效):- CS:片选端,当被主机拉低时代表选中该器件。
- DO:数据输出端,主机读取该引脚发出的数据。
- DI:数据输入端,主机输出数据到该引脚。
- WP:写保护,低电平有效,当拉低电平时,不允许单片机写入数据,一般给他拉高。
- HOLD:低电平时,芯片停止工作,数据输出呈现高阻态,数据输入无效,一般给他拉高。
W25Q64命令及其介绍
总览W25Q64命令
指令介绍
一般用的到的指令也就下面被红色框住的这几个,加上一个蓝色的那个
这些指令分别是:
- 1、写使能(0x06)和写失能(0x04),只有写使能了,才能写入数据和擦除数据;
- 2、读状态寄存器1(0x05)和读状态寄存器2(0x35);
- 3、页写(0x02),只有在擦除之后才能正确往里面写入数据;
- 4、块擦除(0xD8),因为W25Q64有64Mbit,而分为了128个块,所以一个块是64KB,所以块擦除用这个0xD8这个指令而不是0x52;
- 5、扇区擦除(0x20),扇区是W25Q64所能擦除的最小单位,而一个扇区有4KB,所以一次最小能清除4KB,要是我们不想一次性清除这么多内存,可以临时开辟一个4KB的缓冲区(可以是主控芯片内部的缓冲区,也可以是其他存储类芯片)和这个扇区一一对应,用于删改特定的不是很大的数据。
- 6、全片擦除(0xC7/0x60):全片擦除有两个指令,俺只试过其中一个,所以俺不知道,两种擦除是否是一样的,是否都是全1擦。
- 7、读ID(0x9F),这里可以读出三种ID,第一个是制造商ID,第二个是存储器类型ID,第三个是容量ID。
- 8、读数据(0x03),读出芯片中的数据。
主要配置如下:
SPI配置:
- 在 Connectivity 中选择 SPI1 设置
- 并选择 Full-Duplex Master 全双工主模式
- 不开启 NSS 即不使用硬件片选信号(NSS直接选择外部引出的任意引脚为输出模式即可)
- 配置成时钟4分频
这些配置从上到下分别是:
- Frame Format:主从模式选择
- Data Size:一次传输数据大小
- First Bit:数据是高位在先还是低位在先
- prescaler(for Baud Rate):分频值
- Clock Polarity(CPOL):时钟空闲时的电平
- Clock Phase(CPHA):数据取样是在奇数取样还是在偶数取样(1Edge是奇数取样,2Edge是偶数取样)
片选配置:
代码
w25q64.c
效果
资料
基于3线spi通信的oled(cubemx图形化编程软件).
嵌入式硬件入门——Flash Memory(W25Q64+SPI协议).
STM32CubeMX学习笔记(10)——SPI接口使用(读写SPI Flash W25Q64).