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端口。

有几个点需要主要

  1. 当一个Flash设备正在执行操作,host将该Flash对应的CE#信号拉高,Flash的操作仍然会执行完成

  2. 当host支持16位总线时,只有数据是以16位进行传输的,命令和地址是8位的

  3. 上电以后,Vcc电平到达正常值需要一段时间,R/B#信号在这段时间里是未定义的,50us以后,R/B#有效

  4. 只有设备上没有命令在执行的时候,才可以把WP#拉低

内存组织

一个设备有一个或多个目标,一个目标有一个或多个逻辑单元(LUN)。逻辑单元是独立执行指令的最小单位。一个逻辑单元又被分为多个块(block),一个块包含多个页(page)。如下图

https://github.com/awokezhou/LinuxPage/blob/master/res/spec/onfi-specfication-for-nandflash-01.png

块是进行Flash擦除的最小单元,LUN里块的数量没有严格限制。页是地址可访问的进行编程和读操作最小单元。一个页包含多个字节或者字,如果不包含空闲区域大小(oob),字节数必须是2的幂。而一个块包含的页数量必须是32的整数倍。

每一个LUN最少有一个页寄存器,页寄存器的作用是在读取页和页编程前的数据暂存。

地址定义

地址分行地址和列地址,列地址用于定位一个页内的字节,其实就是页起始地址的偏移。行地址用于定位LUN、块和页。