海力士、东芝等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. 使用jQuery模拟Google的自动提示效果

    注意: 1.本功能使用SqlServler2000中的示例数据库Northwind,请打SP3或SP4补丁:2.请下载jQuery组件,河西FTP中有下载:3.本功能实现类似Google自动提示的效果 ...

  2. 用javascript技术读取注册表中软件安装位置并启动本地软件

    1.首先读取注册表中本地软件安装的位置,如果未安装则无就跳转到下载页面. 2.启动软件,关闭页面. 3.如报错提示. <SCRIPT language=javascript>  <! ...

  3. VMware ESXi vsan.v00卡 停

    重装VMware ESXi 6.5,结果在loading vsan.v00文件的时候卡住了,过了几个小时都停留在这个界面.无意间重启使用UEFI 启动,提示某文件校验出错,MD5对不上,重新写入安装镜 ...

  4. MyBatis 使用简单的 XML或注解用于配置和原始映射

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .My ...

  5. 嵌入式驱动开发之采集方式bypass mode---bypass mode

    http://baike.baidu.com/link?url=HifFTlNRROR24lW_gSdTiG-eXooi08O0Eeq1mU6Yy0I1LOMW4kdumv25BOQbohV_428M ...

  6. PyQt5资料

    http://bbs.fishc.com/thread-59816-1-1.html https://pypi.python.org/pypi/PyQt5/ http://www.thehackeru ...

  7. 学习:erlang用链表实现大容量的List或者数组。

    链表的内在实质. 效率未知,待测.

  8. 权限模块_使用权限_实现主页面的效果_显示左侧菜单&只显示有权限的菜单项

    权限模块__使用权限__实现主页面的效果 HomeAction.java public class HomeAction extends ActionSupport { public String i ...

  9. iOS开发之--iOS APP打包的时候出现的四个选项

  10. 面试题思考:web中关于一些容器基本概念的简单总结

    关键字:应用服务器.web服务器.web容器.jsp容器.servlet容器. 1.应用服务器: 作为应用程序服务器,要求可以通过各种协议(包括 HTTP 协议)把商业逻辑暴露给(expose)客户端 ...