PN学堂GD32教程第12篇——SPI与Nor Flash

12.2 Norflash GD25Q128工作原理

引脚定义

片选引脚推荐4.7K上拉;此外,如果用不上写保护和数据保持功能的话,WP和HOLD可以直接连接3V3失能。写保护也可以在建立通信后,通过命令字来实现。

使用四线制的QPSI虽然会让WP和HOLD引脚失效,并且切换为半双工通信,但是数据吞吐量受益于并行传输翻了四倍。

存储颗粒度(重要)

接下来介绍的所有换算关系都是针对XX25Q128这类Nor Flash而言的 , 在计算机技术发展的历程中早期大规模的使用了机械硬盘,操作系统为了屏蔽底层的硬件差异抽象出了很多逻辑概念。比如最经典的买了一个U盘标着64GB,插上电脑一看只有59GB不到了,这些原因我们今天不做过多展开了。我们不讨论机械硬盘,也不讨论NAND FLASH\SD CARD,只谈论NOR FLASH用SPI读写的情况,后续的课程中再讨论挂载上文件管理系统后的读写擦颗粒度。

因此,我们锚定:

1KB=1024 Bytes,1MB=1024 KB=1,048,576 Bytes。

从这张图里我们可以计算出Nor Flash内部物理层(仅使用SPI读写) 存储单元的完整换算关系,也就是块->扇区->页 (从大到小排列)。首先交代一片GD25Q128总共包含128M bit存储空间,等于16M Bytes总量,地址空间为 000000h ~ FFFFFFh(24 位地址线,共 2²⁴ = 16,777,216 字节 = 16MB)。在这个总量的基础上,划分出0~255总计256个块(block),每个块可占用64 KB字节(16 * 1024 /256);每个块里面包含了16个扇区,每个扇区可存储4KB字节;每个扇区里面包含16个页,每个页可以存储256字节。

1CHIP=256BLOCK=4096SECTOR=65536PAGE;无论你用XX25Q32\XX25Q64\XX25Q128,256bytes=1page,16page=1sector,16sector=1block都是一样的,只是Q128有256个block、Q64有128个block,Q32只有64个block。

这里再做一个补充说明,手册上面的正式物理层存储只有BLOCK和SECTOR区分,PAGE严格来讲已经是软件层抽象概念了。前文已经提及了Nor Flash的每一个字节都由专属的访问地址(范围000000h ~ FFFFFFh),如果我们想要访问1个特定字节,那么SPI主机就需要发送3个字节的寻址命令码,2个字节约束页地址(页号),还有1个字节找出它是这一页的具体哪一个字节(页内偏移)。因为1page=256bytes=2^8bytes,1个bytes的8个bit可以表征256个bytes哪一个有效了。同理,1chip=65536page=2^16,2个bytes的16bit就可以表征16个page里面要去找哪一个了。

可以总结为:

TypeScript 复制代码
[ A23 ... A16 ] [ A15 ... A8 ] [ A7 ... A0 ]
   地址字节1       地址字节2      地址字节3

高16位(A23~A8):页号 Page Number
低8位 (A7 ~A0):页内偏移 Offset

举例SPI MASTER发送了0x 11 11 1F三个字节,那么页号是0x1111,主机要访问第4369个page;页内偏移是0x1F,访问的第31个字节。

注意虽然NOR FLASH的裸机读写颗粒度是非常小的,均为1字节;但是NOR FLASH必须先擦后写,每次擦拭的最小单元是1sector(4KB,实际物理最小单元);每次写入的上线也是1page,这受制于下图的256bytes Page Buffer,第257个字节不会写入下一页,而是直接覆盖掉本页第一个byte。

命令字

下面来讨论一下命令字:

重点关注以下这几个:

①Write Enable默认情况下nor flash是处于写保护状态的,需要先发送0x06打开写保护;

②Read Status Register-1 获取当前读写状态是否正常;

③Page Program发送写命令,3个字节的地址和后续写入的数据;

④**Sector Erase (4KB)**按扇区擦除数据;

⑤**Block Erase (32KB/64KB)**按块擦除数据;

⑥JEDEC ID获取芯片ID;

相关推荐
HRTOS2 小时前
HRTOS 测试框架完善:为中断验证增加中断来源校验机制
经验分享·单片机·嵌入式硬件·51单片机
FPC_小西3 小时前
您知道嵌入式开发中八大常用接口与总线有哪些吗?
人工智能·单片机·嵌入式硬件·pcb工艺·hdi高密度互联
苏辰澈3 小时前
C++独属于自己的变身:多态
c语言·开发语言·c++·visualstudio·编辑器
水饺编程3 小时前
第1章,[Win32 章节]:在 VS2019 里面安装 MSDN
c语言·c++·windows·visual studio
逐光者9333 小时前
STM32项目——秒表
stm32·单片机·嵌入式硬件
水饺编程3 小时前
第1章,[Win32 章节]:编程环境与 MSDN
c语言·c++·windows·visual studio
iowin8884 小时前
在 MCU 上跑 AI:端侧语音识别的极限压缩
人工智能·单片机·边缘计算·语音识别
硅基手札13 小时前
【串口技术系列文档 10】低功耗与唤醒机制
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
逐光者93314 小时前
STM32——SPI 屏 · Flash · 高速
java·前端·stm32