【随手笔记】FLASH-W25Q16(二)

使用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).

数据手册1.

数据手册2.

数据手册3.

文章知识点与官方知识档案匹配,可进一步学习相关知识
C技能树首页概览 216811 人正在系统学习中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值