热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WINCE-MLC型NANDFLASHTWO_PLANEPAGEPROGRAM\READ

************************************************************************

/***********************************************************************/

/*                                           Bryan Wang                                                  */

/*                                              2013-8-1                                                    */

/***********************************************************************/

以K9GAG08U0D为例,整理TWO-PLANE读写操作。

1、TWO_PLANE PAGE PROGRAM

Two-Plane page program is an extension of page program, for a single plane with 4314 byte data registers. Since the device is equiped with two memory planes, activating the two sets of 4314 bytes data registers enables a simultaneous programing of two pages.

After writing the first set of data up to 4314 byte into the selected data registers via cache registers, Dummy Page Program commad(11h) instead of actual Page Program command(10h) is inputted to finish data-loading of the first plane. Since no programming process is involved, R//B remains in Busy state for a short period of time(tDBSY). Read Status command(70h) may be issued to find out when the device returns to Ready state by polling the Read/Busy status bit(I/O 6). Then the next set of data for the other plane is inputted after the 81h command and address sequences. After inputting data for the last plane, actual True Page Program(10h) instead of dummy Page Program command(11h) must be followed to start the programing process. The operation of Ready/Busy and Read Status is the same as that of Page Program. Although two planes are programmed simultaneously, pass/fail is not availalbe for each page when the program operation completes. Status bit of I/O is set to "1" when any of the page fails.


  • 基础知识

K9GAG08有两个memory plane, 分别为plane 0 和plane 1, 每个plane包含2048个块,每个plane都有一个data registers(有时也叫做页寄存器,page register),用于缓存数据。

Two-Plane编程的顺序如下图:

N=0时, 那么Flash会先写block 0的第0页,再写block 1的第0页,然后依次为:【block 0 page 1】 -->【 block1 page 1】 -->【block 0 page 2】 -->【 block1 page 2】......

  • 操作步骤、时序
(1)发送命令80h
(2)发送Plane 0中要操作的地址
(3)发送命令11h
(4)等待Read/Busy位变为Ready状态。可用通过检测R/B Pin脚电平,也可以发送Read Status命令,检测Ready/Busy位(I/O 6)。
(5)发送命令81h
(6)发送Plane 1中要操作的地址
(7)发送命令10h
(8)等待Read/Busy位变为Ready状态。可用通过检测R/B Pin脚电平,也可以发送Read Status命令,检测Ready/Busy位(I/O 6)。
(9)检验写操作是否成功:发送Read Status命令,检测状态为I/O 0, 如果该位为1,说明写操作失败;如果该位为0,说明写操作成功。

2、TWO-PLANE PAGE READ

Two-Plane Page Read is an extension of Page Read, for single plane with 4314 byte data registers. Since the dvice is equipped with two memory planes, activating the two sets of 4314 bytes data registers enables a random read of two pages. Two-Plane Page Read is initiated by repeating command 60h followed by three address cycles twice. In this case, only same page of same block can be selected from each time.

After Read Confirm command(30h) the 8628 bytes of data within the selected two page are transferred to the cache registers via data registers in less than 60us(tR). The system controller can detect the completion of data transfer(tR) by monitoring the output of R/B pin.

Once the data is loaded into the cache registers, the data output of first plane can be read out by issuing command 00h with Five Address Cycles, command 05h with two column address and finally E0h. The data output of second plane can be read out using the identical command sequences.


  • 操作步骤、时序

(1)发送60h,然后发送plane 0 中对应页的地址(3 cycle)

(2)发送60h,然后发送plane 1 中对应页的地址(3 cycle)

(3)发送30h,此时,8628字节的数据被传输每个plane的页寄存器中

(4)检测R/B pin脚信号,判断数据传输是否完成

(5)发送00h,并发送plane 0 中要操作的地址(5 cycle,其中两个cycle的 column address被置为全0状态),然后发05h,再发column address(2 cycle),最后发E0h, 接收plane 0 中读取的数据

(6)发送00h,并发送plane 1 中要操作的地址(5 cycle,其中两个cycle的 column address被置为全0状态),然后发05h,再发column address(2 cycle),最后发E0h, 接收plane 1 中读取的数据


推荐阅读
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
author-avatar
周笨笨真笨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有