W25QXX系列串行flash的相关知识

一直在使用串行flash,但是没有对串行flash进行一个系统全面的总结。我们常用的是华邦的w25qxx系列,他常用来挂在fpga或者stm32上存储程序使用,下面我们来总结下。
1.芯片(SOIC)外形如下:
在这里插入图片描述
在这里插入图片描述
2.功能和特性
华邦的w25qxx系列产品有w25q32,w25q64,w25q128等一些列型号,分别对应不同的容量。其支持spi的三种模式:
– Standard SPI: CLK, /CS, DI, DO
– Dual SPI: CLK, /CS, IO0, IO1,
– Quad SPI: CLK, /CS, IO0, IO1, IO2, IO3
速率如下:
– 133MHz Single, Dual/Quad SPI clocks
– 266/532MHz equivalent Dual/Quad SPI
– 66MB/S continuous data transfer rate
3.存储结构
我们看下这些不同容量flash的存储结构,搞清楚存储结构后面程序读写就比较容易。以下是W25Q32的存储结构:
在这里插入图片描述
W25Q32JV有1024个可擦除扇区(sectors),或者可以说有64个可擦除块(blocks)。关系 1 Block = 16 sectors;1 sector = 4KB,所以算起来能达到4M-byte.
W25Q64JV有2048个可擦除扇区(sectors),或者可以说有128个可擦除块(blocks)。关系 1 Block = 16 sectors;1 sector = 4KB,所以算起来能达到8M-byte。
编程即写数据,由于Flash的特性,只能从1编程0,所以写数据之前Flash里面的数据不是0xFF就必须先擦除,然后才能写数据。擦除即将Flash里面的数据恢复为0xFF的过程。
上电后设备自动处于写禁用状态(Write Enable Latch, WEL为0,WEL是只读位)。在Page Program, Sector Erase, Block Erase, Chip Erase or Write Status Register instruction(页编程、区擦除、块擦除、芯片擦除或者写状态寄存器指令)之前必须先进行写使能指令。在编程、擦除、写状态寄存器指令完成后,WEL自动变成0。
BUSY位是状态寄存器0的第0位,并且是只读位。当执行页编程、区擦除、块擦除、芯片擦除、写状态寄存器、擦除/编程安全寄存器指令时,其值为1,并且在此期间不再接收新的指令,但是可以接收读状态寄存器指令和擦除编程挂起指令。
3.spi通讯
我们常用标准spi模式进行数据读写。以下是spi通讯的四根数据线,片选cs,时钟clk,di数据输入,do数据输出。
在这里插入图片描述
4.flash的器件信息。
在这里插入图片描述
我们可以看到华邦品牌系列的代号为 EFh。
W25Q32容量代号为15h。
W25Q64容量代号为16h。
W25Q128容量代号为17h。
W25Q256容量代号为18h。
5.寄存器
该 Flash 中有好几类的寄存器,简单了解一下几个状态寄存器。
该型号支持三个状态寄存器,分别是 Status Register-1、Status Register-2、Status Register-3,提供了有关闪存阵列可用性、设备可写状态、写保护状态、Quad SPI设置、安全寄存器锁定状态、擦除 / 编程挂起状态、输出驱动强度和上电状态的信息。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.flash指令解析:
该 Flash 支持的指令长度并不是固定的,它可以是单独一个指令,也可以是指令 + 数据的形式,具体的格式需要根据指令的类型决定,使用前除了查看 8.1 中的指令集,也需要仔细阅读 8.2 中对应指令的描述。
在这里插入图片描述
在这里插入图片描述
以上是对flash进行操作的指令集我们解析下:
读取Read Manufacturer / Device ID (90h),查看 Flash 手册的 Instruction Set Table 1,并跳转至详细定义,可知,指令是 90h,指令后需要接 24 bit 值为 0 的地址,最后返回两个字节的数据。
在这里插入图片描述
我们看下flash读写工具的读取结果:
在这里插入图片描述
在这里插入图片描述
可以看到返回了EF18h,EF是制造商华邦,18h表示W25Q256容量。
其余的指令也是按指令表中来,我们就不逐个解析了.
7.读取SFDP
Serial Flash Discoverable Parameter(SFDP),即串行闪存可发现参数,包含有关设备配置、可用指令和其他功能的信息。Intel 较新的平台已经逐渐弃用 VSCC 的方式配置对 Flash 的支持,转而使用更加通用的 SFDP,所以不再需要额外配置 SPI Flash 的信息了。
SFDP 是一组记录 Flash 配置信息的的数据,如果异常,也会导致无法开机。当遇到此类问题的时候,则可以尝试读取该信息确认。
读取 SFDP 的指令是 5Ah,需要接 24 bit 地址和一个 dummy byte,使用 0 填充即可,返回数据共 256 byte。
在这里插入图片描述
在这里插入图片描述
我们再详细了解下SFDP:
对于串行FLASH来说,其生产厂商数量非常之多,但是对于一些FLASH本身的东西,各家厂商却是“各自为战”,没有一个完全统一的标准,发展期间有几家规模较大的起到了带头作用,但是还是没能做到完全统一。这对于FLASH的使用者来说并不友好,需要仔细研读FLASH使用手册,增加了开发的难度与周期,随着市场竞争的愈发激烈,各FLASH厂商都想提高自己产品的核心竞争力,此时,JEDEC联合几家规模较大的厂商制定了SFDP(Serial Flash Discoverable Parameter)标准,从此,FLASH的用户对于FLASH相关的开发可谓事半功倍,尤其是对驱动开发者而言,厂商之间的差异性不再是对FLASH驱动开发的限制。
SFDP又名JESD216,从2011年开始至今已有近十年的发展史,迭代了6个版本之多,以下是SFDP的修订历史:
时间 标准
2011 JESD216
2013.7 JESD216A
2014.5 JESD216B
2018.8 JESD216C
2018.11 JESD216D
2019.8 JESD216D.01
SFDP是JEDEC发布的JESD216的一个新标准,目前的版本号是V1.0。简而言之,SFDP(Serial Flash Discoverable Parameters)就相当于一张存储了FLASH部分属性的表,此表是不占用FLASH本身的存储空间的。SFDP中的信息自出厂就被固定,只供读取,开发人员可通过发送操作指令0x5A来读取当前FLASH的SFDP相关内容,这有利于开发人员了解FLASH之间的差异,提高开发效率,缩短整个开发周期。
我们就查看下JESD216标准是怎么定义的:
加粗样式
整体数据定义如下:
在这里插入图片描述
在这里插入图片描述
数据的含义都在标准中明确了,我们就不一一查看了,后面我们尝试读取下sfdp信息来进行解读。
以下是标准的连接信息:
链接: JESD216标准

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值