6 保护命令与特性
6.1 写使能
写使能命令用来把写使能策锁存的 WEL 位写为逻辑“ 1 ”。
在“字节 / 页”写、擦除、保护 sector 、解保护 sector 和写状态寄存器之前,都应该执行写使能命令。
这会被命令的发布实事上分成了两步,这样做是为了减少一个命令被偶然或错误的执行机会。
如果 WEL 位不被设置再先,其它所有的命令均不会被执行。
写使能命令步骤:
(1) 拉低 CS
(2) 写 06H 。不需地址,后续写入的数据被忽略
(3) 拉高 CS
CS 必拉高于 06 传入之后, CS 必须拉高于 8bit 的边界。
6.2 写禁止
写禁止命令用来把写使能策锁存的 WEL 位写为逻辑“ 0 ”。
写禁止命令成功执行后,在“字节 / 页”写、擦除、保护 sector 、解保护 sector 和写状态寄存器等命令均不能执行。
写禁止命令也可用来退出连续写入模式。
(4) 拉低 CS
(5) 写 04H 。不需地址,后续写入的数据被忽略
(6) 拉高 CS (偶地址边界)
6.3 保护 sector
FLASH 设备每个物理 sector 有一个相关的 sector 寄存器保护位,用来控制软件对该 sector 的操作。在设备上电或设备复位后,每个 sector 寄存器保护位将被置为默认的“ 1 ”状态,表明所有的 sector 受到保护,并且不能被写入和擦除。
( 1 )写使能 WEL = 1
( 2 )拉低 CS
( 3 ) 36h
( 4 ) 3 个地址 byte , 如果再传入数据,将被忽略
( 5 )拉高 CS
此时 FLASH 被 A23~A0 指定的 sector 相关保护寄存器被设为“ 1 ”,该 sector 就会被置于写保护之下,同时, WEL 也会被置回为“ 0 ”。
要求:三地址必完整传入, CS 必在三地址传入之后拉高,且拉高于 8bit 的边界。否则,命令不会执行, WEL 也会被置回为“ 0 ”。
作为安全防护的 sector 保护寄存器,本身也受状态寄存器中 SPRL ( Sector Protection Registers Locked )位的保护。如果 sector 保护寄存器被锁定,仍何企图执行 sector 保护的命令将被忽略,且 WEL 将被重置为“ 0 ”, CS 拉高后, FLASH 返回 IDLE 状态。
6.4 sector 解锁
执行解 sector 命令是为了复位相关 sector 的保护寄存器位(复位为 0 )。每个物理 sector 都有一个相关的寄存器位来控制软件对该 sector 的控制。
( 1 )写使能 WEL = 1
( 2 )拉低 CS
( 3 ) 39h
( 4 ) 3 个地址 byte , 如果再传入数据,将被忽略
( 5 )拉高 CS
此时 FLASH 被 A23~A0 指定的 sector 相关保护寄存器被设为“ 0 ”,该 sector 就被解保护,同时, WEL 也会被置回为“ 0 ”。
要求:三地址必完整传入, CS 必在三地址传入之后拉高,且拉高于 8bit 的边界。否则,命令不会执行, WEL 也会被置回为“ 0 ”。
作为安全防护的 sector 保护寄存器,本身也受状态寄存器中 SPRL ( Sector Protection Registers Locked )位的保护。如果 sector 保护寄存器被锁定,仍何企图执行 sector 解保护的命令将被忽略,且 WEL 将被重置为“ 0 ”, CS 拉高后, FLASH 返回 IDLE 状态。
6.5 全部保护 / 解保护
全部加解保护功能可与 sector 保护 / 解保护功能联用。例如,一个系统可以全总保护整个 FLASH ,然后使用 sector 解保护功能单独对某个 sector 执行解保护操作。同样,系统也可以单独保护某个 sector ,全局处于解保护状态。
执行全部加解保护,要写入一个特定结构的联合数据到状态寄存器。当然,要使用写状态寄存器命令。
写状态寄存器命令同时也用来修改 SPRL ( sector 保护寄存器锁)位来控制硬件或软件锁定功能。
为了执行全部加保护,一定要有合适的 WP 引脚状态和 SPRL ,系统必须要写逻辑“ 1 ”到状态寄存器的第 5 、 4 、 3 和 2 位。写“ 0 ”则是相反的解保护,同想的,要有一定要有合适的 WP 引脚状态和 SPRL 。
6.6 读 sector 保护寄存器
Sector 保护标志寄存器可以读出,软件可以据此知道各个 sector 的保护状态。
( 1 )拉低 CS
( 2 ) 3Ch
( 3 ) 3 个地址 byte
( 4 )读返回数据 00 解锁状态 FF 锁定状态
( 4 )拉高 CS
除了读取单独 sector 保护寄存器之外,也可以读取状态寄存器中的软件保护状态( SWP )位,来判断是否所有的、部分的或没有 sector 处于软件保护之下。
6.7 保护状态与写保护引脚( WP )
WP 引脚没有与存储空间连接在一起,不能直接影响 FLASH 空间的保护状态。然而,它与 SPRL 位关联,则可以控制硬件的锁定机制。
为了激活硬件锁,两个条件一定要满足, WP 引脚一定要 asserted ( = 0 ,拉低 ) , SPRL 位一定要是逻辑“ 0 ”状态。
当硬件锁激活后, sector 保护寄存器被锁定, SPRL 位也被上锁。因此,处于保护状态的 sector 被锁定在保护状态,处于未保护状态的 sector 也被锁定在未保护状态。也就是说,只要硬件锁被激活,这些 sector 的保护状态均不能被改变。因此,保护 sector/ 解保护 sector 和写状态寄存器命令均被忽略。
为了修改一个 sector 的保护状态, WP 引脚必须首先被拉高( =1 Deasserted ),然后用写状态寄存器命令把 SPRL 位重设为“ 0 ”。
如果 GND 引脚被直接接地 GND (拉底为 0 , asserted ),一旦 SPRL 位置为“ 1 ”,只有一个办法可以重置为“ 0 ”,那就是重新上电。这样,允许一个系统上电时对所有的 sector 进行软件保护而不对设备硬件上锁,因此, sector 可以根据需要加解保护,稍后就可以通过简单的设置 SPRL 位执行硬件加锁。
当 WP 引脚被 desserted (拉高为 1 ),或直接连接 VCC , SPRL 位可以设为 1 来锁定 sector 保护寄存器。这样做提供了一个软件锁定能力,可以防止执行 sector 加解保护出现错误。当改变 SPRL 位从 0 到 1 时,才可能执行一个全局加解保护操作(写 5 、 4 、 3 、 2 位)。