1.3.1.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的命令集合为:

图 1.13. ONFI中的Nand Flash的命令集合

ONFI中的Nand Flash的命令集合


可以看到,其中常见的一些命令,比如

  1. page read(0x00,0x30)
  2. page write(0x80,0x10)
  3. block erase(0x60,0xD0)
  4. Reset(0xFF)

等等命令,都是和普通的Nand Flash的命令是一样的,而额外多出一些命令,比如Read Unique ID(0xED)等命令,是之前某些Nand Flash命令所不具有的。

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

1.3.1.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,基本没有太多区别。

1.3.1.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芯片集成到自己系统中的相关开发人员来说,是个好消息。