1.2.16.1. Nand Flash的Unique ID

1.2.16.1.1. 什么是Unique ID唯一性标识

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

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

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

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

1.2.16.1.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:

1.2.16.1.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:

图 1.9. Toshiba的Unique ID

Toshiba的Unique ID



1.2.16.1.2.2. 读取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的方法。

1.2.16.1.3. 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读取出相应数据后,自己解析,得到自己要的信息,用于自己的用途,比如版权保护等。

1.2.16.1.3.1. 读取Samsung的Nand的Unique ID

如前所述:

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

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

1.2.16.1.4. 遵循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中,如图:

图 1.10. ONFI的参数页数据结构定义

ONFI的参数页数据结构定义


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

1.2.16.1.4.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字节,算作一组,如下图所示:

图 1.11. ONFI中Unique ID的结构

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的命令的详细格式如下图所示:

图 1.12. ONFI中Read Unique ID命令的时序图

ONFI中Read Unique ID命令的时序图


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