海力士、东芝等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. PyQT实现扩展窗口,更多/隐藏

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVcAAAFeCAIAAAC+XMuHAAAgAElEQVR4nOy9Z5Ac153g2fx0F2fiYi ...

  2. web.xml 中 classpath 写法说明

    简单理解,classpath就是代表  /WEB-INF /classes/  这个路径(如果不理解该路径,就把一个web工程发布为war包,然后用winrar查看其包内路径就理解啦) 常用的场景: ...

  3. Android测试:从零开始3—— Instrumented单元测试1

    Instrumented单元测试是指运行在物理机器或者模拟机上的测试,这样可以使用Android framework 的API和supporting API.这会在你需要使用设备信息,如app的Con ...

  4. Android 按Menu弹出菜单

    \res\anim\menu_in.xml    资源文件(动画) <?xml version="1.0" encoding="UTF-8"?> & ...

  5. 盘点:七大.NET著名开源项目

    尽管过了相当长的时间,花费了不少资源,微软和.NET社区还是在最近几年加入到了开源运动的阵营中来了,这令人相当惊讶,因为两大阵营一直都是经常对立的.然而,事实是依靠开源,微软社区中的开源开发工具日益发 ...

  6. cxGrid 锁定列

    cxGrid锁定列 第1步: 双击cxGrid -> 点击页签“Bands”->点击“Add”加入2个tcxGridBrand, 将1个锁定在左边,最后一个锁定在右边. 如下图 第2步: ...

  7. 【集中工作薄】 当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中

    功能:当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中 Sub Books2Sheets() '定义对话框变量 Dim fd As FileDialog Set fd = A ...

  8. python虚拟机运行原理

    近期为了面试想要了解下python的运行原理方面的东西,奈何关于python没有找到一本类似于深入理解Java虚拟机方面的书籍,找到了一本<python源码剖析>电子书,但是觉得相对来说最 ...

  9. js如何遍历并取出对象的属性名?

    js如何遍历并取出对象的属性名? dataObj = {name : su,age : 26,height : 18cm }; for(var st in dataObj) {console.dir( ...

  10. python裁剪base64编码的图片

    简介 今天遇到需要裁剪base64字符串的PNG图片,并返回base64格式字符串的任务,捣鼓半天. 裁剪代码如下: def deal_inspect_img(base64_str): "& ...