历史上的今天
返回首页

历史上的今天

今天是:2024年10月25日(星期五)

正在发生

2021年10月25日 | stm32专题十八:详细分析SPI FLASH

2021-10-25 来源:eefocus

这里使用的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可以是任意数据)

推荐阅读

史海拾趣

E-Mark Inc公司的发展小趣事

ABC公司专注于研发先进的驾驶辅助系统。为了确保产品的合规性和市场竞争力,ABC公司主动寻求E-Mark认证。在认证过程中,公司不断优化产品设计,提高产品性能,成功获得了E-Mark认证。凭借这一认证,ABC公司的产品在欧洲市场得到了广泛应用,公司也因此获得了技术革新的声誉和市场份额的扩大。

Amphenol Thermometrics公司的发展小趣事

ABC公司专注于研发先进的驾驶辅助系统。为了确保产品的合规性和市场竞争力,ABC公司主动寻求E-Mark认证。在认证过程中,公司不断优化产品设计,提高产品性能,成功获得了E-Mark认证。凭借这一认证,ABC公司的产品在欧洲市场得到了广泛应用,公司也因此获得了技术革新的声誉和市场份额的扩大。

ELINA INDEK公司的发展小趣事

作为一家领先的电子公司,因美纳深知自己的社会责任。公司积极参与各种公益活动,推动基因测序技术在医疗、环保等领域的应用。同时,因美纳还注重可持续发展,通过采用环保材料、优化生产流程等方式降低对环境的影响。这种积极履行社会责任和推动可持续发展的做法赢得了社会各界的广泛赞誉。

Dielectric Laboratories公司的发展小趣事

在电子元件市场竞争日益激烈的背景下,DLI意识到必须不断创新才能保持竞争优势。于是,公司开始研发多层陶瓷电容器(MLCC)技术。经过数年的努力,DLI成功推出了具有高性能、高可靠性特点的多层陶瓷电容器,广泛应用于军事、航空等领域。这一技术的突破不仅提升了DLI的市场地位,也为整个电子行业的发展做出了重要贡献。

ACEINNA公司的发展小趣事

作为一家在电子行业中具有重要地位的企业,DLI始终将创新作为公司的核心竞争力。公司不断投入研发资金,探索新的技术领域,推出具有领先性的产品。例如,在电容器领域,DLI研发了StackiCapTM技术,使得高CV电容器得到进一步发展。这一技术的推出不仅提升了DLI的产品竞争力,也为整个电子行业的发展注入了新的活力。同时,DLI还积极参与国际交流和合作,与全球知名的电子企业建立合作关系,共同推动电子行业的发展。

以上五个故事简要概述了Dielectric Laboratories(DLI)公司在电子行业中的发展历程和成就。通过这些故事,我们可以看到DLI在不断创新、追求卓越的过程中,逐渐成为了电子行业中具有重要影响力的企业。

Agilent Technologies公司的发展小趣事

1955年,一家名为Dielectric Laboratories(DLI)的公司正式成立,它以其独特的电子元件研发能力在电子行业中崭露头角。起初,DLI专注于电容器的研发和生产,以其高品质和稳定性赢得了市场的认可。随着业务的逐步扩大,DLI不断投入研发资金,探索新的技术领域,为公司的长远发展奠定了坚实的基础。

问答坊 | AI 解惑

最强大的串口桥式转换芯片

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 我公司是JM系列IC的一级代理商,下面是JM IC的功能型号简介: JMicron智微科技主要产品研发方向为高速串行式连结(High Speed Serial Link)的相关技术,该技术现已广泛应用于Serial ATA、PCI E ...…

查看全部问答>

3.3 伏至 5 伏互联技巧

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑 概述 我们对处理速度的需求日益增长,伴随着这种增长,用来构建单片机的晶体管尺寸则在持续减小。以更低的成本实现更高的集成度,也促进了对更小的几何尺寸的需求。随着尺寸的减小,晶体管击穿电压 ...…

查看全部问答>

C++.net硬件开发

请问各位大侠,C++.net能开发硬件程序吗,就是那种控制门口挡车杆升降的程序。 如果不能,那可以用VisualC++开发吗? 多种语言开发的程序可不可以组成一个软件上那? 谢谢各位。…

查看全部问答>

谁知道PROTEUS的第三方元件库怎么添加

有谁知道PROTEUS的第三方元件库怎么添加啊,我用的是7.5sp3的版本,我把.lib文件加到元件库里面但是还是以前那些元件,这是怎么回事啊?请大家帮帮忙!!!谢谢…

查看全部问答>

寻找西安写PDA软件的开发人员或公司。

要求:1、熟悉WINCE平台       2、有相关产品介绍       3、必须是西安的 联系QQ:112654 信箱:xclion@126.com 价格面谈。…

查看全部问答>

【重量级】使用RT-Thread RTOS及附属组件的LM3S8962评估板的例程

Introduction •这是使用RT-Thread RTOS及附属组件的LM3S8962评估板例程,对LM3S系列其他芯片也同样适用。所有例程源码来自开源实时操作系统RT-Thread的官方SVN源码服务器。这儿将例程做成了一个个单独的工程,目的是为了使刚接触RT-Thread的 ...…

查看全部问答>

07.28【每周讨论】相信大家都知道C语言了,那么E(易)语言呢?

第一次听说E语言听过,不了解最近刚刚知道一点点知道,感觉不错 [ 本帖最后由 longxtianya 于 2011-7-30 19:48 编辑 ]…

查看全部问答>

SimpliciTI-IAR-1.2.0>>CC430EM里的程序为何不能用了????

我用SimpliciTI-IAR-1.2.0里的cc430例程,用cc430F5137模块来测试程序AP_as_Data_Hub,为何AP和ED连接不上了,我的ED发送地址是0xFF,为何发不出去了???望各位老师能够解答我的难题 !在此谢过!…

查看全部问答>

LM3S9B96开发板里面怎么没有spiflash_rw例程?

    lm3s9b96开发板里面怎么没有spiflash_rw例程?   …

查看全部问答>