概述
ONFI
是Nand Flash的一套公开标准
官网:http://www.onfi.org/
机缘巧合,就看一下
官网有提供PDF下载,最新版本5.0,383页
上来就看英文实在一头雾水,最后找到了4.0的中文版
电子发烧友网:http://www.elecfans.com/soft/68/guide/2017/20170727535427.html
后来,还是想先看些入门科普级的
于是在京东读书上找到了《固态存储:原理、架构和数据安全》
ONFI 5.0目录
- 总体介绍,概念缩写
- 对外的物理接口(管脚)
- 内部的物理结构
- 数据接口和时序
- 命令字
- 组合操作
- 操作流程
第一章
第二章:管脚
Bing搜了把tsop-48
https://cn.bing.com/search?q=tsop-48&qs=n&form=QBRE&sp=-1&pq=tsop-48&sc=1-7&sk=&cvid=94EEFB7B26BE45B6877E2025ACCAEE7D
很多是卖存储贴片(?成品)
有些管脚硬件和工艺人员更关注,比如电源等不可变的
有些软件和驱动人员更关注,比如查询状态、控制使能等可变的
所以重点看2.8章:信号描述
像看寄存器手册一样,尽力理解每个管脚干啥的
管脚 | 理解 |
---|---|
R/B_x_n。O | Ready/Busy。输出管脚。用于获取Ready/Busy状态 |
RE_x_n(RE_x_t)。I | Read Enable (True)。输入管脚。用于设置读模式 |
RE_x_c。I | Read Enable Complement。输入管脚。一定场景选用 |
W/R_x_n。I | Write/Read Direction。输入管脚。看名字像是可以控制读写方向(再进一步怎么玩,没有项目实践,还真就不知道) |
CE_x_n。I | Chip Enable。输入管脚。用于多芯片场景,表示选中 |
… | (后面再慢慢看) |
第三章:内部结构
能不能真正入门,就看对这一章节的理解了
一个设备有多个target(用CE_n信号选中)。一个target包含若干个LUN(逻辑单元)
LUN是能够独立执行CMD和上报状态的最小单元。特别是,各个独立的LUN,可以并行执行任意命令序列。
例如,允许在LUN 0上执行Page Program操作,同时在LUN 1上执行Read命令
到3.1.3章节看多LUN操作限制
一个LUN包括至少一个Page寄存器和一个Flash阵列
Page寄存器数量取决于LUN支持的多Plane操作数量
Flash阵列包含若干Block
Block是LUN Flash阵列中,可擦除数据的最小单元。LUN中的Block数量没有限制
Block包含若干Page
Page是读写操作寻址的最小单元。Page包含若干Byte或Word。每个Page的用户数据Byte数量,不包括额外的数据区,应该是2的N次方。每个Block中的Page数量应该是32的倍数
每个LUN应该有至少一个Page寄存器。Page寄存器用于临时存储数据,在移到Flash阵列的Page之前,或者在从Flash阵列的Page移出之后
Page寄存器中的Byte或Word位置,被称为Column
在这种结构里,有2种机制实现并行。同时会有多个CMD到不同的LUN。为了进一步在一个LUN中实现并行,多Plane操作可能用于执行额外的并行依赖操作
第四章:数据接口和时序
ONFI支持5种不同的数据接口类型:SDR、NV-DDR、...
SDR数据接口是传统的NAND接口,使用RE_n去锁定数据读取,WE_n去锁定数据写入,不包括时钟
NV-DDR数据接口双倍数据数率,包括标识锁定哪些命令字和地址的一个时钟,标识锁定哪个数据的一个数据闸门
...
第五章:CMD定义
表5-1概述ONFI的命令集
第一个CMD周期的指定值,表示将要执行的CMD。有些CMD有第二个CMD周期,表5-1有指定。通常,CMD有第二个CMD周期的,都有一个地址
第六章:多平面操作
LUN支持多平面读取、写和擦除操作。多平面操作是指向同一LUN上的不同Block发出相同类型的多个命令。有关解决多平面操作的限制,请参见第5.7.1.27节。多平面操作有两种方法:并行操作和重叠操作。
在执行多平面操作时,这些操作/功能应为相同的类型。可用于多平面操作的功能有:
- 写Page
- Copyback方式的读和写
- 块擦除
- 写
第七章:操作流程
7.1.目标操作流程
目标状态机描述了与目标一起操作时允许的序列。如果没有一个弧为真,则目标仍处于当前状态。
7.1.1.变量
本节描述了在目标状态机中使用的变量。
tbStatusOut
当数据读取周期应该返回状态值时,此变量被设置为TRUE。此变量的上电值为FALSE。
tbChgCol
允许使用“Change Read Column”更改列时,将此变量设置为TRUE。此变量的上电值为FALSE。
tbChgColEnh
当允许使用“Change Read Column Enhanced”更改列时,将此变量设置为TRUE。此变量的上电值为FALSE。
tCopyback
如果目标正在发出Copyback命令,则此变量设置为TRUE。此变量的上电值为FALSE。
tLunSelected
此变量包含主机当前选择的LUN。此变量的上电值为0。
tLastCmd
此变量包含目标所接收到的最后一个命令的第一个周期(除了70h/78h)。
tReturnState
此变量包含状态操作后要返回的状态。
tbStatus78hReq
当下一个状态操作应为78h命令(而不是70h命令)时,此变量被设置为TRUE。此变量的上电值为FALSE。
其它网文参考
-
NAND FLash基础概念介绍
https://www.cnblogs.com/yfceshi/p/6854968.html -
Nand Flash数据存储单元的整体架构
https://www.cnblogs.com/yfceshi/p/6854968.html