stm32专题十八:详细分析SPI FLASH

发布者:灵感发电站最新更新时间:2021-10-25 来源: eefocus关键字:stm32  SPI  FLASH 手机看文章 扫描二维码
随时随地手机看文章

这里使用的SPI FLASH型号为W25Q64,是一种NOR FLASH。容量为64M bit = 8M Byte(8M 字节),而AT24C02 EEPROM才只有256字节,存储容量简直不是一个量级,这个FLASH和stm32内部的FLASH性质一样,适合存储语音、文本和数据。


W25Q64BV阵列分为32,768个可编程页面,每页256字节。 一次最多可编程256个字节。 可以以16个组(4KB扇区擦除),128个组(32KB块擦除),256个组(64KB块擦除)或整个芯片(芯片擦除)的组擦除页面。 W25Q64BV分别具有2,048个可擦除扇区和128个可擦除块。 小的4KB扇区允许在需要数据和参数存储的应用中具有更大的灵活性。


支持高达80MHz的时钟频率,可以真正的支持XIP。

基本特性:

引脚定义:

常用的电路接法:

存储框图(把内部存储空间分为了扇区(4KB)和块(64KB)):

Flash的存储特性:


在写入数据之前,必须先擦除(全部擦除为1);


写入数据时,只能把1改成0;


擦除时必须按最小单位(扇区)来擦除,W25Q64的扇区为4KB,因此最小要以4KB擦除;


NOR FLASH可以一个字节一个字节的读写(所以能支持XIP);


NAND FLASH必须以块或扇区为单位进行读写;


状态寄存器

BUSY


BUSY是状态寄存器(S0)中的只读位,当器件执行页编程、扇区擦除、块擦除,芯片擦除或写状态寄存器指令时,该位被设置为1状态。 在此期间,器件将忽略除读取状态寄存器和擦除暂停指令之外的其他指令。 当编程、擦除或写入状态寄存器指令完成时,BUSY位将被清除为0状态,表示器件已做好进一步指令的准备。


WEL


写使能锁存器(WEL)是状态寄存器(S1)中的一个只读位,在执行写启用指令后设置为1。当设备被写禁用时,WEL状态位被清除为0。一个写禁用状态发生在通电时或以下任何指令之后:写禁用、页编程、扇区擦除、块擦除、芯片擦除和写状态寄存器。


BP2 BP1 BP0


块保护位(BP2,BP1,BP0)是状态寄存器(S4,S3和S2)中的非易失性读/写位,提供写保护控制和状态。 可以使用写状态寄存器指令设置块保护位。 可以保护存储器阵列的全部,无或部分不受编程和擦除指令的影响。该块保护位的出厂默认设置为0,没有任何阵列受保护。

其他的状态位使用的不多,那么就有一个问题,FLASH有一个内部状态寄存器,而stm32如何知道flash的寄存器值?


W25Q64指令集:

W25Q64BV的指令集由27条基本指令组成,这些指令通过SPI总线完全控制(参见指令集表)。 通过片选(/ CS)的下降沿启动指令。 时钟输入DI输入的第一个数据字节提供指令代码。 DI输入的数据在时钟的上升沿采样,最高有效位(MSB)优先。


指令的长度从单个字节到几个字节不等,可能后跟地址字节,数据字节,虚拟字节(不关心),在某些情况下,可能是组合。 使用 / CS的上升沿完成指令。 每条指令的时钟相对时序图包含在图4到图30中。所有读指令都可以在任何时钟位之后完成。 但是,所有写入、编程或擦除的指令都必须在字节边界上完成(在完成8位时钟后,CS驱动为高电平)否则指令将被终止。 此功能进一步保护设备免受无意写入。 此外,在编程或擦除存储器时,或者在写入状态寄存器时,除读取状态寄存器外的所有指令都将被忽略,直到编程或擦除周期完成。


指令集表

下面以读取状态寄存器1为例,分析时序图:


读状态寄存器指令允许读取8位状态寄存器。 通过驱动/ CS低电平输入指令,并将状态寄存器-1的指令代码“05h”和状态寄存器-2的“35h”在CLK的上升沿移入DI引脚。 然后状态寄存器位在CLK的下降沿从DO引脚移出,最高有效位(MSB)优先,如图6所示。即使在编程,擦除或写状态寄存器周期正在进行时,也可以随时使用读状态寄存器指令。 这允许检查BUSY状态位以确定何时循环完成,如果设备可以接受另一条指令。 可以连续读取状态寄存器,通过驱动/ CS高电平完成指令。

写使能:

读数据指令:

读数据指令允许从存储器中顺序读取一个以上的数据字节。 通过将/ CS引脚驱动为低电平然后将指令代码“03h”后跟24位地址(A23-A0)移入DI引脚来启动该指令。 代码和地址位在CLK引脚的上升沿锁存。 接收到地址后,寻址存储单元的数据字节将在CLK的下降沿从DO引脚移出,最高有效位(MSB)优先。 在每个数据字节移出后,地址自动递增到下一个更高的地址,从而允许连续的数据流。 这意味着只要时钟继续,就可以使用单个指令访问整个存储器。 通过驱动/ CS高电平完成指令。


读数据指令序列如图8所示。如果在擦除,编程或写周期正在进行时发出读数据指令(BUSY = 1),指令将被忽略,并且不会有任何指令对当前周期的影响。

页编程:

页面编程指令允许从一个字节到256个字节(一页)的数据在上一个擦除(FFh)存储器位置进行编程。 必须在执行之前执行写使能指令设备将接受页面编程指令(状态寄存器位WEL = 1)。 通过将/ CS引脚驱动为低电平然后将指令代码“02h”后跟24位地址(A23-A0)和至少一个数据字节移入DI引脚来启动该指令。 在将数据发送到器件时,/ CS引脚必须在指令的整个长度内保持低电平。 页面程序指令序列如图15所示。


如果要编程整个256字节页,则应将最后一个地址字节(8个最低有效地址位)设置为0。这是因为,一个字节8位,可寻址的大小为2^8 = 256,正好是一页。所以,最后一个字节为0,前面字节递增,正好可以定位到一个页的起始字节。


如果最后一个地址字节不为零,并且时钟数超过剩余页长,则 寻址将包装到页面的开头(类似于EEPROM中的页面翻转)。 在某些情况下,可以编程少于256个字节(部分页面)而不会对同一页面内的其他字节产生任何影响。 执行部分页面编程的一个条件是时钟数不能超过剩余页面长度。 如果向设备发送超过256个字节,则寻址将换行到页面的开头并覆盖先前发送的数据。


时序图分析:

扇区擦除(很常用):


扇区擦除指令将指定扇区(4K字节)内的所有存储器设置为全1(FFh)的擦除状态。 必须先执行写使能指令,然后器件才能接受扇区擦除指令(状态寄存器位WEL必须等于1)。 通过将/ CS引脚驱动为低电平并将指令代码“20h”移至24位扇区地址(A23-A0)(参见图2)来启动该指令。 扇区擦除指令序列如图17所示。

读取设备ID:


实际上,在进行开机自检的时候,很多时候不知道FLASH是否被正确连接。我们可以利用设备ID号,通过读取ID号,是否与固定的EF或4017h相等,来确定Flash是否正常工作。

这里的24位全部给0就好

读取唯一ID:


读取唯一ID号指令访问出厂设置的只读64位数字,该数字对每个W25Q64BV器件都是唯一的。 ID号可与用户软件方法结合使用,以帮助防止复制或克隆系统。 通过将/ CS引脚驱动为低电平并移位指令代码“4Bh”,然后移位四个字节的虚拟时钟来启动读取唯一ID指令。 之后,64位ID在CLK的下降沿移出,如图28所示。(Dummy可以是任意数据)

关键字:stm32  SPI  FLASH 引用地址:stm32专题十八:详细分析SPI FLASH

上一篇:stm32专题十八:SPI框图及通讯过程
下一篇:stm32专题十八:stm32读写SPI FLASH

推荐阅读最新更新时间:2024-11-13 12:53

STM32初学笔记5之ADC(上)
自己单独编写了一个ADC的单独API接口文件,如下所示: =============================================================== ADC_Config.C =============================================================== /** ** 文件名称:ADC_Config.C ** 功能描述:ADC转换模块的配置 ** 硬件平台:ALIENTEK(STM32F103RBT6) ** 编译环境:Keil uversion4 IDE ** 库版本 :v3.5.0
[单片机]
<font color='red'>STM32</font>初学笔记5之ADC(上)
调试STM32遇到Hardfault知识总结
在NVIC中有一个硬fault状态寄存器(HFSR),它指出产生硬fault的原因。如果不是由于取向量造成的,则硬fault服务例程必须检查其它的fault状态寄存器,以最终决定是谁上访的。 1、寄存器描述 首先查看硬故障寄存器,判别原因。 硬故障状态寄存器 硬fault状态寄存器(地址:0xE000_ED2C) 位段 名称 描述 31 DEBUGEVT 硬fault因调试事件而产生 30 FORCED 硬fault是总线fault,存储器管理fault或是用法fault上访的结果 29:2 1 VECTBL 硬fault是在取向时发生的 0 121页手册 各个fault
[单片机]
STM32复习笔记(十四)DAC数/模转换
一、STM32 DAC局限性: 只有大容量的STM32F10x才具有DAC功能, 所以正点原子所有STM32开发板均具有DAC功能。 STM32的DAC模块(数字/模拟转换模块)是12位数字输入,电压输出型的DAC。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。 二、STM32的DAC模块主要特点有: ① 2个DAC转换器:每个转换器对应1个输出通道
[单片机]
<font color='red'>STM32</font>复习笔记(十四)DAC数/模转换
STM32_MDK_bxCAN
今天整理下CAN方面的资料,首先使用的是stm32f103vet6,只有一个CAN(2.0A & 2.0B)。CAN本身是工作的数据链路层的总线,有很多优势就不再一一介绍了,随便买本书看看都有。 基础的CAN的知识就不赘述了,这些是必要的可以自己去买书了解,现在来看下STM32下对CAN的驱动,STM32本身包括了CAN的数据链路层,然后物理层就是CAN收发器用的是TJA1050,是非容错CAN。终端电阻用120欧姆。 说道CAN最主要的是CAN的初始化,他包括两个主要的部分,一个是基本属性的声明,另一部分就是过滤器的设置。见如下代码: /*******************************************
[单片机]
分析师:2015年NAND Flash市况“上冷下热”
TrendForce 旗下记忆体储存事业处 DRAMeXchange 调查显示, NAND Flash 成本随着制程演进而持续下滑,各种终端应用如 SSD 与eMMC等需求则持续成长,估计 2015年 NAND Flash产值将较2014年成长12%,至276亿美元。 DRAMeXchange研究协理杨文得表示,由于终端产品出货与新机上市多半集中在第三季和第四季,相较之下上半年缺少新产品刺激市场,受淡季效应影响情况将较为显着,因此预估2015年NAND Flash市况将呈现上冷下热的格局,也就是上半年会出现供过于求,下半年则随着需求回温转为供需平衡甚至小幅供不应求的情形,但整体而言2015年NAND Flash产业稳定向
[嵌入式]
STM32串口接收不定长数据原理与源程序
今天说一下STM32单片机的接收不定长度字节数据的方法。由于STM32单片机带IDLE中断,所以利用这个中断,可以接收不定长字节的数据,由于STM32属于ARM单片机,所以这篇文章的方法也适合其他的ARM单片机。 IDLE中断什么时候发生? IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据。 如何判断一帧数据结束,就是我们今天讨论的问题。因为很多项目中都要用到这个,因为只有接收到一帧数据以后,你才可以判断这次收了几个字节和每个字节的内容是否符合协议要求。 看了前面IDLE中断的定义,你就会明白了,一帧数据
[单片机]
<font color='red'>STM32</font>串口接收不定长数据原理与源程序
基于STM32单片机的简易电子琴设计(1)
1.1 系统功能 按照设计要求,本系统具有以下功能: 共有三个基本模式:电子琴模式、录音模式、播放器模式 电子琴模式:7个基本按键控制产生7种音调,功能键实现调节音阶和音量 录音模式:可分为录音和放音两个模块,录音状态下会记录弹奏的音调以及时间;放音模式调用音乐播放器某些模块,实现相同的功能。 音乐播放器模式:可以实现音乐的播放、暂停、切歌、调速、顺序播放、单曲循环、随机播放、以及进度条显示。 有两个全局按键中断,可控制模式切换和全局静音/暂停。 1.2 主要技术性能指标 基本按键:7个; 功能按键:6个; 全局中断按键:2个; 扬声器:1个; 扬声器功率:1w; LCD1602:1块; 主要模式:3个; 曲库:8首; 音
[单片机]
基于<font color='red'>STM32</font>单片机的简易电子琴设计(1)
STM32驱动多个超声波模块(只用一个定时器)
用STM32单片机成功驱动一个超声波模块后,接下来便有了疑问如何用stm32单片机驱动多个超声波模块呢?(驱动一个超声波模块可以参考:stm32驱动超声波模块测距) 超声波模块型号为HC-SR04,模块驱动方式选择利用外部中断的方式驱动(具体细节可参见上面链接)。 经过一个下午的思考实验发现了两种驱动多个超声波模块的方法: 分时测量 同时测量 1.分时测量: 通过类似于实现流水灯的方法,多个超声波模块依次测量并将测量结果依次输出。 优点:各个超声波模块测量过程中不会出现相互干扰的情况。 缺点:整体测量周期长,数据采样频率比较低。 这里有几个问题点需要注意: 一个超声波模块需要在测量完成后再开始下一个模块的测量 超声波模块在
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

/ul>
换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved