【SPI】W25Q64介绍

一、W25Q64简介
  • W25Qxx 系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景
  • 存储介质: Nor Flash (闪存)
  • 时钟频率: 80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)
  • 存储容量( 24 位地址):
  W25Q40     4Mbit / 512KByte
  W25Q80     8Mbit / 1MByte
  W25Q16     16Mbit / 2MByte
  W25Q32     32Mbit / 4MByte
  W25Q64     64Mbit / 8MByte
  W25Q128   128Mbit / 16MByte
  W25Q256   256Mbit / 32MByte

二、硬件电路

  • 注意
1、带斜杠的CS(SS)——代表低电平有效
2、WP(Write Protect)——配合内部的寄存器配置,可以实现硬件的写保护(保护时不可写)——低电平有效
3、 HOLD——数据保持——低电平有效
  • 额外
DI、DO、WP、HOLD在引脚定义图中分别各自有括号写了IO0、IO1、IO2、IO3——对应【双重SPI】和【四重SPI】
//如果是【普通SPI】模式,括号不起作用
//如果是【双重SPI】模式,DI和DO将作为IO0和IO1,是数据同时收和同时发的两个数据位
//如果是【四重SPI】模式,四个引脚都将作为新的IO口,都作为数据收发引脚

三、W25Q64框图
  • 划分方式
    • 一整块存储空间划分为若干的块Block
    • 每一个块Block再划分为若干的扇区Sector
    • 每个扇区Sector再划分为若干页Page
右边的矩形代表【所有的存储器】
存储器以字节为单位,每个字节都有唯一的地址(W25Q64)的地址宽度是24位,3个字节,寻址空间为8MB
  • 从整体来看
左下角第一个字节地址为【00 00 00h】,之后的空间地址依次自增,直到最后一个字节地址为【7F FF FFh】
  • 从块Block之间来看
其中以64KB为一个基本单元,将所有的存储器划分成若干的块Block,从前往后(从下往上)依次是块0、块1、块2……
//存储器地址空间为8MB,以64KB为一块进行划分,可以分得128块Block(块序号0~127)
  • 从块Block内部来看
比如:块0的起始地址为【00 00 00】,结束地址为【00 FF FF】
          块31的起始地址为【1F 00 00】,结束地址为【1F FF FF】
变化规律:每个块的起始为【XX 00 00】,结束地址为【XX FF FF】——每一块内地址变化范围为低位的2个字节
左边的矩形代表由块Block更细划分的【扇区Sector】
  • 从整体来看
左下角第一个字节地址为【XX 00 00h】,之后的空间地址依次自增,直到最后一个字节地址为【XX FF FFh】
  • 从扇区Sector之间来看
其中以4KB为一个基本单元,将每一块Block划分成若干的扇区Sector,从前往后(从下往上)依次是扇区0、扇区1、扇区2……
//块Block地址空间为64KB,以4KB为一块进行划分,可以分得16块扇区(Sector序号0~15)
  • 从扇区Sector内部来看
变化规律:每个扇区的起始为【XX X0 00】,结束地址为【XX XF FF】——每一块内地址变化范围为12位低位
写入数据时进行更细的划分【页Page】
  • 从整体来看
页的大小为【256字节】——存储器整个空间会划分为很多页
  • 从页Page之间来看
其中以一个扇区Sector=4KB为基本单元,将其划分成若干的扇区Sector
//扇区Sector地址空间为4KB,以256字节为一块进行划分,可以分得16页(Page序号0~15)
  • 从页Page内部来看
变化规律:每页的起始为【XX XX 00】,结束地址为【XX XX FF】——每一块内地址变化范围为8位低位
/*************************************************************************************************************/

左下角为【SPI控制逻辑】(地址锁存、数据读写等)
  • 控制逻辑左边为【SPI通信引脚】(DI、DO、CLK、CS、WP、HOLD)
主控芯片通过SPI协议把指令和数据发给【控制逻辑】,控制逻辑就会自动去操作内部电路
  • 控制逻辑上边为【状态寄存器】
体现芯片当前状态(是否处于忙状态、是否写使能、是否写保护)
  • 状态寄存器上边为【写控制逻辑】——和外部WP引脚相连实现硬件写保护
  • 控制逻辑右边为【页地址锁存/计数器】、【字节地址锁存/计数器】——用于指定地址
EX:通过SPI总共发过来3字节的地址,因为一页是256字节,所以一页内的【字节地址】就取决于最低一个字节,高位的两个字节对应【页地址】
//前两个字节会进到【页地址锁存/计数器】,最后一个字节会进到【字节地址锁存/计数器】
1、【页地址】通过【写保护和行解码】来选择操作哪一页
2、【字节地址】通过【列解码和256字节页缓存】来进行指定字节的读写操作
/*************************************************************************************************************/
  • 【页缓存区】是一个256字节的RAM存储器——辅助读写功能
1、写入数据
数据放到缓存区,在时序结束后,芯片再将缓存区的数据复制到对应的Flash中进行永久保存
  • 设立【缓存区】原因:SPI写入频率非常高,而Flash写入较慢
由SPI写入的数据先放在【页缓存区】(RAM存储器,速度非常快),SPI写完后,芯片再把数据从【缓存区】转移到【Flash】
  • 数据从【缓存区】转移到【Flash】里需要一定时间,因此在写入时序结束后芯片会进入【忙状态】
    • 【状态寄存器】的【BUSY】位置1——表示芯片当前正在转移数据,不会响应新的读写时序
需要注意的是:【缓存区】只有256字节,因此写入的一个时序连续写入的数据量不能超过256字节
2、读取数据
读取只看电路的状态就行,速度很快,基本不花时间,所以很少对读取的限制
另外:其中地址锁存带有计数器,所以地址指针在读写之后可以自动+1,进而实现从指定地址开始连续读写多个字节

四、Flash操作注意事项
  • 写入操作时
1、写入操作前,必须先进行写使能
//一个【写使能】只能保证后续的一条写指令执行
//写指令执行后会自动【写使能】,因此 在进行任何写入操作前需要先【写使能】
2、每个数据位只能由 1 改写为 0 ,不能由 0 改写为 1
//RAM可以直接完全覆盖改写——Flash不行
3、写入数据前必须先擦除,擦除后,所有数据位变为 1
//发出擦除指令后芯片也会进入【忙状态】
4、擦除必须按最小擦除单元进行
//不能指定某一个字节擦除,要擦就要一部分(最小擦除单元)一起擦——本芯片中最小擦书单元是【扇区】
因此擦除最少得将一个扇区4096个字节(4KB)一起擦
5、连续写入多字节时,最多写入一页的数据;若写多了,超过页尾位置的数据,会回到页首覆盖写入
//写入时一次性不能写太多,一个写入时序最多只能写【一页】的数据(256字节)
原因:【页缓存区】只有256字节,写太多缓存区存不下
注意:从【页起始位置】开始写才能最大写入256字节
//如果从【页中间地址】开始写,那么写到【页尾】时地址就会跳回【页首】——导致地址错乱
6、写入操作结束后,芯片进入忙状态(芯片将数据从【缓存区】转移到【Flash】 ),不响应新的读写操作
//读取【状态寄存器】的【BUSY】位为0时芯片不忙,再进行操作
  • 读取操作时
直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,【但不能在忙状态时读取】

  • 9
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值