stm32f407VET6驱动W25Q16

参考博客:
https://blog.csdn.net/lwb450921/article/details/124695575
一.W25Q16简介

1.8个引脚
在这里插入图片描述
在这里插入图片描述
MISO脚是DO脚【W25Q16的spi发送脚】
MOSI脚是DI脚【W25Q16的spi接收脚】

1).片选(/CS)引脚的介绍【高电平时,器件被取消选择

作用:
SPI 片选 (/CS) 引脚启用和禁用器件操作。
如何使能/禁能:
当 /CS 为高电平时,器件被取消选择,串行数据输出(DO 或 IO0、IO1、IO2、IO3)引脚处于高阻抗状态。取消选择时设备会进入什么状态?
取消选择时,除非正在进行内部擦除、程序或状态寄存器周期,否则设备功耗将处于待机水平。当 /CS 降低时,将选择设备,功耗将增加到活动级别,并且可以向设备写入指令并从设备读取数据。
上电后怎么操作可以让设备进入工作状态?
上电后,/CS 必须先从高电平过渡到低电平,然后才能接受新指令。/CS 输入必须在上电时跟踪 VCC 电源电平(参见“写保护”和图 30)。如果需要,可以使用 /CS 上的上拉电阻器来实现此目的。

2)写保护(/WP)引脚【低电平进入写保护状态,弃用写保护(置为高电平)】

写保护 (/WP) 引脚可用于防止写入状态寄存器。与状态寄存器的块保护(SEC、TB、BP2、BP1 和 BP0)位和状态寄存器保护 (SRP) 位结合使用,可以对部分或整个存储器阵列进行硬件保护。/WP 引脚处于低电平有效状态。

2.W25Q16的框图
在这里插入图片描述
在这里插入图片描述

从W25Q16的框图可以了解到,
W25Q16支持写保护,状态寄存器,解析SPI指令,和对于其自身寄存器的控制。

3.mcu和W25Q16通信时可以把mcu配置为全双工spi模式,方便收发;

4.假设mcu使用标准spi和W25Q16通信【这是spi基础知识可以不看】

W25Q80/16/32 可通过 SPI 兼容总线访问,该总线由四个信号组成:串行时钟 (CLK)、片选 (/CS)、串行数据输入 (DI) 和串行数据输出 (DO)。标准 SPI 指令使用 DI 输入引脚将指令、地址或数据串行写入 CLK 上升沿的器件DO 输出引脚用于从下降沿 CLK 上的器件读取数据或状态。 SPI 总线操作 支持模式 0 (0,0) 和 3 (1,1)。模式 0 和模式 3 之间的主要区别在于当 SPI 总线主机处于待机状态且数据未传输到串行闪存时 CLK 信号的正常状态。对于模式 0,/CS 的下降沿和上升沿的 CLK 信号通常为低电平。对于模式 3,/CS 的下降沿和上升沿的 CLK 信号通常为高电平。

5.写保护功能【略】

6.控制寄存器和状态寄存器
1)状态寄存器

a)busy状态
BUSY 是状态寄存器 (S0) 中的只读位,当设备执行页面程序、扇区擦除、块擦除、芯片擦除或写入状态寄存器指令时,该状态设置为 1。在此期间,设备将忽略除读取状态寄存器和擦除挂起指令之外的其他指令(请参阅 AC 特性中的 tW、tPP、tSE、tBE 和 tCE)。当编程、擦除或写入状态寄存器指令完成后,BUSY位将被清零为0状态,表示器件已准备好接受进一步的指令。

2)写入使能锁存器【略】

写使能锁存器 (WEL) 是状态寄存器 (S1) 中的只读位,在执行写使能指令后设置为 1。当器件被写入禁用时,WEL 状态位被清除为 0。上电时或执行以下任何指令后,将出现写入禁用状态:写入禁用、页面程序、扇区擦除、块擦除、芯片擦除和写入状态寄存器。

7.W25Q16支持的指令

W25Q80/16/32 的指令集由 15 条基本指令组成,这些指令完全通过 SPI 总线进行控制(参见指令集表)。指令从片选 (/CS) 的下降沿开始。时钟输入到 DI 输入的第一个数据字节提供指令代码。DI输入端的数据在时钟的上升沿进行采样,最高有效位(MSB)首先进行采样。指令的长度从单个字节到多个字节不等,后面可能跟着地址字节、数据字节、虚拟字节(不在乎),在某些情况下,还可以是组合。指令通过边沿 /CS 的上升沿完成。每条指令的时钟相对时序图包含在图 4 到 19 中。所有读取指令都可以在任何时钟位之后完成。但是,写入、编程或擦除的所有指令都必须在字节边界上完成(在完成完整的 8 位时钟后,CS 驱动为高电平)否则指令将被终止。此功能进一步保护设备免受意外写入。此外,在对存储器进行编程或擦除时,或在写入状态寄存器时,除读取状态寄存器外的所有指令都将被忽略,直到编程或擦除周期完成

CS为高,即/CS为低。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二.阅读数据手册

三.原理图

四.软件设计流程
1.写使能
时序如图所示:
1)先拉低/CS;
2)然后SPI发数据(等待发送完成);
3)最后拉高/CS;
在这里插入图片描述

在这里插入图片描述

写使能的步骤:
1)/CS拉低
2)SPI发送0x06
3) /CS拉高
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.写禁用
时序如图所示:
1)先拉低/CS;
2)然后SPI发数据(等待发送完成);
3)最后拉高/CS;

在这里插入图片描述

在这里插入图片描述
写禁能的步骤:
1)/CS拉低
2)SPI发送0x04
3) /CS拉高
为了减少操作步骤;不实现写禁能的代码;

3.读状态寄存器
时序:
在这里插入图片描述
在这里插入图片描述

操作步骤:
1)拉低/CS
2)发送0x05,0x35
3)mcu读取W25Q16的1字节数据(状态值)
在这里插入图片描述
在这里插入图片描述

4.mcu从w25q16读数据

读取数据指令允许从内存中按顺序读取另一个数据字节。
该指令是通过将 /CS 引脚驱动至低电平,
然后将指令代码“03h”后跟一个 24 位地址 (A23-A0) 移至 DI 引脚来启动的。
代码位和地址位锁存于 CLK 引脚的上升沿。
接收到地址后,寻址内存位置的数据字节将在 CLK 下降沿的 DO 引脚上移出,最高有效位 (MSB) 优先。
在移出每个字节的数据后,地址会自动递增到下一个更高的地址,从而允许连续的数据流。这意味着只要时钟继续,就可以通过一条指令访问整个内存。
该指令是通过将 /CS 驱动为高电平来完成的。
Read Data 指令序列如图 8 所示。如果在擦除、编程或写入周期 (BUSY=1) 时发出读取数据指令,则该指令将被忽略,并且不会对当前周期产生任何影响。读取数据指令允许从 DC 到最大 fR 的时钟速率(请参阅交流电气特性)。

在这里插入图片描述

简述步骤:
1)/CS拉低
2)mcu通过spi发送4字节数据:data[0]=0x03,data[1]~data[3]为24位地址。
3)mcu的spi接收数据;
4)不想再接收数据时,把/CS拉高来“结束读取”

在这里插入图片描述

5.mcu向w25q16写数据
Page Program 指令允许在先前擦除 (FFh) 内存位置对 1 个字节到 256 个字节(一页)的数据进行编程。在设备接受寻呼程序指令(状态寄存器位 WEL= 1)之前,必须执行 Write Enable 指令。
1)通过将 /CS 引脚驱动为低电平,
2)然后将指令代码“02h”后跟一个 24 位地址 (A23-A0)【 和至少一个数据字节移至 DI 引脚,从而启动该指令。】
3)具体的带写入的数据(至少1字节)【在向设备发送数据时,/CS 引脚必须在整个指令长度内保持低电平】
4)结束写入操作时,要把/CS拉高
在这里插入图片描述

在这里插入图片描述
注意:写入的完整流程为:写使能–>写操作
即:
在这里插入图片描述
软件编程步骤:
1)写使能
2)写操作【/cs拉低–>写指令(四字节)–>写数据(N字节)—>/CS拉高(结束写操作)】
在这里插入图片描述
其中,写使能的流程在前面介绍过
在这里插入图片描述
---------------------------------待续-------------------------------------------------------------

五.软件实现

六.测试

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值