免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 20735 | 回复: 14
打印 上一主题 下一主题

[驱动] Nand Flash中的ONFI,LBA,Unique ID [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-28 17:15 |只看该作者 |倒序浏览
本帖最后由 crifan 于 2011-06-28 17:18 编辑

Nand Flash中的ONFI,LBA,Unique ID

Version: 2011-6-28

Author: crifan

------------------------------------------------------------------------

pdf版本 Nand Flash中的ONFI,LBA,Unique ID.pdf (626.67 KB, 下载次数: 1139)

------------------------------------------------------------------------

目录


1 名词解释 3
1.1 Non-Volatile Memory非易失性存储器 3
1.2 OTP(One Time Programmable)一次性可编程存储器 3
1.3 NDA(None-Disclosure Agreement) 3
1.4 Datasheet数据手册和Specification规范 3
1.5 Nand Flash相关的一些名词解释 4
1.5.1 (Bad) Block Management(坏)块管理 4
1.5.2 Wear-Levelling负载平衡 4
1.5.3 ECC(Error Correction Code)错误校验(代码) 4
2 Nand Flash相关规范 – ONFI和LBA 6
2.1 ONFI是什么 6
2.1.1 ONFI Block Abstracted NAND 8
2.1.2 ONFI的好处 8
2.2 LBA规范是什么 8
2.3 为何会有ONFI和LBA 9
2.3.1 技术层面的解释 10
2.3.2 现实层面的解释 10
2.4 ONFI和LBA的区别和联系 10
2.4.1 ONFI和LBA的区别 10
2.4.2 ONFI和LBA的联系 10
3 Nand Flash的Unique ID 11
3.1 什么是Unique ID唯一性标识 11
3.2 不同Nand Flash厂商的对Unique ID的不同的实现方法 11
3.2.1 Toshiba东芝的Nand的Unique ID 11
3.2.1.1 读取Toshiba的Nand的Unique ID 13
3.2.2 Samsung三星的Nand的Unique ID 13
3.2.2.1 读取Samsung的Nand的Unique ID 14
3.2.3 遵循ONFI规范的厂商的Nand的Unique ID 14
3.2.3.1 读取遵循ONFI的厂商的Nand的Unique ID 16
4 引用文章 18


图表
Figure 1 ONFI中的Nand Flash的命令集合 7
Figure 2 Toshiba的Unique ID 12
Figure 3 ONFI的参数页数据结构定义 15
Figure 4 ONFI中Unique ID的结构 16
Figure 5 ONFI中Read Unique ID命令的时序图 17

评分

参与人数 1可用积分 +10 收起 理由
T-Bagwell + 10 原创内容

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2011-06-28 17:16 |只看该作者
本帖最后由 crifan 于 2011-06-28 20:42 编辑

此贴内容,算是由Unique ID引发的帖子:
http://bbs.chinaunix.net/thread-3555809-1-1.html

贴出具体内容如下,
第一章内容:
1 名词解释
1.1 Non-Volatile Memory非易失性存储器

NV (RAM)Memory,断电数据也不会丢失的存储器,比如Nand Flash,Nor Flash,硬盘等等。于此相对的是,断电了数据会丢失的存储器,比如DRAM等。

1.2 OTP(One Time Programmable)一次性可编程存储器

OTP,一种非易失性存储器,但是只允许一次性写入数据,写入(或称烧写)数据之后,就不能修改了。

OTP的好处或者说用途是,常用于写入一些和芯片相关的一些特定数据,用于加密的一些数据等。

与一次性写入数据的OTP相对应的是,像Nand Flash,硬盘等存储器,可以被多次写入数据。只要硬盘这类的存储器没坏,你高兴写入几次就写入几次,而OTP就只能写入一次,就没法再修改里面的数据了。

1.3 NDA(None-Disclosure Agreement)

NDA,中文可以翻译为,非公开协议,保密协议。

说白了,还是一种协议,常用于这种情况:

某家厂商的某种技术或资料,是保密的,不希望公开的。

但是呢,如果你要用他家的芯片啊之类的东西,在开发过程中,又必须得到对应的技术和资料,才能开发产品,所以,他就会要求和你签订这样的NDA协议,意思就是,你可以用我的技术和资料,但是你不能公开给(我未授权的)其他人。如果非法泄露我的机密技术,那我肯定要走法律程序控告你,之类的。

1.4 Datasheet数据手册和Specification规范

英文datasheet,中文一般翻译为数据手册。

指的是对应某个硬件,多为芯片,的功能说明,定义了如何操作该硬件,达到你要的功能,这其中主要包括芯片中的相关寄存器的定义,如何发送命令,发送什么命令,以此来操作此硬件等等。

而英文Specification,引文常缩写为Spec.,中文一般翻译为规范。

多指某个组织(盈利的或非盈利的),定义了一些规矩,如果你要用某种东西,在计算机领域,常常指的是某硬件和相关的软件协议,就要按照此规矩来操作,人家这个组织呢,保证你只要实现了此规范,设备就能按照你所期望的运行,能够实现对应的功能,而你的芯片实现了此规范,就叫做,是和此规范兼容(compatible)的。

1.5 Nand Flash相关的一些名词解释1.5.1
(Bad) Block Management(坏)块管理

Nand Flash由于其物理特性,只有有限的擦写次数,超过那个次数,基本上就是坏了。在使用过程中,有些Nand Flash的block会出现被用坏了,当发现了,要及时将此block标注为坏块,不再使用。

于此相关的管理工作,属于Nand Flash的坏块管理的一部分工作。

1.5.2 Wear-Levelling负载平衡

Nand Flash的block的管理,还包括负载平衡。

正是由于Nand Flash的block,都是有一定寿命限制的,所以如果你每次都往同一个block擦除然后写入数据,那么那个block就很容易被用坏了,所以我们要去管理一下,将这么多次的对同一个block的操作,平均分布到其他一些block上面,使得在block的使用上,相对较平均,这样相对来说,可以更能充分利用Nand Flash。

关于wear-leveling这个词,再简单解释一下,wear就是穿(衣服)等,用(东西)导致磨损,而leveling就是使得均衡,所以放在一起就是,使得对于Nand Flash的那么多的block的使用磨损,相对均衡一些,以此延长Nand Flash的使用寿命或者说更加充分利用Nand Flash。

1.5.3 ECC(Error Correction Code)错误校验(代码)

Nand Flash物理特性上使得其数据读写过程中会发生一定几率的错误,所以要有个对应的错误检测和纠正的机制,于是才有此ECC,用于数据错误的检测与纠正。Nand Flash的ECC,常见的算法有海明码和BCH,这类算法的实现,可以是软件也可以是硬件。不同系统,根据自己的需求,采用对应的软件或者是硬件。

相对来说,硬件实现这类ECC算法,肯定要比软件速度要快,但是多加了对应的硬件部分,所以成本相对要高些。如果系统对于性能要求不是很高,那么可以采用软件实现这类ECC算法,但是由于增加了数据读取和写入前后要做的数据错误检测和纠错,所以性能相对要降低一些,即Nand Flash的读取和写入速度相对会有所影响。

论坛徽章:
0
3 [报告]
发表于 2011-06-28 17:19 |只看该作者
本帖最后由 crifan 于 2011-06-28 20:44 编辑

第二章内容:
2 Nand Flash相关规范 – ONFI和LBA

前面介绍过了什么是规范(Spec.),而关于Nand Flash,有两个相关的规范:ONFI和LBA。

2.1 ONFI是什么

ONFI规范,即Open Nand Flash Interface specification。

ONFI是Intel主导的,其他一些厂家(Hynix,Micron,Numonyx,Phison ,SanDisk,Sony,Spansion等)参与制定的,统一了Nand Flash的操作接口。

所谓操作接口,就是那些对Nand Flash操作的命令等内容。

而所谓统一,意思是之前那些Nand Flash的操作命令等,都是各自为政,虽然大多数常见的Nand Flash的操作,比如page read的命令是0x00,0x30,page write的命令是0x80,0x10等,但是有些命令相关的内容,很特别且很重要的一个例子就是,每个厂家的Nand Flash的read id的命令,虽然都是0x90,但是读取出来的几个字节的含义,每个厂家定义的都不太一样。

因此,才有统一Nand Flash的操作接口这一说。

ONFI规范,官网可以下载的到:

http://onfi.org/specifications/

比如:

ONFI 2.2 Spec

http://onfi.org/wp-content/uploads/2009/02/ONFI%202_2%20Gold.pdf

ONFI规范中定义的Nand Flash的命令集合为:

Figure 1 ONFI中的Nand Flash的命令集合

可以看到,其中常见的一些命令,比如page read(0x00,0x30),和page write(0x80,0x10),block erase(0x60,0xD0),Reset(0xFF)等等命令,都是和普通的Nand Flash的命令是一样的,而额外多出一些命令,比如Read Unique ID(0xED)等命令,是之前某些Nand Flash命令所不具有的。

如此,定义了Nand Flash的操作的命令的集合以及发送对应命令所遵循的时序等内容。

2.1.1 ONFI Block Abstracted NAND

ONFI还定义了另外一个规范:

ONFI Block Abstracted Nand Specification

http://onfi.org/wp-content/uploads/2009/02/BA_NAND_rev_1_1_Gold.pdf

即ONFI LBA Nand,简单说就是,逻辑块寻址的Nand。其含义和Toshiba的LBA,基本没有太多区别。

2.1.2 ONFI的好处

ONFI规范定义了之后,每家厂商的Nand Flash,只要符合这个ONFI规范,然后上层Nand Flash的软件,就可以统一只用一种了,换句话说,我写了一份Nand Flash的驱动后,就可以操作所有和ONFI兼容的Nand Flash了,整个Nand Flash的兼容性,上层软件的兼容性,互操作性,就大大提高了。

而且,同样的,由于任何规范在定义的时候,都会考虑到兼容性和扩展性,ONFI也不例外。针对符合ONFI规范的,写好的软件,除了可以操作多家与ONFI兼容的Nand Flash之外,而对于以后出现的新的技术,新制程的Nand Flash,只要符合ONFI规范,也同样可以支持,可以在旧的软件下工作,而不需要由于Nand Flash的更新换代,而更改上层软件和驱动,这个优势,由于对于将Nand Flash芯片集成到自己系统中的相关开发人员来说,是个好消息。

2.2 LBA规范是什么

LBA Nand Flash,Logical Block Address,逻辑块寻址的Nand Flash,是Nand Flash大厂之一的Toshiba,自己独立设计出来的新一代的Nand Flash的规范。

之所以叫做逻辑块寻址,是相对于之前常见的,普通的Nand Flash的物理块的寻址来说的。常见的Nand Flash,如果要读取和写入数据,所用的对应的地址是对应的:block地址+block内的Page地址+Page内的偏移量 = 绝对的物理地址,

此物理块寻址,相对来说有个缺点,那就是,由于之前提到的Nand Flash会出现使用过程中出现坏块,所以,遇到这样的坏块,首先坏块管理要去将此坏块标记,然后将坏块的数据拷贝到另一个好的block中,再继续访问新的block。

而且数据读写过程中,还要有对应的ECC校验,很多情况下,也都是软件来实现这部分的工作,即使是硬件的ECC校验,也要写少量的软件,去操作对应寄存器,读取ECC校验的结果,当然别忘了,还有对应的负载平衡等工作。

如此的这类的坏块管理工作,对于软件来说,很是繁重,而且整个系统实现起来也不是很容易,所以,才催生了一个想法,是否可以把ECC校验,负载平衡,坏块管理,全部都放到硬件实现上,而对于软件来说,我都不关心,只关心有多少个Block供我使用,用于数据读写。

针对于此需求,Toshiba推出了LBA逻辑块寻址的Nand Flash,在Nand Flash存储芯片之外,加了对应一个硬件控制权Controller,实现了上述的坏块管理,ECC校验,负载平衡等工作,这样使得人家想要用你LBA的Nand Flash的人,去开发对应的软件来驱动LBA Nand Flash工作,相对要做的事情,就少了很多,相对来说就是减轻了软件系统集成方面的工作,提高了开发效率,缩短了产品上市周期。

LBA Nand,最早放出对应的样片(sample)是在2006年8月。

网上找到一个LBA Nand Flash的简介:

http://www.toshiba-components.com/prpdf/5678E.pdf

现早已经量产,偶在之前开发过程中,就用过其某款LBA的Nand Flash。

目前网上还找不到免费的LBA的规范。除非你搞开发,和Toshiba签订NDA协议后,才可以拿到对应的specification。

关于Toshiba LBA Nand规范,在此多说一点(参考附录中:lba-core.c):

LBA Nand分为PNP,VFP和MDP三种分区。

PNP主要用于存放Uboot等启动代码;

VFP主要用于存放uImage等内核代码;

MDP主要用于存放用户的数据,以及rootfs等内容;

2.3 为何会有ONFI和LBA

在解释为何会有ONFI和LBA之前,先来个背景介绍:

目前Nand Flash的厂家有Samsung,Toshiba,Intel, Hynix,Micron,Numonyx,Phison ,SanDisk,Sony,Spansion等。

2.3.1 技术层面的解释

ONFI的出现,上面已经解释过了,就是为了统一Nand Flash的接口,使得软件兼容性更好;而LBA的出现,是为了减轻软件方面对Nand Flash的各种管理工作。上面这些解释,其实只是技术上解释。

2.3.2 现实层面的解释

而现实方面是,ONFI是Intel主导的,其他一些Nand Flash厂商参与制定出来的一套Nand Flash的规范,但是却没有得到Nand Flash的两个大厂家的认可,一个是以第一厂商自居samsung,另一个是Nand Flash技术引导者的Toshiba。所以,可以算是在Nand Flash领域里,老三带着一帮小的,定了一个规范,但是老大和老二却不买账。因此,技术上的Nand的老大Toshiba联手产量上的老大,自己去推出了另外一套规范LBA。

这可以称得上是典型的规范之争吧。

2.4 ONFI和LBA的区别和联系

总的来说,ONFI在对于旧的Nand Flash的兼容上,都是相对类似的。

2.4.1 ONFI和LBA的区别

总的来说:

ONFI规范,更注重对于Nand Flash的操作接口方面的定义 + ONFI LBA Nand的定义,而Toshiba LBA规范,主要侧重于LBA的Nand的定义。

2.4.2 ONFI和LBA的联系

ONFI Block Abstracted NAND Specification,基本上和Toshiba的LBA,没太多区别,只是Toshiba的LBA规范中,又多了些其他模式和应用类别。

总的来说,可以这么划分:

ONFI = Nand Flash操作接口的统一 + ONFI的LBA Nand

Toshiba LBA = 等价于ONFI的LBA Nand + 多种模式和对应的不同应用

论坛徽章:
0
4 [报告]
发表于 2011-06-28 17:20 |只看该作者
本帖最后由 crifan 于 2011-06-28 20:46 编辑

第三章内容:

3 Nand Flash的Unique ID
3.1 什么是Unique ID唯一性标识

Unique ID,翻译为中文就是,独一无二的ID,唯一性标识。

很明显,这个Unique ID是为了用来识别某些东西的,每一个东西都拥有一个独一无二的标识信息。

在Nand Flash里面的Unique ID,主要是某个ID信息,保证每个Nand Flash都是独一无二的。主要用于其它的使用Nand Flash的用户,根据此unique id去做加密等应用,实现某些安全方面的应用。

简而言之,就是用Nand Flash的Unique ID来实现安全相关的应用,比如加密,版权保护等等。

3.2 不同Nand Flash厂商的对Unique ID的不同的实现方法

此处,继续解释之前,还要再次赘述一下:

目前Nand Flash的厂家有samsung,Toshiba,Intel, Hynix,Micron,Numonyx,Phison ,SanDisk,Sony,Spansion等。

由于前面所说的Nand Flash的规范之争,即Toshiba & Samsung和Intel + 其它厂商(Hynix,Micron,Numonyx,Phison ,SanDisk,Sony,Spansion等)之争,导致对于Unique ID这么个小的功能点(feature),不同的方面,弄出了不同的实现(做法)。

下面就来解释一下各个厂家关于Unique ID的实现方法,以及如何读取对应的Unique ID:

3.2.1 Toshiba东芝的Nand的Unique ID

网上找到一个datasheet:

Toshiba TH58NS512DC

http://datasheet.elcodis.com/pdf/11/23/112371/th58ns512dc-to51y.pdf

中有提到:

P1:

“The TH58NS512DC is a SmartMediaTM with ID and each device has 128 bit unique ID number embedded in the device. This unique ID number is applicable to image files, music files, electronic books, and so on where copyright protection is required.”

即每个Toshiba的TH58NS512DC中,都有一个128 bit=16 byte的Unique ID,可用于图片,音乐,电子书等应用中的版权保护。

P24:

Figure 2 Toshiba的Unique ID

3.2.1.1 读取Toshiba的Nand的Unique ID

从上面可以看出,Toshiba的Nand中,关于Unique ID,是需要先通过普通的0x90,即Read ID的命令,去读取Nand的ID,找到第三个字节(3rd byte),然后判断其是否是0xA5,如果是0xA5,然后才能确定此Nand里面是有Unique ID的,然后才有去读取Unique ID这一说。

而关于如何独缺Unique ID,则需要和自己去联系Toshiba,和其签订NDA协议后,才可得知读取Nand的Unique ID的方法。

3.2.2 Samsung三星的Nand的Unique ID

网上找到的某款三星的Nand的datasheet:

Samsung K9F5608U0B

http://hitmen.c02.at/files/docs/psp/ds_k9f5608u0b_rev13.pdf
“6. Unique ID for Copyright Protection is available
- The device includes one block sized OTP (One Time Programmable), which can be used to increase system security or to provide identification capabilities. Detailed information can be obtained by contact with Samsung”

即,Samsung的Nand的Unique ID,也和Toshiba的用途类似,也主要是用于版权保护,但是其实现却不同。

Samsung的Unique ID的实现,是专门在Nand 里面配备了一个OTP的Block,而此Nand芯片的Block大小是16KB。

而关于如何操作此OTP,即如何写入数据和读取数据,此处未说明。

欲知详情,请联系三星。

不过个人理解,应该和普通的block的操作类似,即普通的block,包含很多page,每个page的操作,有对应的page read,用对应的page read命令来读取此特殊的OTP的block里面的数据。

而此OTP的block里面的数据是什么,完全取决于自己最开始往里面写入了什么数据。说白了就是,你根据自己需求,在你的产品出厂的时候,写入对应的数据,比如该款产品的SN序列号等数据,然后自己在用page read读取出相应数据后,自己解析,得到自己要的信息,用于自己的用途,比如版权保护等。

3.2.2.1 读取Samsung的Nand的Unique ID

如前所述:

关于如何操作此OTP的block,即如何写入数据和读取数据,此处未说明。

即想要知道如何读取Samsung的Nand的Unique ID,请自己去问三星。

3.2.3 遵循ONFI规范的厂商的Nand的Unique ID

主要指的是Intel英特尔,Hynix海力士,Micron美光,Numonyx恒亿,Spansion飞索等公司。

对应的Nand 的Unique ID的相关定义,ONFI的规范中都有,现简要摘录如下:

ONFI 2.2

http://onfi.org/wp-content/uploads/2009/02/ONFI%202_2%20Gold.pdf

ONFI规范中,在“5.7.1. Parameter Page Data Structure Definition”中,如图:

Figure 3 ONFI的参数页数据结构定义

定义了一个page的数据,用于存储对应的Nand的各种参数,其中,有一个第8个字节的bit5==1的时候,表示支持“Read Unique ID”的命令,即说明此Nand芯片支持此命令,如果byte8的bit5==0,那么说明不支持,也就没法去读Unique ID了。

3.2.3.1 读取遵循ONFI的厂商的Nand的Unique ID

如果经过上述判断,此符合ONFI的Nand Flash支持Read Unique ID命令,次此时就可以通过该命令来读取对应的Nand Flash的Unique ID了。

此Read Unique ID的详细解释为:

5.8. Read Unique ID Definition

The Read Unique ID function is used to retrieve the 16 byte unique ID (UID) for the device. The unique ID when combined with the device manufacturer shall be unique.

The UID data may be stored within the Flash array. To allow the host to determine if the UID is without bit errors, the UID is returned with its complement, as shown in Table 47. If the XOR of the UID and its bit-wise complement is all ones, then the UID is valid.”

即用Read Unique ID命令来读取128bit=16字节的Unique ID,但是呢,为了用于防止写入的Unique ID有误,因此在16字节后面又添了个对应的补码,即每位取反的结果,这样前16字节的Unique ID和后16字节的Unique ID的补码,构成了32字节,算作一组,如下图所示:

Figure 4 ONFI中Unique ID的结构

“To accommodate robust retrieval of the UID in the case of bit errors, sixteen copies of the UID and the corresponding complement shall be stored by the target. For example, reading bytes 32-63 returns to the host another copy of the UID and its complement. Read Status Enhanced shall not be used during execution of the Read Unique ID command.

Figure 57 defines the Read Unique ID behavior. The host may use any timing mode supported by the target in order to retrieve the UID data.”

而为了进一步防止出错,将上面32字节算一组,重复了16次,将这16个32字节的数据,存在Nand Flash里面,然后用Read Unique ID命令去读取出来,取得其中某个32字节即可,然后判断前16字节和后16字节取反,如果结果所有位都是1,那么结果即为16个0xFF,那么说明Unique ID是正确的。否则说明有误。

Read Unique ID的命令的详细格式如下图所示:

Figure 5 ONFI中Read Unique ID命令的时序图


即先发送0xED命令,再发送0x00地址,然后等待Nand Flash的busy状态结束,就可以读取出来的那16组的32个字节了,然后用上面办法去判断,找到前16字节和后16字节异或得到结果全部16字节都为0xFF,即说明得到了正确的Unique ID。至此,符合ONFI规范的Unique ID,就读取出来了。

论坛徽章:
0
5 [报告]
发表于 2011-06-28 17:24 |只看该作者

论坛徽章:
0
6 [报告]
发表于 2011-06-28 17:26 |只看该作者
crifan大侠 效率啊!顶顶顶!

论坛徽章:
0
7 [报告]
发表于 2011-06-28 17:28 |只看该作者
回复 6# armips


    话说,还是很耗精力写这个的。。。

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
8 [报告]
发表于 2011-06-28 17:43 |只看该作者

crifan兄真是好人呀,介绍的太详细了,精华

论坛徽章:
0
9 [报告]
发表于 2011-06-28 18:45 |只看该作者
cfifan写了不少详细的文档呢,实在佩服。

论坛徽章:
0
10 [报告]
发表于 2011-06-28 20:37 |只看该作者
回复 8# T-Bagwell


和别人分享知识,也是种快乐~ 只是写这类东西,比较耗时耗力,所以不容易多产。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP