本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Read ID(90h)
识别目标设备命令。
90h+20h:通过返回值可以知道是否支持ONFI协议,若支持前四个字节的签名是ONFI的ASCII编码。
90h+00h:能够知道设备厂商识别号/ID号/设备的一些基本信息(page size, block size, plane num…)。每个厂商的具体信息可以查看datasheet,对比读出来结果是否一样。
Read Unique ID(EDh)
Uid,唯一ID,大小16个字节。当该命令发出后会返回512个字节,每32个字节为一个副本,每个副本的前16个字节是uid,后16个是uid的补码。通过位或运算,如果全是1则获取的UID正确。使用者可以每个副本尝试,直到找到正确为止。
Read Parameter Page(ECh)
参数页读取命令。返回的数值中包含了设备的各种出厂信息:支持协议,协议版本,支持的传输模式,容量,block size …,具体bit所代表的意义可以从手册中得知。
Read status(70h)
读取状态寄存器,其值反映上一次操作的状态(本次操作是70h)。一旦进入读取状态模式,命令寄存器仍处于读取状态命令模式直到另一个有效命令写入寄存器。返回一个8位的值,具体每位代表的意思可以查看datasheet,我们常用到的是第0位(用于返回命令执行结果“有无ECC错误”)和第6位(命令执行状态,是否成功或者繁忙。与R/B信号线功能一致)。
Read Status Enhanced(78h)
获取状态寄存器值,主要是在multi plane操作中70h查状态发现操作失败时,可以发送78h检查是哪个plane操作失败。返回值中的位定义可以在数据手册中查看。
Page Read(00h-30h)
该指令发出后,数据被传输到cache寄存器,可以通过读取状态寄存器得到操作结果,判断SR[6]是否就绪,就可以重新读取数据。数据读取时可以通过修改读取列指令来输出想要的列(页内)数据。
Multi-plane page read(00h-32h, 00h-30h)
PlaneA和planeB应该有相同的页面地址,不支持multi-plane操作读取不同plane中的不同page。
Cache read(31h, 00h-31h)
高速缓存读取(31h顺序读,00h-31h随机读)。涉及到基础知识的page(data) register和cache register,允许页面缓冲区读取页面,同时从flash读取另一页数据。
该命令发出前要先执行上面的page read(00h-30h),R/B拉低,持续tR时间,然后拉高发出以下任一命令:
31h:拷贝下一页数据到data寄存器
00h-31h:拷贝这个命令中指定的那一页的数据到他对应的data寄存器。