【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时芯片不忙,再进行操作
  • 读取操作时
直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,【但不能在忙状态时读取】


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部