海力士、东芝等ED3 NAND Flash

ED3的TLC编程规则相对于OBP来讲会简单许多,因为ED3的编程规则非常有规律,很容易掌握,ED3的每个WL页数量是固定的。

ED3在对行地址的定义上与OBP有着很大的区别:在TLC模式下,ED3的行地址代表的是WL地址。操作的页是WL中的哪个页,是通过命令前的Pre Cmd来确定的。

ED3 TLC编程也遵循一个WL需要编程3次的规则,一次WL编程的命令序列如下

第一个命令 09h/0Dh/(空)  分别代表该WL是第几次编程:第一次编程发09h、第二次编程发0Dh、第三次编程不发

第二个命令01h/02h/03h 对应的就是上面所描述的选择当前WL当中的哪个页

最后面确认编程的命令,只有在当前操作的页是这个WL的第三个页的时候,才使用10h,其他俩个页都使用1Ah

ED3 在进行TLC编程的时候也需要遵循一个Order顺序,在每次编程的时候,都需要对这一个WL上的三个页都进行编程操作

假设当前操作的是Block_0,那么首个WL行地址即为00 00 00,第二个WL行地址为01 00 00 …(该地址表示方式及后面的地址表示方式都根据实际操作时使用的小端数据模式)

首先根据Order顺序,对WL0进行首次编程,本次编程命令序列为

09h - 01h- 80h -  00 00 00 00 00  - Data  - 1Ah

09h - 02h- 80h -  00 00 00 00 00  - Data  - 1Ah

09h - 03h- 80h -  00 00 00 00 00  - Data  - 10h

下面开始Order1编程,此时需要编程WL1,命令序列为

09h - 01h- 80h -  00 00 01 00 00  - Data  - 1Ah

09h - 02h- 80h -  00 00 01 00 00  - Data  - 1Ah

09h - 03h- 80h -  00 00 01 00 00  - Data  - 10h

根据Order顺序,下一个要编程的WL回到了WL0,那么这次是第二次对WL0进行编程,命令序列为

0Dh - 01h- 80h -  00 00 00 00 00  - Data  - 1Ah

0Dh - 02h- 80h -  00 00 00 00 00  - Data  - 1Ah

0Dh - 03h- 80h -  00 00 00 00 00  - Data  - 10h

再下一个是Order3,对WL2进行首次编程,命令序列为

09h - 01h- 80h -  00 00 02 00 00  - Data  - 1Ah

09h - 02h- 80h -  00 00 02 00 00  - Data  - 1Ah

09h - 03h- 80h -  00 00 02 00 00  - Data  - 10h

Order4命令序列

0Dh - 01h- 80h -  00 00 01 00 00  - Data  - 1Ah

0Dh - 02h- 80h -  00 00 01 00 00  - Data  - 1Ah

0Dh - 03h- 80h -  00 00 01 00 00  - Data  - 10h

Order5命令序列,此时对WL0进行最后一次编程

01h - 80h-  00 00 00 00 00  - Data  - 1Ah

02h - 80h-  00 00 00 00 00  - Data  - 1Ah

03h - 80h-  00 00 00 00 00  - Data  - 10h

到此为止,WL0的三个页都已经编程完毕,数据可以被正常的读出了。根据这样的规律,就可以将整个Block的页都进行编程。

OBP NAND Flash:为三星与其他一些flash厂商共用的TLC协议,其TLC部分的编程规则与常规ONFI协议和东芝的ED3协议有着明显的区别

SLC操作与普通SLC和MLC操作没太大区别,就只用在开头的命令前面加一个DA表示SLC模式即可。而在所有需要TLC操作的读写命令之前,都要加一个0xDF表示进入TLC模式。

在OBP TLC模式中,与普通模式编程最大的区别首先就是编程顺序,TLC Page分为分组地址(Grouped Page Address)和编程地址(Program Order Address)。

常规编程的时候,一般的命令都是先发一个0x80,后面接5个字节的行列地址,然后发送数据,最后以0x10结尾,等待RB拉高后,一个Page的数据就被编程进去了。但是在OBP规则中,通常一个Page需要被编程三次(不是所有Page都需要)之后,才能够确保数据的稳定性,保证正确的把数据读出。但是把一个页编程三次并不是指简单的重复对一个页发送三次80 10命令就可以了。

一开始,进入第一次页编程(1st Page Data Setup), 此时的行地址一定是属于Group Page Address图中Group A中的某一个页的行地址,结尾的编程命令不是0x10而是0xC0。

在OBP中,不是每一个Word Line当中都有三个页,在OBP当中,前几个World Line和最后几个Word Line都稍微有一点特殊,需要特殊处理一下

现在我们假设是在Plane0当中进行编程,那么此时Add所代表的命令自然就是0x11啦。接下来就进入了第二次页编程(2nd Page Data Setup),命令与第一次类似,这里面的行地址代表Group Page Address图中Group B中的跟第一次编程中的页同一个Word Line的页的行地址,然后发送0xC0 和0x12,。第三次编程与前两次一样,行地址属于图中Group C中的第一次编程中的页同一个Word Line的页的行地址。最后是Program Confirm Part,0x8B后面所代表的地址不是刚刚任何一个页的行地址,而是指Program Order Address中的Order Address。

当初我看完这个的时候是一脸懵逼的。

就拿一个Block中的第一个Page开始。假设是第0个Block,那么第一个页的行地址自然是0x000000,先看Group Page Address,是属于Group A。好,那么开始编程,按照GroupA的规则,发命令0x80,发两个字节列地址0x00,0x00 再发3个字节行地址0x00,0x00,0x00,发0xC0,和1st Data input的命令 0x11,然后就准备发Confirm Part命令了。

等等,上面不是说要编程了三个页之后才要发Confirm Part吗?在OBP中,不是每一个Word Line当中都有三个页,因此刚刚上面所说的是一般情况下的编程规则,在OBP当中,前几个World Line和最后几个Word Line都稍微有一点特殊,需要特殊处理一下。

继续回到刚刚的Confirm Part命令,发送命令0x8B 然后是Order Address,此时根据Group Page Address当中Page 0对应的位置查看Program Order Address对应的值,一看,也是0,好吧,那么Order Address就是0x00,0x00,0x00,0x00,0x00 五个0,最后发送0x10,第一个Word Line就编程结束了,此时Page 0的数据可以正确读出。

继续第二个Word Line编程,根据Order Address当中的0x01的位置,对应到Group Page Address,可以看出这个页是Page 1。发送命令0x80,列地址0x00,0x00,行地址0x01,0x00,0x00,发送命令0xC0,然后是地址0x11。然后跳过了第二次编程,直接开始第三次编程,因为参照Group Page Address,第二个Word Line是没有Group B的页,就如同第一个Word Line中只有Group A的页一样。但是根据Group Page Address,此时编程的页还是Page 2,因此行地址是0x02,0x00,0x00,0xC0后面跟的是0x13。接下来又到了Confirm Part了,此时的Order Address就是0x01。那么Confirm Part的地址就是0x00,0x00,0x01,0x00,0x00,最后0x10编程结束。但是注意,由于这个Word拥有两个Page,但是此时该Word line只编程了一次,因此数据还不能正确读出。

好,到了第三个Word Line了。为啥是第三个Word Line,不应该还是第二个Word Line吗。No No No,在OBP TLC编程当中,编程的顺序要按照Order Address,所以,此时看Order Address的表,0x02所表示的Page在第三个Word Line,所以此时是编程第三个Word Line中Group A的Page,根据Group Page Address可以看到就是Page 3!开始发送命令0x80,,然后是5字节地址0x00,0x00,0x03,0x00,0x00,发完数据然后0xC0,0x11,下面是Group C的Page,0x80,0x00,0x00,0x04,0x00,0x00,0xC0,0x13,最后的Confirm Part,发送命令0x8B,Order地址0x00,0x00,0x02,0x00,0x00,最后发送0x10。

下面再次根据Order Address,看向0x03所代表的Page。呦呵,又跑回第二个Word Line去了,那么此时就重复刚刚的第二个Word Line的编程,命令0x80,地址0x00,0x00,0x01,0x00,0x00,命令0xC0跟地址0x11,。后面0x80, 地址0x00,0x00,0x02,0x00,0x00,命令0xC0跟地址0x13。但是这个是,Confirm Part中的地址不一样了,发送完0x8B后,Order地址为0x00,0x00,0x03,0x00,0x00,最后发0x10。这个真的是最后的命令,此时编程完代表这个Word line已经编程结束,Page 1和Page 2的数据已经可以正常读出了。

这几个编程做完可以发现,OBP中TLC的编程顺序是一个斜线的顺序,后面的编程按照刚刚的规律操作即可全部完成,在Datasheet中只有一段话稍微说明了一下

ED3 flash 、OBP flash的更多相关文章

  1. 关于Nor Flash、Nand Flash等等

    [Nor Flash] Nor Flash的“读取”和RAM很类似,只要能能够提供数据的地址,数据总线就能够正确的给出数据,但不可以直接进行“写”操作: Nor Flash的写操作,需要遵循特定的命令 ...

  2. SAM4E单片机之旅——16、NAND Flash读写

    这次大概介绍了一下NAND Flash,以及在ASF中使用它的方法. 一. 接线 这个开发板搭载了一个256 MB,8位的NAND Flash(MT29F2G08ABAEA).引脚接线如下: 偷个懒, ...

  3. 使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法

    1. 简要说明 JLink的调试功能.烧写Flash的功能都很强大,但是对于S3C2410.S3C2440的Flash操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢:烧写Nan ...

  4. [转]Flash、Flex、AS3.0框架及类库资源收集之十全大补

    原文地址:http://www.d5power.com/portal.php?mod=view&aid=27 APIs.Libs.Components1.as3ebaylibhttp://co ...

  5. Flash、Ajax各自的优缺点,在使用中如何取舍?

    1.Flash ajax对比 Flash适合处理多媒体.矢量图形.访问机器:对CSS.处理文本上不足,不容易被搜索. Ajax对CSS.文本支持很好,支持搜索:多媒体.矢量图形.机器访问不足. 共同点 ...

  6. Bootloader升级方式一————擦、写flash在RAM中运行

    在汽车ECU软件运行中,软件代码运行安全性是第一,在代码中尽可能的不要固化有flash_erase.flash_write操作存在,主要是防止当出现异常情况时,程序跑飞,误调用erase.write对 ...

  7. ROM、RAM、DRAM、SRAM和FLASH、PSRAM

    1.ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写.ROM在系统停止供电的时候仍然可以保持数据,而RAM通常 ...

  8. 四、NAND Flash

    4.1 nand flash启动u-boot nand flash 启动的时候,CPU 需要将 nand flash 中前面 4KB 的内容复制到 SRAM 中执行,然后将 NAND Flash 中的 ...

  9. ROM、PROM、EPROM、EEPROM、FLASH ROM、FLASH、eMMC

    ROM(Read Only Memory,只读存储器)芯片:在微机的发展初期,BIOS都存放在ROM芯片中.ROM内部的资料是在ROM的制造工序中,在工厂里用特殊的方法被烧录进去的,其中的内容只能读不 ...

随机推荐

  1. c libghttp ghttp 库使用指南

    libghttp是一个很好用的 http 库,能够轻松地实现同步和异步的HTTP请求 目录 [隐藏]  1 安装 2 GET示例 3 POST示例 4 相关函数 5 艺搜参考 安装 库文件下载: 在6 ...

  2. Web项目的WEB-INF目录使用说明以及重定向与转发

    写这篇文章的原因是看到了Tomcat下面的Webapps下面的,就想看一下. 总结一下这篇文章的内容: WEB-INF下面的内容都是只能由服务器级别才能访问,客户端并不能访问.什么是客户端级别?什么是 ...

  3. 第二百七十三节,Tornado框架-文件上传

    Tornado框架-文件上传 第一.普通表单上传文件 self.request.files["fafafa"] 获取上传文件信息,参数["上传文件框的name名称&quo ...

  4. Applet是java的自动执行方式(这是它的优势,主要用于HTML)

    进度条:ProgressBar. JcomboBox:下拉菜单:在AWT中同类组件是choice. JlistPanel:选择列表 BorderPanel:设置边框 JsplitPanel:可将容器分 ...

  5. hdu 3667(拆边+最小费用最大流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3667 思路:由于花费的计算方法是a*x*x,因此必须拆边,使得最小费用流模板可用,即变成a*x的形式. ...

  6. python3----datetime模块分析

    datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1. datetime模块定义了5个类,分别是 1.datetime ...

  7. Unable to acquire Oracle environment handle 问题的解决

    ---恢复内容开始--- 转自:http://blog.csdn.net/zhangweiwindow/article/details/6575224 今天重装了一下系统,所以以前工作时配置的pyth ...

  8. 动态规划——最长公共上升子序列LCIS

    问题 给定两个序列A和B,序列的子序列是指按照索引逐渐增加的顺序,从原序列中取出若干个数形成的一个子集,若子序列的数值大小是逐渐递增的则为上升子序列,若A和B取出的两个子序列A1和B1是相同的,则A1 ...

  9. 【BZOJ4262】Sum 单调栈+线段树

    [BZOJ4262]Sum Description Input 第一行一个数 t,表示询问组数. 第一行一个数 t,表示询问组数. 接下来 t 行,每行四个数 l_1, r_1, l_2, r_2. ...

  10. jQuery照片墙相册

    效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/30.htm 本特效支持jquery的版本为1.4.3,暂时不支持1.9以上jquery版本. 代码: < ...