当前位置: 首页 > news >正文

SPI NOR Flash 的命令码详解

我们来对 SPI NOR Flash 的命令码进行一次非常详细和系统的解析。这将帮助您彻底理解其通信协议和工作原理。

命令码概述

SPI NOR Flash 通过一套标准化的命令集进行控制。主机(如 MCU)通过 MOSI 线发送命令码(通常为 1 字节),后跟地址、数据或空时钟(Dummy Clock),从而触发芯片内部相应的操作。

重要前提:

  • 大多数修改阵列的操作(编程/擦除)和写寄存器操作必须先发送 WREN (06h) 命令来使能写操作,否则操作会被忽略。

  • 操作完成后,应通过读取状态寄存器来检查操作是否完成。


命令码详解表

下表列出了最常见和关键的 SPI NOR Flash 命令码。请注意,不同制造商或容量的芯片可能会有细微差异,请务必以您使用的具体型号的官方数据手册 (Datasheet) 为准。

命令名称命令码 (Hex)功能描述命令序列格式 (在 /CS 拉低后开始)说明与注意事项
基本读写操作
WREN (Write Enable)06h写使能。允许后续执行编程或擦除操作。06h任何写操作前必须发送。成功执行后状态寄存器的 WEL 位置 1。
WRDI (Write Disable)04h写禁止。禁止后续编程或擦除操作。04h操作完成后或发生错误时使用,会使 WEL 位清零。
READ (Read Data)03h读取数据。从指定地址开始读取数据。03h + A23-A0 (3B Addr) + (读数据...)最基础、最兼容的读命令,速度较慢。
FAST_READ (Fast Read)0Bh快速读取。更高的时钟频率读取数据。0Bh + A23-A0 (3B Addr) + Dummy Byte + (读数据...)比 READ 更快,但需要至少 1 个哑元时钟
PP (Page Program)02h页编程。向指定地址写入数据。02h + A23-A0 (3B Addr) + (写数据 Bytes...)只能将位从 '1' 改为 '0'。写入前需确保区域已擦除(全为 FFh)。有页边界限制。
SE (Sector Erase)20h扇区擦除。擦除一个指定扇区(通常为 4KB)。20h + A23-A0 (3B Addr)地址必须对齐到扇区起始地址。擦除将整个扇区置为 FFh (全 '1')。
BE (Block Erase)D8h块擦除。擦除一个更大的块(通常为 64KB)。D8h + A23-A0 (3B Addr)地址必须对齐到块起始地址。用于快速擦除大块区域。
CE (Chip Erase)C7h / 60h整片擦除。擦除整个芯片存储阵列。C7h谨慎使用!耗时非常长。需确保整个芯片数据都可丢弃。
RDSR (Read Status Register)05h读状态寄存器。获取芯片当前状态。05h + (持续读 SReg...)最关键的命令。用于检查 BUSY 位和 WEL 位。
WRSR (Write Status Register)01h写状态寄存器。配置写保护等功能。01h + (写 Status Byte)需先 WREN。用于设置块保护(BP)位等。
识别与配置
RDID (Read JDEC ID)9Fh读识别ID。读取制造商ID、设备类型和容量。9Fh -> (回送 Manuf.ID, Memory Type, Capacity)JEDEC 标准命令。用于自动识别 Flash 型号。
RDP (Release from Deep Power-down)ABh退出深度省电模式并读取电子签名。ABh + (3 Dummy Bytes) -> (回送 Device ID)也可用于读取 ID,但非标准方式。
DP (Deep Power-down)B9h进入深度省电模式。极大降低功耗。B9h电流可从 mA 级降至 μA 级。适合电池供电场景。
RCR (Read Configuration Register)35h读配置寄存器35h -> (回送 Config Reg)读取非易失性配置位,如 QE (Quad Enable) 位。
WCR (Write Configuration Register)?写配置寄存器Cmd + (写 Config Reg)命令码厂商各异(如 GD25 是 31h)。用于使能四线模式(QE位)等。
高性能模式 (Quad SPI/QPI)
QPP (Quad Page Program)32h / 38h四线页编程。使用 4 条数据线写入数据。32h + (3B Addr) + (4线模式写数据...)需先使能 QE 位。写入速度大幅提升。
QOFR (Quad Output Fast Read)6Bh四线输出快速读6Bh + (3B Addr) + Dummy Byte + (4线模式读数据...)时钟频率下,数据输出速率是标准 READ 的 4 倍。
QIOR (Quad I/O Fast Read)EBh四线输入输出快速读EBh + (4线模式发送Addr) + Dummy Cycle + (4线模式读数据)地址也用 4 线传输,极大提升读取效率。
4-Byte Address Mode针对大于 16Mb (128Mb) 的芯片
EN4B (Enter 4-Byte Mode)B7h启用 4 字节地址模式B7h将地址线从 3 字节扩展到 4 字节,可寻址更大容量。
EX4B (Exit 4-Byte Mode)E9h退出 4 字节地址模式E9h恢复为 3 字节地址模式。
READ4B (Read with 4B Addr)13h4 字节地址读取13h + A31-A0 (4B Addr) + ...在 4 字节模式下的读命令。
PP4B (Page Prog with 4B Addr)12h4 字节地址页编程12h + A31-A0 (4B Addr) + ...在 4 字节模式下的写命令。

状态寄存器 (Status Register - S0) 详解

这是与命令交互最频繁的寄存器,必须熟练掌握

位 (Bit)符号名称功能描述
0WIPWrite In Progress忙状态位1:芯片正忙(正在编程/擦除);0:芯片空闲。通过循环读取此位判断操作是否完成。
1WELWrite Enable Latch写使能锁存位1:写操作被使能(已发送 WREN);0:写操作被禁止(默认或操作完成)。任何成功的写操作都会自动清除此位。
2BP0Block Protect 0块保护位。这些位(BP0, BP1, BP2, ...)通过 WRSR 命令设置,用于定义受硬件写保护的存储区域范围,防止误擦写。
3BP1Block Protect 1
4BP2Block Protect 2
5TBTop/Bottom Protect保护区域定位位。决定保护的区块是从底部开始还是从顶部开始。
6SECSector/Block Protect保护粒度位。决定保护的单位是扇区(SEC=1)还是块(SEC=0)。
7SRP0 / SRWDStatus Reg Protect状态寄存器保护位。常与 /WP 引脚配合,用于禁止写状态寄存器。
8 (S1)QEQuad Enable四线模式使能位1:使能 Quad SPI 模式;0:禁用(标准 SPI 模式)。此位通常需要通过 WCR 命令来设置。

一个典型的工作流程

向地址 0x1000 写入数据 [0xAA, 0xBB, 0xCC]:

  1. 检查并等待就绪:发送 RDSR (05h),循环读取直到返回值的 WIP位为 0。

  2. 使能写操作:发送 WREN (06h)

  3. (可选)确认WEL置位:发送 RDSR (05h),检查返回值的 WEL位是否为 1。

  4. 发送写命令和数据:发送 PP (02h) + 0x00, 0x10, 0x00 (3字节地址) + 0xAA, 0xBB, 0xCC (数据)。

  5. 等待写入完成:再次发送 RDSR (05h),循环读取直到 WIP位变为 0。

  6. 验证数据 (可选):发送 READ (03h) + 0x00, 0x10, 0x00,读取数据并对比。

总结与注意事项:

  • 先擦后写:NOR Flash 的编程只能写 '0'。因此,写入前目标区域必须被擦除(全为 '1' 或 0xFF)。

  • 页边界:Page Program 命令不能跨页写入。如果尝试写入超过当前页末尾,数据会回绕到当前页的开头。

  • 地址对齐:擦除命令(SE/BE)的地址必须是对应扇区或块的起始地址。

  • 硬件写保护:注意 /WP 引脚和状态寄存器保护位的配置,它们可能会阻止写操作。

  • 始终查阅手册:本文是通用指南,具体芯片的特性(如页大小、扇区大小、特殊命令)请以其数据手册为准。


文章转载自:

http://NmrkTVrs.ggpkk.cn
http://upYPHKwr.ggpkk.cn
http://iF4Uxlhh.ggpkk.cn
http://JfTONXzD.ggpkk.cn
http://449Pi3OI.ggpkk.cn
http://qiNhMkqL.ggpkk.cn
http://oxEpTLhP.ggpkk.cn
http://31fIIH1U.ggpkk.cn
http://BwIgta3e.ggpkk.cn
http://Hb3p0qah.ggpkk.cn
http://jUUP3NTc.ggpkk.cn
http://ovj7h65U.ggpkk.cn
http://HabJ93U3.ggpkk.cn
http://4i0aR2Sn.ggpkk.cn
http://t9DZYq3v.ggpkk.cn
http://3eEah11P.ggpkk.cn
http://8GFjMRrN.ggpkk.cn
http://OwYIPCC1.ggpkk.cn
http://YBHIAM4m.ggpkk.cn
http://ZduMnHi5.ggpkk.cn
http://TjNCEPQC.ggpkk.cn
http://mWLbKivR.ggpkk.cn
http://iCITCJ0K.ggpkk.cn
http://Pkwm50jv.ggpkk.cn
http://In0Ncpyc.ggpkk.cn
http://glgLtAwr.ggpkk.cn
http://b6tJTcBk.ggpkk.cn
http://bOWj7FoI.ggpkk.cn
http://BhBRJUAE.ggpkk.cn
http://zkoWlauV.ggpkk.cn
http://www.dtcms.com/a/383043.html

相关文章:

  • kafka--基础知识点--5.2--最多一次、至少一次、精确一次
  • Spark(1):不依赖Hadoop搭建Spark环境
  • Python快速入门专业版(三十):函数进阶:函数嵌套与作用域(内部函数访问外部变量)
  • LLaMA-Factory windows wls 安装vllm,并对比速度
  • 全排列问题深度解析:用 Python 玩转 DFS 回溯与迭代
  • 视觉智能的「破壁者」——Transformer如何重塑计算机视觉范式?三大CV算法论文介绍 ViTMAESwin Transformer
  • 语言模型为何会产生幻觉
  • 【Linux指南】Makefile入门:从概念到基础语法
  • 【deepseek】官方API的申请和调用
  • ARM的GIC
  • < 自用文 acme.sh > 使用 Cloudflare API 自动更新证书
  • vLLM - LLMEngine
  • 天猫返利app的多租户架构设计:数据隔离与资源共享方案
  • 数据库造神计划第六天---增删改查(CRUD)(2)
  • AI 赋能内容创作:从文案生成到视频剪辑,创作者的工具革命已至
  • 如何使用“线程级微内核架构”打造应用
  • [硬件电路-219]:自由电子与空穴导电的比较(异同)
  • 系统编程完结整理
  • 阿里云视觉多模态理解大模型开发训练部署
  • leetcode_21 合并两个有序链表
  • Node.js实时截屏实现方案
  • 01数据结构-01背包问题
  • 20250914-01: Langchain概念:流式传输(Streaming)
  • 初步认识 Spring Boot 自动装配
  • 《突破Unity+腾讯云联机瓶颈:多人游戏同步延迟与数据安全的双维度优化》
  • 计算机算术9-浮点乘法
  • 第24课:项目实战与总结
  • 【深度学习|学习笔记】从背景→公式→性质→梯度→何时用哪一个→数值稳定性与常见坑方面描述sigmoid和softmax函数!(一)
  • C++宽度优先搜索算法:队列与优先级队列
  • 同步降压转换器原理