8.1 器件ID和指令集表( 二 )


图8a SPI模式下读状态寄存器指令
图8b QPI模式下读状态寄存器指令
8.2.5 写状态寄存器1(0x01),写状态寄存器2(0x31),写状态寄存器3(0x11)指令
写状态寄存器指令允许一些状态寄存器位被写入 。可写入的状态寄存器位包括:SPR0,SEC,TB,BP[2:0](这几个在状态寄存器1中),CMP,LB[3:1],QE,SRP1(这几个在状态寄存器2中),HOLD/RST,DRV1,DRV0,WPS和ADP(这几个在状态寄存器3中) 。所有其他的状态寄存器位是只读的,本指令对这些位没有影响 。LB[3:1]是非易失性的一次性编程位,一旦被设置为1,则无法再改为0 。
在写非易失性状态位之前,需要先发出写使能指令(0x06)以使得器件可以接收写命令(也就是WEL必须等于1) 。写使能指令完成之后,拉低/CS信号,发送0x01/0x31/0x11到器件来执行本指令 。可参见图9a和图9b 。
如果想以易失性方式写这些位,则此处描述的指令发出之前还需要先发出易失性状态寄存器写使能指令(0x50)(状态寄存器中的WEL仍然为0) 。但是,SRP1位和LB[3:1]位在此种情况下也无法从1改成0,因为这些内容是一次性编程保护的 。在掉电之后,或者软件/硬件复位之后,易失性状态寄存器位将会丢失,但非易失性写入的内容将会被保存,不会丢失 。
如果进行非易失性状态寄存器写入(0x06指令跟上0x01/0x31/0x11指令),在/CS信号拉高从而结束指令后,该写入循环还需要持续一段时间t_W(参见AC特性) 。当写状态寄存器循环正在进行时,仍然可以通过读状态寄存器指令来获取BUSY位 。如果BUSY位为1表明该循环仍在进行,如果位0则表示该循环结束,可接受其他指令 。在写状态寄存器循环结束后,注意WEL位将会清0 。
在易失性状态寄存器写操作(0x50指令后跟上0x01/0x31/0x11指令),在/CS拉高之后,状态寄存器会在(参见AC特性)时间内刷新为新的值 。BUSY位在该时间之内也仍然是0 。
写状态寄存器指令既可以在SPI模式下使用也可以在QPI模式下使用 。但是在QPI模式下,QE位不能写入,因为QE=1是器件进入QPI模式和维持QPI操作的必要条件 。
参考7.1节获取状态寄存器的描述 。
图9a SPI模式下的写状态寄存器1/2/3
图9b QPI模式下的写状态寄存器1/2/3
还向前支持公司之前几代的串行Flash存储器,这些存储器的状态寄存器1/2可以用单个的写状态寄存器1(0x01)指令一次性写入 。为了完成写状态寄存器1&2指令,/CS引脚必须在发出指令之后的16个周期后才能置高,参考图9c和图9d 。如果/CS在指令码发出之后第八个周期置高,则写状态寄存器1(01)指令仅仅编程状态寄存器1,状态寄存器2不受影响(前代芯片则会清除CMP和QE位) 。
图9c SPI模式下的写状态寄存器1/2指令
图9d QPI模式下的写状态寄存器1/2指令
8.2.6 读数据(0x03)
读数据指令允许从器件中顺序地读出一至多个字节 。指令使用时先拉低/CS,然后将指令码0x03连同24位地址(A23~A0)通过DI引脚传输到器件中 。指令码和地址位在CLK的上升沿采样 。在地址被器件接收到之后,地址所寻址的数据将会在每个时钟的下降沿在DO引脚上给出,MSb先发送 。在内部,地址会自动递增到下一个字节位置,从而实现连续的数据流 。这意味着整片的存储器可以用单个读指令读出,只要时钟足够多 。该指令通过驱动/CS为高电平来结束 。
读数据指令序列参考图14.如果读数据指令发出时,器件正在执行擦除、编程或者写循环(BUSY=1),则读数据指令会被忽略,当前器件正在进行的操作不会受到影响 。读数据指令允许的时钟速率从直流到最大fR(参考AC电气特性) 。