最近在使用ED3的TLC Flash,在这里对该类型的Flash TLC编程规则做一个记录方便日后查看
个人认为ED3的TLC编程规则相对于OBP来讲会简单许多,因为ED3的编程规则非常有规律,很容易掌握。ED3的每个WL页数量是固定的,因此每个WL的编程规则基本上也都是固定的。
ED3在对行地址的定义上与OBP有着很大的区别:在TLC模式下,ED3的行地址代表的是WL地址。操作的页是WL中的哪个页,是通过命令前的Pre Cmd来确定的。
这里表示的是TLC读操作,在读命令00h之前,通过发送01h/02h/03h来选择具体要操作的页。
ED3 TLC编程也遵循一个WL需要编程3次的规则,一次WL编程的命令序列如下
3个特殊命令,使用的规则如下
第一个命令 09h/0Dh/(空) 分别代表该WL是第几次编程:第一次编程发09h、第二次编程发0Dh、第三次编程不发
第二个命令01h/02h/03h 对应的就是上面所描述的选择当前WL当中的哪个页
最后面确认编程的命令,只有在当前操作的页是这个WL的第三个页的时候,才使用10h,其他俩个页都使用1Ah
PS:关于2)的说明,目前来看78h命令主要用于多lun的nand flash,单lun的可以不用在意
ED3 在进行TLC编程的时候也需要遵循一个Order顺序,在每次编程的时候,都需要对这一个WL上的三个页都进行编程操作
下面根据这个Order顺序举一个TLC编程的栗子
假设当前操作的是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的页都进行编程。
注:以上截图皆来自 1ynm 128Gb TLC Datasheet_Ver1.61_160609series