FLASH——ONFI Spec - awokezhou/LinuxPage GitHub Wiki
概述
ONFI(Open NAND Flash Interface, 开放性NAND Flash接口)标准是业界对NAND Flash的一种规范,另一个比较有名的是LAB,一般NAND Flash芯片上都会咋特性介绍的章节标出它支持的标准。ONFI是由Inter主导,其他很多Flash的大厂商一起制定的,LAB是东芝独立设计的规范。
ONFI规范现在最新的是4.1版本,所有的版本都可以在官方网站下载到:http://www.onfi.org/specifications/
本文以ONFI2.0为准,对该标准的重要规范进行总结
物理特性
NAND Flash的常见封装是48引脚的TSOP或者WSOP。以下对各引脚进行说明:
-
R/Bx#:表示Flash的当前状态,低电平时表示当前正在进行编程,高电平表示空闲
-
REx#:读使能
-
WEx#:写使能
-
W/Rx#:读写方向
-
CEx#:片选
-
CLEx:命令锁存使能
-
ALEx:地址锁存使能
-
CLKx:时钟信号
-
WPx#:写保护,低电平表示Flash不允许擦除和编程操作
-
I/O0 – I/O7: I/O端口低八位
-
I/O8 - I/O15:I/O端口高8位
NAND Flash根据总线宽度有8位和16位两种,只有16位Flash有高8位I/O端口。
有几个点需要主要
-
当一个Flash设备正在执行操作,host将该Flash对应的CE#信号拉高,Flash的操作仍然会执行完成
-
当host支持16位总线时,只有数据是以16位进行传输的,命令和地址是8位的
-
上电以后,Vcc电平到达正常值需要一段时间,R/B#信号在这段时间里是未定义的,50us以后,R/B#有效
-
只有设备上没有命令在执行的时候,才可以把WP#拉低
内存组织
一个设备有一个或多个目标,一个目标有一个或多个逻辑单元(LUN)。逻辑单元是独立执行指令的最小单位。一个逻辑单元又被分为多个块(block),一个块包含多个页(page)。如下图
块是进行Flash擦除的最小单元,LUN里块的数量没有严格限制。页是地址可访问的进行编程和读操作最小单元。一个页包含多个字节或者字,如果不包含空闲区域大小(oob),字节数必须是2的幂。而一个块包含的页数量必须是32的整数倍。
每一个LUN最少有一个页寄存器,页寄存器的作用是在读取页和页编程前的数据暂存。
地址定义
地址分行地址和列地址,列地址用于定位一个页内的字节,其实就是页起始地址的偏移。行地址用于定位LUN、块和页。