W25M02_W25N01中文版+原版芯片手册
只捡了一些我写代码用得上的部分翻译了大概70%中文。
W25M02由两片W25N01GV叠加组成
每个 W25N01GV 有 128M 字节,用写命令(C2h)选择使用那一片。
标准 SPI 指令使用单向 DI(输入)引脚将指令、地址或数据串行写入串行时钟(CLK)输入引脚上升沿上的设备 标准 SPI 还使用单向 DO(输出)来从 CLK 下降沿上的设备读取数据或状态。
标准 SPI 说明 W25M02GV 通过 SPI 兼容总线访问,该总线由四个信号组成: 串行时钟(CLK)、芯片选择(/CS)、串行数据输入(DI)和串行数据输出(DO)。
标准 SPI 指令使用 DI 输入引脚串行地将指令、地址或数据写入 CLK 上升沿上的设备。 DO 输出引脚用于从 CLK 下降沿上的设备读取数据或状态。 支持 SPI 总线操作模式 0(0,0)和 3(1,1)。
模式 0 和模式 3 之间的主要区别在于当 SPI 总线主机处于待机状态且数据未传输到串行闪存时,CLK 信号的正常状态。 对于模式 0,CLK 信号在/CS 的下降和上升边缘通常较低。 对于模式 3,CLK 信号通常在/CS 的下降和上升沿高。
为每个堆叠的 W25N01GV 模具提供三个状态寄存器: 保护寄存器(SR-1)、配置寄存器(SR-2)和状态寄存器(SR-3)。 每个寄存器分别由读状态寄存器和写状态寄存器命令结合 1 字节寄存器地址访问。
读取状态寄存器指令(05h/0Fh)可用于提供有关闪存阵列可用性的状态, 无论设备是写启用还是禁用、写入保护状态、读取模式、保护寄存器/OTP 区域锁定状态、擦除/程序结果、ECC 使用/状态。 写入状态寄存器指令可用于配置设备写保护功能、软件/硬件写入保护、读取模式、启用/禁用 ECC、保护寄存器/OTP 区域锁定。 对状态寄存器的写入访问由非易失性状态寄存器保护位(SRP0,SRP1)的状态控制,写启用指令,当 WP-E 设置为 1 时,由/WP 引 脚控制。
4.4写保护脚(/WP) 写保护(/WP)引脚可用于防止写入状态寄存器。 与状态寄存器的块保护位 BP[3:0]和状态寄存器 Protect SRP bits SRP[1:0]一起使用时,小到 256K 字节(2x128KB 块)或最多整个 内存阵列的一部分都可以受到硬件保护。 保护寄存器(SR-1)中的 WP-E 位控制/WP 引脚的功能。 当 WP-E=0 时,设备处于软件保护模式,只有 SR-1 可以被保护。 /WP 引脚作为四重 SPI 操作的数据输入/输出引脚,以及用于 SR-1 写保护功能的有源低输入引脚。 有关详细信息,请参阅第 7.1.3 节。
当 WP-E=1 时,设备处于硬件保护模式,即/WP 成为整个设备写保护的专用有源低输入引脚。 如果/WP 连接到 GND,则所有“写入/编程/擦除”功能都将被禁用。 整个设备(包括所有寄存器、内存阵列、OTP 页)将变为只读。 当 WP-E 设置为 1 时,Quad SPI read 操作也被禁用。
4.5保持脚(/保持) 在标准和双 SPI 操作期间,/HOLD 引脚允许设备在活动选择时暂停。 当(/HOLD)低时,/CS 低时,DO 引脚将处于高阻抗状态,DI 和 CLK 引脚上的信号将被忽略(无所谓)。 当(/HOLD)被调高时,设备操作可以恢复。 当多个设备共享相同的 SPI 信号时,(/HOLD)函数非常有用。 (/HOLD)引脚处于低激活状态。 当发出 Quad SPI Read/Buffer Load 命令时,(/HOLD)pin 将成为 Quad 操作的数据 I/O pin,并且在当前 Quad 操作完成之前没 有可用的 HOLD 函数。 (/HOLD)(IO3)必须由主机驱动高电平,或者必须在 PCB 上放置一个外部上拉电阻器,以避免/HOLD 输入浮动。
7.1.1块保护位(BP3、BP2、BP1、BP0、TB)–易失性可写,OTP可锁定
块保护位(BP3、BP2、BP1、BP0 和 TB)是状态寄存器 1(S6、S5、S4、S3 和 S2)中的易失性读/写位,提供写保护控制和状态。 块保护位可以使用写入状态寄存器指令进行设置。内存阵列的所有、无或一部分都可以受到程序和擦除指令的保护(请参阅状态寄存器内存保护表)。 块保护位的默认值在通电后为 1,以保护整个阵列。 需要清零这些保护位才能进行擦除操作和编程操作(写入数据操作) 如果配置寄存器(SR-2)中的 SR1-L 位设置为 1,则默认值为 OTP 锁定的值。
7.1.2写保护启用位(WP-E)–易失性可写,OTP可锁定
写保护启用位(WP-E)是状态寄存器 1(S1)中的易失性读/写位。 WP-E 位与 SRP1 和 SRP0 一起控制写保护的方法: 软件保护,硬件保护、电源锁定或一次性可编程(OTP)保护、/WP 引脚功能和四重 SPI 操作启用/禁用。 当 WP-E=0(默认值)时,设备处于软件保护模式,/WP&/HOLD 管脚被多路复用为 IO 管脚,并且四路程序/读取功能一直处于启 用状态。 当 WP-E 设置为 1 时,设备处于硬件保护模式,所有四元功能被禁用,/WP&/HOLD 引脚成为专用控制输入引脚
7.1.3状态寄存器保护位(SRP1、SRP0)–易失性可写,OTP可锁定
状态寄存器保护位(SRP1 和 SRP0)是状态寄存器(S0 和 S7)中的易失性读/写位。 SRP 位控制写保护的方法:软件保护,硬件保护,电源锁定或一次性可编程(OTP)保护。
7.2.1一次性程序锁定位(OTP-L)–OTP可锁定
除了主内存阵列之外,W25M02GV 还为系统提供了一个 OTP 区域,用于存储一旦锁定就无法更改的关键数据。 OTP 区域由 10 页组成,每页 2112 字节。 OTP 区域中的默认数据是 FFh。 只能向 OTP 区域发出程序命令,将数据从“1”更改为“0”,并且数据不能通过 Erase 命令可逆(“0”到“1”)。 一旦正确的数据被编程和验证,系统开发人员可以将 OTP-L 位设置为1,这样整个 OTP 区域将被锁定,以防止对数据的进一步修改。
7.2.2进入OTP访问模式位(OTP-E)–易失性可写
OTP-E 位必须设置为 1,以便使用标准程序/读取命令访问 OTP 区域以及读取唯一的 ID/参数页信息。 通电命令后的默认值为 0 或复位。
7.2.3状态寄存器-1锁定位(SR1-L)–OTP可锁定
SR1-L 锁定位用于 OTP 锁定保护寄存器(SR-1)中的值。 根据 SR-1 中的设置,可以将设备配置为对整个阵列进行写保护,并且可以通过将 SR1-L 位设置为 1 来锁定设置。 当 SRP1 和 SRP0 设置为(1,1)时,SR1-L 位只能永久设置为 1,并且必须进入 OTP 访问模式(OTP-E=1)才能执行编程。详见 8.2.26。
7.2.4ECC启用位(ECC-E)–易失性可写
W25M02GV 有一个内置的 ECC 算法,可以用来保持数据的完整性。 内部 ECC 计算在页面编程期间完成,结果存储在每个页面的额外 64 字节区域中。 在数据读取操作期间,ECC 引擎将根据先前存储的 ECC 信息验证数据值,并在需要时进行必要的更正。 验证和校正状态由 ECC 状态位指示。 ECC 功能在开机时默认启用(ECC-E=1),并且不会通过设备重置命令将其重置为 0。
7.2.5缓冲区读取/连续读取模式位(BUF)-易失性可写
每个堆叠的 W25N01GV 芯片为读取操作提供两种不同的模式,缓冲区读取模式(BUF=1)和连续读取模式(BUF=0)。 在任何读取操作之前,需要一个页面数据读取命令来启动从内存数组中的指定页到数据缓冲区的数据传输。 默认情况下,通电后,第 0 页中的数据将自动加载到数据缓冲区中,设备已准备好接受任何读取命令。
缓冲区读取模式(BUF=1)需要一个列地址来开始输出数据缓冲区内的现有数据, 一旦到达数据缓冲区(字节 2111)的末尾,DO(IO1)引脚将变为 high-Z 状态。 连续读取模式(BUF=0)不需要起始列地址。 设备将始终从数据缓冲区的第一列(字节 0)开始输出数据, 一旦到达数据缓冲区(字节 2048)的末尾,数据输出将继续通过下一个内存页。 在连续读取模式下,可以使用单个读取命令读取整个内存阵列。 关于不同读取模式下每个读取命令的虚拟循环要求,请参考各自的命令说明。 对于 W25M02GVxxIG 零件号,两个堆叠模具通电后 BUF 位的默认值为 1。 BUF 位可以单独写入状态寄存器 2 中的 0,以执行连续读取操作。 对于 W25M02GVxxIT 零件号,两个堆叠模具通电后 BUF 位的默认值为 0。 BUF 位可以单独写入状态寄存器 2 中的 1,以执行缓冲区读取操作。
7.3.1查找表已满(LUT-F)-仅状态
为了方便 NAND 闪存坏块管理,每个堆叠的 W25N01GV 芯片都配备了内部坏块管理查找表(BBM LUT)。 一个好的内存块可以替换多达 20 个坏内存块。 块的地址作为逻辑块地址(LBA,坏块)和物理块地址(PBA,good 块)存储在内部查找表中。 LUT-F 位指示 20 个存储器块链路是否已被充分利用。 LUT-F 的默认值为 0,一旦全部 20 个链路都被使用, LUT-F 将变为 1,并且不可能建立更多的存储块链路。
7.3.2累计ECC状态(ECC-1、ECC-0)-仅状态
在 NAND 闪存中使用 ECC 功能来纠正读取操作中的有限内存错误。 读取操作完成后,应检查 ECC 状态位(ECC-1、ECC-0),以验证数据的完整性。 如果 ECC-E=0,ECC 状态位值不重要。 在通电循环或复位命令后,这些位将被清除为 0。
ECC-1=0 | ECC-0=0 | 整个数据输出成功,无需任何 ECC 校正。 | ECC-1=0 | ECC-0=1 | 整个数据输出成功,单页或多页中有 1~4 位/页 ECC 校正。 | ECC-1=1 | ECC-0=0 | 整个数据输出仅在单个页面中包含超过 4 位的错误,ECC 无法修复这些错误。 |
|
| 在连续读取模式下,可以使用附加命令来读取出现错误的页地址(PA)。 | ECC-1=1 | ECC-0=1 | 整个数据输出在多个页面中包含超过 4 位的错误/页。(仅适用于连续读取操作(BUF=0)) |
在连续读取模式下,附加命令只能提供发生故障的最后一页地址(PA), 用户无法获取其他失败页面的 PA。数据不适合使用。
7.3.3程序/擦除失败(P-失败,E-失败)-仅状态
程序/擦除失败位用于指示内部控制的程序/擦除操作是否成功执行。 当向锁定或受保护的存储器阵列或 OTP 区域发出程序或擦除命令时,这些位也将被分别设置。 在程序执行或块擦除指令以及设备复位指令开始时,这两个位都将被清除。
7.3.4写入启用闩锁(WEL)–仅状态
写启用闩锁(WEL)是状态寄存器(S1)中的一个只读位,在执行写启用指令后被设置为 1。 当设备被禁用写入时,WEL 状态位被清除为 0。 写入禁用状态在通电时或以下任何指令之后发生: OTP 页的写禁用、程序执行、块擦除、页数据读取、程序执行和坏块管理。
7.3.5擦除/程序进行中(BUSY(忙))-仅状态
BUSY 是状态寄存器(S0)中的只读位, 当设备通电或执行页面数据读取、坏块管理、程序执行、块擦除、OTP 区域的程序执行、 OTP 锁定或连续读取指令之后,该位被设置为 1 状态。 在此期间,设备将忽略除读取状态寄存器和读取 JEDEC ID 指令以外的其他指令。 当程序、擦除或写入状态寄存器指令完成时,忙位将被清除 到 0 状态,指示设备已准备好接受进一步的指令。
总结 1、输出指定从设备输出的数据。 2、字节地址或列地址(CA)只需要 CA[11:0],CA[15:12]被视为伪位。 3、页地址(PA)需要 16 位。 PA[15:6]是 128KB 块的地址(共 1024 个块),PA[5:0]是 2KB 页的地址(每个块总共 64 页)。 4、逻辑和物理块地址(LBA 和 PBA)都由 16 位组成。 LBA[9:0]和 PBA[9:0]是有效的块地址。[14:15]用于补充信息。 5、状态寄存器地址: 状态寄存器 1/保护寄存器:Addr=Axh 状态寄存器 2/配置寄存器:Addr=Bxh 状态寄存器3/状态寄存器:Addr=Cxh 10、当保护寄存器中的 WP-E 位设置为 1 时,所有四元程序/读取命令被禁用。 11、对于连续读取模式下的所有读取操作,一旦/CS 信号被调高以终止读取操作,设备仍将保持忙碌状态~5us(busy=1),并且数据 缓冲区内的所有数据都将丢失,无法可靠使用。 必须发出新的页数据读取指令,才能将正确的页数据重新加载到数据缓冲区中。 12、对于缓冲区读取模式下的所有读取操作,一旦/CS 信号变为高以终止读取操作,设备将准备好接受新的指令,并且数据缓冲区内 的所有数据将与上一页数据读取指令保持不变。
BUF==1 时 指令大同小异
8.2.1软件模具选择(C2h)
每个叠层模具都有工厂预先指定的“模具 ID”,顺序为 0x00、0x01 等。 在任何给定的时间,W25M 包内只能有一个活动的模具,用于与外部 SPI 控制器通信。 通电后,模具 0 始终为活动模具。 软件模具选择(C2h)指令用于根据图 4 所示 C2h 指令后的 8 位模具 ID 选择要激活的特定模具。
“并行操作”可以通过分配当前活动的模具来执行需要一定时间才能完成的擦除/程序操作来实现。 当内部程序/擦除操作正在进行时,控制器可以发出“软件模具选择(C2h)”指令来选择另一个要激活的模具。 根据系统要求,可以在新选择的活动模具上执行读取、编程或擦除操作。 “边读边程序/擦除”或“多芯片程序/擦除”可以以这种方式执行,以提高系统程序/擦除吞吐量,并避免在某些应用程序中持续的 程序/擦除挂起和恢复活动。
在设备加电和复位期间,建议不要发出“软件模具选择(C2h)”命令,以避免设备可能的未知状态。 最小 tVSL(见第 56 页)和最大 tRST(见第 60 页)值可分别应用于“软件模具选择(C2h)”命令。
如果发送到设备的模具 ID 错误,则两个堆叠的 W25N01GV 模具都可能闲置。 在这种情况下,应发出一个新的“软件模具选择(C2h)”命令, 后跟正确的模具 ID(0x00 或 0x01),以重新选择激活的模具。
8.2.2设备复位(FFh)
由于封装小,引脚数量有限,W25M02GV 提供软件复位指令,而不是专用复位引脚。 一旦复位指令被接受,任何正在进行的内部操作都将被终止,设备将返回其默认上电状态,并丢失所有当前易失性设置,例如易失性 状态寄存器位。 一旦设备接受复位命令,设备将需要大约 tRST 来复位,根据设备正在执行的当前操作,tRST 可以是 5us~500us。 在此期间,不接受任何命令。 此外,“软件模具选择(C2h)”不应在最大 tRST(500us)时间段内发出,以避免由于模具的重置状态而导致的模具选择混乱。 当设备接受复位命令序列时,如果正在进行内部擦除或程序操作,则可能会发生数据损坏。 建议在发出复位命令之前检查状态寄存器中的忙位。
通电和设备复位后状态寄存器的默认值
8.2.3读取JEDECID(9Fh)
Read JEDEC ID 指令与 2003 年采用的 SPI 兼容串行存储器 JEDEC 标准兼容。 该指令通过驱动/CS 引脚低并移动指令代码“9Fh”和 8 个假时钟来启动。 然后,JEDEC 为 Winbond(EFh)分配的制造商 ID 字节和两个设备 ID 字节在 CLK 的下降沿移出,首先是最有效位(MSB),如图 6 所示。有关存储器类型和容量值,请参阅制造商和设备标识表。 8.2.4读取状态寄存器(0Fh/05h)
读取状态寄存器指令允许读取 8 位状态寄存器。 该指令通过驱动/CS low,并将指令代码“0Fh 或 05h”移到 CLK 上升沿上的 DI 引脚中,然后是一个 8 位状态寄存器地址。 然后状态寄存器位在 CLK 下降沿的 DO 引脚上移出,首先是最有效位(MSB),如图 7 所示。 状态寄存器说明见第 7.1-3 节。
读取状态寄存器指令可在任何时候使用,即使在程序或擦除周期正在进行时也是如此。 这允许检查忙状态位以确定周期何时完成以及设备是否可以接受另一条指令。 状态寄存器可以连续读取。 指令通过驾驶/CS 高速来完成。
8.2.5写入状态寄存器(1Fh/01h)
写入状态寄存器指令允许写入状态寄存器。 可写状态寄存器位包括: 状态寄存器 1 中的 SRP[1:0]、TB、BP[3:0]和 WP-E 位; 状态寄存器 2 中的 OTP-L、OTP-E、SR1-L、ECC-E 和BUF 位。
所有其他状态寄存器位位置都是只读的,不受写入状态寄存器指令的影响。 要写入状态寄存器位,输入指令的方法是:驱动/CS low,发送指令代码“1Fh 或 01h”,然后发送 8 位状态寄存器地址,然后写入状 态寄存器数据字节,如图 8 所示。 状态寄存器说明见第 7.1-3 节。 通电后,BP[3:0]、TB、ECC-E 位的出厂默认值为 1,其他位为 0。
8.2.6写启用(06h)
写启用指令(图 9)将状态寄存器中的写启用闩锁(WEL)位设置为 1。 WEL 位必须在每个页面程序、四页程序、块擦除和坏块管理指令之前设置。 写入使能指令通过驱动/CS low 输入,将指令代码“06h”移入 CLK 上升沿的数据输入(DI)引脚,然后驱动/CS high。
8.2.7写禁用(04h)
写禁用指令(图 10)将状态寄存器中的写启用闩锁(WEL)位重置为 0。 通过驱动/CS low,将指令代码“04h”移到 DI pin,然后驱动/CS high,输入写禁用指令。 请注意,WEL 位在通电后以及页面程序、四页程序、块擦除、重置和坏块管理指令完成后自动重置。 8.2.8坏块管理(A1h)
由于 NAND 内存密度大,且受技术限制,在出厂测试中发现一定数量的“坏块”时,NAND 内存设备允许运往最终客户。 装运时,多达 2%的内存块可标记为“坏块”,这是每个堆叠的 W25N01GV 模具最多 20 块。 为了识别这些坏块,建议扫描整个内存阵列以查找出厂时设置的坏块标记。 “坏块标记”是存储在每个坏块的第 0 页字节 0 处的非 FFh 数据字节。 另一个标记也存储在 64 字节备用区域的第一个字节中。
W25M02GV 提供了一种方便的方法来管理 NAND 闪存中在大量使用后通常发现的坏块。 “坏块管理”命令是通过将指令代码“A1h”移到 DI 管脚,然后是 16 位“逻辑块地址”和16 位“物理块地址”,如图 11 所示。 在设备接受坏块管理指令之前,必须执行写启用指令(状态寄存器位 WEL=1)。 逻辑块地址是“坏”块的地址,它将被物理块地址指示的“好”块替换。
成功执行坏块管理命令后,指定的 LBA-PBA 链接将添加到内部查找表(LUT)。 在非易失性 LUT 中可以建立多达 20 个链路。 如果所有 20 条链路都已写入,状态寄存器中的 LUT-F 位将变为 1,并且不能再建立 LBA-PBA 链路。 因此,在发出坏块管理命令之前,可以检查 LUT-F 位值,或者可以发出“阅读BBM 查找表”命令来确认 LUT 中是否仍然有备用链路
为了保证前 1000 个块上的连续读取操作,制造商可能使用了一些 BBM LUT 入场权。 建议用户在第一次擦除/程序操作之前扫描所有块并保存所有制造商坏块的表。 禁止在多个 PBA 中注册同一地址。它可能导致意外行为。
8.2.9读取BBM查找表(A5h)
内部查找表(LUT)由 20 个逻辑物理内存块链接组成(从 LBA0/PBA0 到 LBA19/PBA19)。 “阅读 BBM 查找表”命令可用于检查存储在 LUT 中的现有地址链接。
“读取 BBM 查找表”命令通过将指令代码“A5h”移入 DI 引脚,然后是 8 位虚拟时钟,在第 16 个时钟的下降沿,设备将开始输出 16 位“逻辑块地址”和 16 位“物理块地址”,如图 12 所示。 所有块地址链路将从 LUT 中的第一个链路(LBA0 和 PBA0)开始按顺序输出。 如果有未使用的可用链接,输出将包含所有“00h”数据。
每个链路的 MSB 位 LBA[15:14]用于指示链路的状态。
为了更好地管理数据完整性,W25M02GV 对整个内存阵列执行内部 ECC 校正。 当状态/配置寄存器中的 ECC-E 位设置为 1(也是加电默认值)时,所有程序和读取操作都启用内部 ECC 算法。 在特定页面的“程序执行”命令期间,ECC 算法将根据 2K 字节数据缓冲区内的数据计算 ECC 信息,并将 ECC 数据写入同一物理内存 页中额外的 64 字节 ECC 区域。
在读取操作期间,ECC 信息将用于验证从物理内存阵列中读取的数据,并且可以对包含错误的有限数量的数据位进行可能的更正。 ECC 状态位(ECC-1 和 ECC-0)也将被设置,指示 ECC 计算的结果。
对于“连续读取模式(BUF=0)”操作,可以通过发出单个读取命令连续读取多页主阵列数据。 在完成读取操作后,应检查 ECC 状态位,以验证读取的数据中是否存在 ECC 校正或不可纠正的错误。 如果 ECC-1 和 ECC-0 等于(1,0)或(1,1),则以前读取的数据包含一个或多个包含 ECC 不可纠正错误的页。 可以通过发出“上次 ECC 失败页地址”命令获得失败页面地址(如果是多个页面,则为最后一个页面地址),如图 13 所示。 包含不可纠正 ECC 错误的 16 位页地址将显示在指令代码“A9h”之后的 DO 引脚上,DI 引脚上的 8 位虚拟时钟之后。
128KB 块擦除指令将指定块(64 页,128K 字节)中的所有内存设置为所有 1(FFh)的已擦除状态。 在设备接受块擦除指令(状态寄存器位 WEL 必须等于 1)之前,必须执行写启用指令。 该指令通过驱动/CS 引脚低,并移动指令代码“D8h”,然后是 8 位虚拟时钟和 16 位页地址来启动。 块擦除指令序列如图 14 所示。
在锁存最后一个字节的第八位之后,/CS 引脚必须被驱动到高位。 如果不这样做,将不执行块擦除指令。 在/CS 被驱动为高电平后,自定时块擦除指令将在 tBE 的持续时间内开始(参见交流特性)。 当块擦除周期正在进行时,仍可以访问读取状态寄存器指令以检查忙位的状态。 在块擦除周期中,忙位为 1,当周期结束且设备准备再次接受其他指令时,忙位变为 0。 块擦除周期完成后,状态寄存器中的写入启用闩锁(WEL)位被清除为 0。 如果寻址块受块保护(TB、BP2、BP1 和 BP0)位保护,则不会执行块擦除指令。
这里虽然用的是页地址,擦除擦除时还是按块擦除,即 64 页的数据都擦除。 这使得数据不好进行修改操作,这是这个 IC 的缺点。 另一个缺点就是存在坏块,所以需要坏块管理。 有人建议使用前把全部块测试一遍,我把 65536*2 个页面都测试了一遍,我这个 IC 没有发现坏块。
8.2.12加载程序数据(02h)/随机加载程序数据(84h)
程序操作允许在先前擦除的(FFh)内存位置对 1 字节到 2112 字节(一页)的数据进行编程。 程序操作包括两个步骤: 1 将程序数据加载到数据缓冲区。 2 发出“程序执行”命令将数据从数据缓冲区传输到指定的内存页。
在设备接受加载程序数据指令(状态寄存器位 WEL=1)之前,必须执行写启用指令。 “加载程序数据”或“随机加载程序数据”指令是通过驱动/CS 引脚低,然后将指令代码“02h”或“84h”后接 16 位列地址(只有 CA[11:0]有效)和至少一个字节的数据转移到 DI 管脚来启动。 当数据被发送到设备时,/CS 引脚在整个指令长度内必须保持在低位。 如果发送到设备的数据字节数超过数据缓冲区中的数据字节数,设备将忽略多余的数据。 加载程序数据指令序列如图 15 所示。
“加载程序数据”和“随机加载程序数据”指令共享相同的命令序列。 不同的是,“加载程序数据”指令会将数据缓冲区中未使用的数据字节重置为 FFh 值,而“随机加载程序数据”指令只更新命令输入 序列指定的数据字节,其余数据缓冲区将保持不变。
如果 ECC 算法中的所有字节都被 ECC 指定为 21 字节,则 ECC 将接受额外字节的计算。 如果 ECC-E 位设置为 0 以禁用内部 ECC,则额外的 64 字节部分可用于外部 ECC 或其他用途。
8.2.13QuadLoadProgramData(32h)/QuadRandomLoadProgramData(34h)(我用不上,没有翻译)
8.2.14程序执行(10h)
程序执行指令是程序操作的第二步。 在程序数据加载到 2112 字节数据缓冲区(或在启用 ECC 时为 2048 字节)后,程序执行指令将数据缓冲区内容编程到指令中指定的 物理内存页中。 该指令通过驱动/CS 引脚低,然后将指令代码“10h”,随后是 8 位虚拟时钟和 16 位页面地址转移到 DI pin,如图 17 所示。
在/CS 被驱动到高电平以完成指令周期后,自定时程序执行指令将在 tpp 的持续时间内开始(参见 AC 特性)。 当程序执行周期正在进行时,读取状态寄存器指令仍可用于检查忙位的状态。 在程序执行周期中,忙位为 1,当周期结束且设备准备再次接受其他指令时,忙位变为 0。 程序执行周期结束后,状态寄存器中的写入启用闩锁(WEL)位被清除为 0。 如果寻址页受块保护(TB、BP2、BP1 和 BP0)位保护,则不会执行程序执行指令。 每一页只允许 4 个部分页面程序时间。
块内的页必须按顺序从低阶页地址编程到块内的高阶页地址。 禁止无序编程页面。
8.2.15页面数据读取(13h)
页数据读取指令将指定内存页的数据传输到 2112 字节的数据缓冲区。 该指令通过驱动/CS 引脚低,然后将指令代码“13h”,随后是 8 位虚拟时钟和 16 位页面地址转移到 DI pin,如图 18 所示。
在/CS 被驱动到高电平以完成指令周期后,自定时读页数据指令将在 tRD 的持续时间内开始(见交流特性)。 当读取页数据循环正在进行时,读取状态寄存器指令仍可用于检查忙位的状态。 在读页数据循环期间,忙位为 1,当周期结束且设备准备再次接受其他指令时,忙位变为 0。
在 2112 字节的页数据加载到数据缓冲区后,可以发出多个读取指令来访问数据缓冲区并读出数据。 根据状态寄存器中的 BUF 位设置,可以使用“缓冲区读取模式”或“连续读取模式”来完成读取操作。
8.2.16读取数据(03h)
读取数据指令允许在执行读取页数据指令之后从数据缓冲区顺序读取一个或多个数据字节。 读取数据指令通过驱动/CS 引脚低,然后将指令代码“03h”,随后是 16 位列地址和 8 位假时钟或 24 位假时钟移入 DI pin 来启动。 在接收到地址后,地址数据缓冲区位置的数据字节将在 CLK 下降沿的 DO 引脚上移出,最有效位(MSB)优先。 在数据的每个字节被移出后,地址会自动递增到下一个更高的地址,以允许连续的数据流。 指令通过驾驶/CS 高速来完成。
读取数据指令序列如图 19a 和 19b 所示。当 BUF=1 时,设备处于缓冲区读取模式。 数据输出序列将从 16 位列地址指定的数据缓冲区位置开始,一直到数据缓冲区的末尾。 一旦数据的最后一个字节被输出,输出引脚将变成 Hi-Z 状态。 当 BUF=0 时,设备处于连续读取模式,数据输出序列将从数据缓冲区的第一个字节开始,并递增到下一个更高的地址。 当到达数据缓冲区的末尾时,下一个内存页的第一个字节的数据将跟随并继续贯穿整个内存数组。 这允许使用单个读取指令读取整个内存阵列,并且还兼容 Winbond 的 SpiFlash NOR flash memory 命令序列。
快速读取指令通过驱动/CS 引脚低,然后将指令代码“0Bh”以及 16 位列地址和 8 位假时钟或 32 位假时钟转移到 DI 引脚来启动。 在接收到地址后,地址数据缓冲区位置的数据字节将在 CLK 下降沿的 DO 引脚上移出,最有效位(MSB)优先。 在数据的每个字节被移出后,地址会自动递增到下一个更高的地址,以允许连续的数据流。 指令通过驾驶/CS 高速来完成。
快速读取指令序列如图 20a 和 20b 所示。 当 BUF=1 时,设备处于缓冲区读取模式。 数据输出序列将从 16 位列地址指定的数据缓冲区位置开始,一直到数据缓冲区的末尾。 一旦数据的最后一个字节被输出,输出引脚将变成 Hi-Z 状态。 当 BUF=0 时,设备处于连续读取模式,数据输出序列将从数据缓冲区的第一个字节开始,并递增到下一个更高的地址。 当到达数据缓冲区的末尾时,下一个内存页的第一个字节的数据将跟随并继续贯穿整个内存数组。 这允许使用单个读取指令读取整个内存阵列,并且还兼容 Winbond 的 SpiFlash NOR flash memory 命令序列。
快速读取指令是通过驱动/CS 引脚低,然后将指令代码“0Ch”,然后将 16 位列地址和 24 位假时钟(当 BUF=1)或 40 位假时钟(BUF=0 时)移入 DI 引脚来启动。 在接收到地址后,地址数据缓冲区位置的数据字节将在 CLK 下降沿的 DO 引脚上移出,最有效位(MSB)优先。 在数据的每个字节被移出后,地址会自动递增到下一个更高的地址,以允许连续的数据流。 指令通过驾驶/CS 高速来完成。
快速读取指令序列如图 21a 和 21b 所示。当 BUF=1 时,设备处于缓冲区读取模式。 数据输出序列将从 16 位列地址指定的数据缓冲区位置开始,一直到数据缓冲区的末尾。 一旦数据的最后一个字节被输出,输出引脚将变成 Hi-Z 状态。 当 BUF=0 时,设备处于连续读取模式,数据输出序列将从数据缓冲区的第一个字节开始,并递增到下一个更高的地址。 当到达数据缓冲区的末尾时,下一个内存页的第一个字节的数据将跟随并继续贯穿整个内存数组。 这允许使用单个读取指令读取整个内存阵列,并且还兼容 Winbond 的 SpiFlash NOR flash memory 命令序列。
除了主存储器阵列外,每个堆叠的 W25N01GV 模具还配有一个唯一的 ID 页、一个参数页和十个 OTP 页
要访问这些附加数据页,必须首先将状态寄存器 2 中的 OTP-E 位设置为“1”。 然后,可以在唯一 ID 和参数页上执行读取操作,如果 OTP 页尚未锁定,则可以在 OTP 页上执行读取和程序操作。 要返回到主存储器阵列操作,OTP-E 位需要设置为 0。
读取操作必须发出“页面数据读取”命令,后跟上表中所示的特定页面地址,才能将页面数据加载到主数据缓冲区中。 在设备完成数据加载(BUSY=0)之后,所有的 Read 命令都可以用来从任何指定的列地址开始读取数据缓冲区。 请注意,无论之前的 BUF 位设置如何,所有读命令现在都必须遵循“缓冲区读取模式”命令结构(CA[15:0],虚拟时钟的数量)。 还可以为 OTP 页读取操作启用 ECC,以确保数据的完整性。
程序和OTP锁定操作 OTP 页提供额外的空间(2K 字节 x10)来存储重要的数据或安全信息, 这些数据或安全信息可以被锁定以防止在字段中进行进一步修改。
这些 OTP 页面处于出厂设置的擦除状态,并且只能编程(将数据从“1”更改为“0”),直到被配置/状态寄存器 2 中的 OTP-L 位锁定。 必须首先将 OTP-E 设置为“1”以允许访问这些OTP 页,然后必须使用任何“程序数据加载”命令将程序数据加载到主数据缓冲区。 “程序执行”命令后跟特定的 OTP 页地址,用于启动从数据缓冲区到 OTP 页的数据传输。 当启用 ECC 时,ECC 计算将在“程序执行”期间执行,ECC 信息将存储在 64 字节的备用区域中。
一旦 OTP 页面被正确编程,OTP-L 位可用于永久锁定这些页面,因此无法进行进一步的修改。 当仍处于“OTP 访问模式”(OTP-E=1)时,用户需要将配置/状态寄存器 2 中的 OTP-L 位设置为“1”,并发出“程序执行”命令(页 面地址为“无所谓”)。 在设备完成 OTP 锁定设置(BUSY=0)后,用户可以将 OTP-E 设置为“0”,以返回到主存储器阵列操作。
SR1-LOTP锁定操作 保护/状态寄存器-1 包含保护位,可设置为保护部分或整个内存阵列不被编程/擦除,或将设备设置为软件写入保护(WP-E=0)或硬 件写入保护(WP-E=1)。 一旦 BP[3:0],TB,WP-E 位设置正确,SRP1 和 SRP0 也应设置为“1”,以允许将 SR1-L 位设置为“1”,以永久锁定状态寄存器 1 (SR1)中的保护设置。 与上面的 OTP-L 设置过程类似,为了设置 SR1-L 锁位,设备必须首先进入“OTP 访问模式”(OTP-E=1),在“程序执行”命令之前, SR1-L 位应设置为“1”(页面地址为“无所谓”)。 一旦 SR1-L 设置为“1”(BUSY=0),用户可以将 OTP-E 设置为“0”以返回到主存储器阵列操作。
8.2.28参数页数据定义
参数页包含 3 个 256 字节参数数据的相同副本。 下表列出了所有关键数据字节的位置。 所有其他未指定的字节位置都默认有 00h 数据。
全部资料51hei下载地址:
W25M02_W25N01中文版 原版(70%中文).rar
(4.45 MB, 下载次数: 60)
|