Flash 的读操作与传统EPROM 读操作相同。由于芯片使用软件保护模式进行操作, 用户编程时, 只要向指定的地址写入指定的序列, 就可以启动Flash 芯片内部的写状态机, 完成指定的操作。表2 为Flash 的操作命令说明( 对芯片的擦除和编程都是按照字进行的), 表中所有的数据都是十六进制数。
Flash 的正确操作顺序: 先复位, 再擦除, 最后编程。
按照表2 提供的操作命令时序来实现对AM29LV800 的擦除和编程,PA 为编程地址,PD 为编程数据。Flash 扩展在CE1 空间, 起始地址是200000, 所以操作时所有地址必须加上200000。例如烧写工程中擦除部分命令为:
表2 AM29LV800B 的操作命令说明
芯片擦除需要占用6 个总线周期, 而芯片编程需要4 个总线周期, 依照表3 的数据, 在每个总线周期对相应地址写入命令字就可以了。用户一般都是对芯片进行写操作, 写操作只能使‘1’ 变‘0’ , 而擦除只能使‘0’ 变为‘1’ 。图3 为擦除和编程命令波形图, 清楚地显示了擦除和编程操作过程。
图3 擦除和编程命令波形图
判断编程或擦除的结束是当把编程或擦除的命令字按照其时序写入Flash 时, 在写编程命令时序或擦除命令时序的最后一个WE 上升沿到来之后,AM29LV800会自动运行一个嵌入在Flash 内部的算法来判断编程或擦除操作是否结束。采用触发位校验的方法, 检测数据切换位DQ6(Toggle Bit) 的状态, 连续读数据会使DQ6 的值在‘0’ 和‘1’ 之间来回切换, 当编程或擦除结束时,DQ6 就停止值的切换。因此, 可以通过连续两次读DQ6 的值来判断编程或擦除是否结束, 当两次读得的值相同时, 说明编程或擦除结束, 否则没有。触发位检测算法流程图如图4 所示。
图4 触发位检测算法流程图