DataFlash规格书译文(3)--AT26DF081A

5 写与擦除命令

5.1 字节 / 页写

       字节 / 页写命令允许在当前擦除过的存储空间内,从任意地址开始写 1 256 字节数据。一个擦除过的存储空间内,所有的数据位均为“ 1 ”,所有字节均为“ FF ”。

       在开始进行“字节 / 页”写之前,要先发写能命令允许写操作。具体的做法是,设置状态寄存器中的写使能锁( WEL )位为“ 1 ”。

       02 命令 +3 地址字节 + 数据字节。在命令和地址字节时钟传入完成后,数据可以写入并且存到内部缓存中去。

       如果起始地址不落在偶的 256 字节页的边界, ( A7 A0 非全 0) ,这种特殊情况下的存储定位也将被 AT26DF081A 接受。在这种情形下,任何即将超越而边界的数据会绕回来写在该页的开始处。如:从地址 (A23~A0)0x0000FE 处写三个字节,发往 AT26DF081A 的最初两个字节分别写入 0x0000FE 0x0000FF 处,而最后一个字节却被写在 0x000000 处。 0x000001 0x0000FD 处均不受影响。另外,要说明的是,如果写入多于 256 字节的数据,只有最后的 256 字节被锁入内部缓存。

       CS 引脚被拉高后, AT26DF081A 把数据保留在内存缓冲中去,并且依据起始地址( A23 A0 ),把内部缓冲的数据写入相应的物理存储阵列中去。如果写入的数据少于 256 字节,该页内剩余的空间将保持不变。

 

       CS 置高之前,三个地址字节和至少一个数据字节必须发送完成。 CS 引脚必须置高于偶字节边界( 8 位的整数倍)。否则的话, AT26DF081A 会中止操作,不会有数据写入到存储阵列中去。此外,如果地址指向一个受保护的扇区,“字节 / 页”写指令就不会被执行。一旦 CS 拉高, AT26DF081A 就会进入 IDLE 状态。一个不完整的地址、一个不完全的数据字节或者写入区正被保护,在这几种状态下, WEL 位会重新复位为“ 0 ”(保护状态)。

       在写入操作时,需要读状态寄存器以判断 AT26DF081A 是否忙。为了更快的数据吞吐,强列建议采用查询状态寄存器方判断写入是否完成,取代等待 t(pp) 时间判断方法。在某些情况下,写操作周期完成后, WEL 位应重设为逻辑 0 状态。

       当一个字节处写失败时, AT26DF081A 内置一个智能算法可以检测到。如果这种错误出现,立即由状态寄存器的 EPE 位来指明。

       “字节 / 页”写模式是设备上电后或设备复位后默认的状态。

     

5.2 连续写入模式

       在写入到连续存储区域时,连续写入模式可以提供比“字节 / 页”写更高的吞吐量。例如,一些系统由于设计的限制,每次仅写一个字节的信息,不能提供一个页写的缓冲操作。在这种情况下,系统不能正常的对连续的 FLASH 区域进行多字节写入操作。这种日常开销可用 SPI 总线。

 

       连续写模式可以帮助系统减少日常开销和总线通信。它提供一个内部的地址计数器来跟综写入的字节地址,而不需要再提供每个写入 BYTE 的地址。在进入连续写入模式之前,要打开写使能位(置状态寄存器中的 WEL 位为逻辑“ 1 ”状态)。当使用连续写入模式时,所有要被写入的地址空间一定要处于擦除状态。(先被擦除)

       连续写入过程:首次进入连续写入模式

       1 )打开写使能位 WEL = 1

       2 CS 拉低

       3 )发连续写命令“ AD ”或“ AF + 三个地址字节

       4 )写入一个 BYTE 数据

       5 )拉高 CS FLASH 会进行内部的写物理操作(写到 A23 A0 指定的地址)

       在第一个字节成功的写入之后,再次写入

       1 CS 拉低

       2 )发连续写命令“ AD ”或“ AF

       3 )写入一个 BYTE 数据

       4 )拉高 CS FLASH 会进行内部的写物理操作(写到前述 A23 A0 指定的地址下一个地址)

       5 )判忙和失败( EPE

       当最后一个字节写入到 FLASH 阵列后,可按以下步骤取消连续写入模式

       1 CS 拉低

       2 )发 Write Disable 命令(置状态寄存器 WEL 位为逻辑 0

       3 CS 拉高

       4 )判忙和失败( EPE

       在连续写入时,如果每次写入多个数据,只有发送到 SPI 的最后一个 BYTE 保存在 FLASH 的内部锁存器中。每个字节的实际写入时限是由 FLASH 内部定义的,必在 t(BP.) 之内。在每次写周期内,一个完整的 BYTE 必须在 CS 拉高之前发送过来,且 CS 必须在字节的边界( 8bits 的整数倍)处。否则的话, FLASH 将放弃当前的操作,数据无法写入到 FLASH 阵列, WEL 位会被重置为逻辑“ 0 ”状态。

       如果连续写入的地址指向的 sector 处于保护状态,该连续写入指令也不会被执行,一旦 CS 拉高, FLASH 立即进入 IDLE 状态, WEL 位重回为“ 0 ”。      

       连续写入模式没有地址绕回机制,所以,当最后一个地址( 0x0FFFFF )被写入数据后, FLASH 自动退出连续写入模式, WEL 位重回为“ 0 ”。除此之外,连续写入模式不能自动跳过受保护的 sector ,所以,一旦高的未保护的地址写入完成后,当触入到较低的 sector FLASH 将自动退出连续写入模式和复位 WEL 。例如, sector1 是保护 sector sector 0 的最后一个 BYTE 写入完毕后,连续写入模式就会自动停止。为了继续写入 sector2 ,需要重新进入连续写入模式。

       FLASH 正在写入字节时,可以读取状态寄存器的判忙位来判断写入动作是否完成。为了提高数据吞吐能力,可在每次写操作后,强烈建议用读状态寄存器的方式取代等待 t(BP) 时间。这样,一旦写入成功后,不用等待就可以开始下一次写入操作。

       当一个字节处写失败时, AT26DF081A 内置一个智能算法可以检测到。如果这种错误出现,立即由状态寄存器的 EPE 位来指明。


5.3 块擦除

       擦除后的 FLASH sector ,所有的位均为“ 1 ”状态。三种不同的块擦除指令分别用于擦除三种不同大小的块单元。

       1 )命令: 20h   4K 字节 块擦除指令

       2 )命令: 52h   32K 字节 块擦除指令

       3 )命令: D8h   64K 字节 块擦除指令

       擦除之前,要置 WEL 位为“ 1 ”。

       块擦除步骤

(1)       CS 拉低

(2)       发块擦除命令字节

(3)       三个地址字节。 如果再发数据的话,将被忽略

(4)       CS 拉高。 FLASH 开始内部真正执行。 FLASH 内部擦除的时间在 t(BLKE) 内执行完毕。

既然块擦除指令可以擦除一片区域, FLASH 不需要对低位地址进行解码。

       1 )对于 4K 擦除指令,有 12 位地址信息是无关紧要的, A11 A0 无论是 0 1 都会被忽略;

       1 )对于 32K 擦除指令,有 15 位地址信息是无关紧要的, A14 A0 无论是 0 1 都会被忽略;

       1 )对于 64K 擦除指令,有 16 位地址信息是无关紧要的, A15 A0 无论是 0 1 都会被忽略;

       在块擦除时,不论设备是否对这三个地址字节中的低位进行解码,这三个字节一定要被完整的 clocked into FLASH ,并且在 CS 拉高之前,且 CS 必须在字节边界拉高。否则, FLASH 会放弃操作, WEL 被重置为“ 0 ”。如果对被保护的区域执行了擦除指令, WEL 也会被重置为“ 0 ”。

       如果地址字节( A23 A0 )指向的是一个受保护的 sector 。块擦除指令不会被执行,当 CS 拉高时 FLASH 返回 IDLE 状态。

另外,大块擦除时( 32K 64K ),多于一个的物理 sector 可以一次被擦除,这些物理 sector 中,不可以有 sector 处于保护状态。如果真的有处于保护状态的物理 sector ,则块擦除指令被忽略。

       一个不完全的 sector 地址和保护的 sector ,均会在擦除时引起 WEL 重置为“ 0 ”。

       FLASH 成功的执行一个 sector 擦除时,可读状态寄存器中的判忙位来判断是否完成。最好采用这种方式,而不是等待 t(BLKE) 时间。

       在某些擦除周期结束前的时间点, WEL 位会被重置为“ 0 ”。

       也要判断 EPE 位,该位说明了是否擦除错误。

 

5.4 片擦除

       1 )打开写使能        WEL =1

       2 )拉低 CS

       3 60h C7h 指令。两个命令没有区别,可以互换。

       4 )不需地址,发送的数据也会被忽略

       5 )拉高 CS

       全擦除时间为 t(CHPE)

       CS 拉高前,命令字节要完整的传入 FLASH ,则 CS 必要在连界处拉高,否则,命令无效。

       如果有受保护的区域,全擦命令将不能被执行, FLASH 设备会随 CS 拉高而进入 IDEL 状态,同时 WEL 也会被重置为“ 0 ”。

       在某些擦除周期结束前的时间点, WEL 位会被重置为“ 0 ”。

       也要判断 EPE 位,该位说明了是否擦除错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值