ED3 flash 、OBP flash
海力士、东芝等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的更多相关文章
- 关于Nor Flash、Nand Flash等等
[Nor Flash] Nor Flash的“读取”和RAM很类似,只要能能够提供数据的地址,数据总线就能够正确的给出数据,但不可以直接进行“写”操作: Nor Flash的写操作,需要遵循特定的命令 ...
- SAM4E单片机之旅——16、NAND Flash读写
这次大概介绍了一下NAND Flash,以及在ASF中使用它的方法. 一. 接线 这个开发板搭载了一个256 MB,8位的NAND Flash(MT29F2G08ABAEA).引脚接线如下: 偷个懒, ...
- 使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法
1. 简要说明 JLink的调试功能.烧写Flash的功能都很强大,但是对于S3C2410.S3C2440的Flash操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢:烧写Nan ...
- [转]Flash、Flex、AS3.0框架及类库资源收集之十全大补
原文地址:http://www.d5power.com/portal.php?mod=view&aid=27 APIs.Libs.Components1.as3ebaylibhttp://co ...
- Flash、Ajax各自的优缺点,在使用中如何取舍?
1.Flash ajax对比 Flash适合处理多媒体.矢量图形.访问机器:对CSS.处理文本上不足,不容易被搜索. Ajax对CSS.文本支持很好,支持搜索:多媒体.矢量图形.机器访问不足. 共同点 ...
- Bootloader升级方式一————擦、写flash在RAM中运行
在汽车ECU软件运行中,软件代码运行安全性是第一,在代码中尽可能的不要固化有flash_erase.flash_write操作存在,主要是防止当出现异常情况时,程序跑飞,误调用erase.write对 ...
- ROM、RAM、DRAM、SRAM和FLASH、PSRAM
1.ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写.ROM在系统停止供电的时候仍然可以保持数据,而RAM通常 ...
- 四、NAND Flash
4.1 nand flash启动u-boot nand flash 启动的时候,CPU 需要将 nand flash 中前面 4KB 的内容复制到 SRAM 中执行,然后将 NAND Flash 中的 ...
- ROM、PROM、EPROM、EEPROM、FLASH ROM、FLASH、eMMC
ROM(Read Only Memory,只读存储器)芯片:在微机的发展初期,BIOS都存放在ROM芯片中.ROM内部的资料是在ROM的制造工序中,在工厂里用特殊的方法被烧录进去的,其中的内容只能读不 ...
随机推荐
- js函数与 Promise的使用
JavaScript的函数不但是“头等公民”,而且可以像变量一样使用,具有非常强大的抽象能力. 定义函数的方式如下: function abs(x) { if (x >= 0) { return ...
- dp + 状态压缩 - Codeforces 580D Kefa and Dishes
Kefa and Dishes Problem's Link Mean: 菜单上有n道菜,需要点m道.每道菜的美味值为ai. 有k个规则,每个规则:在吃完第xi道菜后接着吃yi可以多获得vi的美味值. ...
- VSS (Visual Source Safe 2005) 用法详解
VSS用法指南 The usage of VSS (Visual Source Safe 2005) 1. 首先,当然是得安装好Visual Source Safe 2005 你可以在Visual S ...
- php -- 判断文件是否存在
file_exists is_file is_dir 基本上,PHP的 file_exists = is_dir + is_file 写程序验证一下: 分别执行1000次,记录所需时间. ------ ...
- 【BZOJ】2005: [Noi2010]能量采集(欧拉函数+分块)
http://www.lydsy.com/JudgeOnline/problem.php?id=2005 首先和某题一样应该一样可以看出每个点所在的线上有gcd(x,y)-1个点挡着了自己... 那么 ...
- MFC常见错误提示:opened in another editor
有时候在使用MFC的过程中常常会遇到这种提示.假设你在看想必你也遇到这种烦恼. 没办法-- 把打开的文件所有关闭.然后你就发现期待的RC文件出现了! .!!!.!!!!!!! ! !.! !! .
- js中的问题(this)(遍历对象中的属性)
for (var i in this) { if (this[i] == null) this[i] = "";//属性如果为null,则默认为""; ...
- Autofac IoC容器基本使用步骤【1】
原文:http://www.bkjia.com/Asp_Netjc/888119.html [原文中有一个地方报错,下面已修改] 一.基本步骤: 1.设计适合控制反转(IoC)的应用程序 2.给应用 ...
- Linux系统下修改MySQL密码(忘记密码)
忘记原来的myql的root的密码: 首先,你必须要有操作系统的root权限了.要是连系统的root权限都没有的话,先考虑root系统再走下面的步骤.类似于安全模式登录系统,有人建议说是pkill m ...
- 微软发布新版 Skype Linux 客户端
导读 前两天,微软说要给Linux 用户带来一个令人兴奋的新闻,今天,这个新闻来了.它刚刚为 Linux 发布了一个新的 Skype 客户端.此次发布,微软为 Linux 带来的 Skype 客户端与 ...