flash简单总结
按内部存储介质来分,可以将flash分成nor flash和nand flash。
按访问方式来分,可以将flash分成串行(serial)flash和并行(parallel)flash。
有一些特性是对所有类型的flash都有效的,比如,都有擦除(erase)和写入(program)步骤。擦除操作可以让bit由0变成1,而写操作只能让bit由1变成0。即,想写数据到flash,一般都要先擦除再写入。
另外,flash一般都有page,block(sector)这样的层次结构。
最先出现的是nor flash,它是并行的。它有大量的地址线和数据线,可以像ddr那样直接挂在总线上被cpu访问,设备上电时,可以直接在flash上执行程序。由于这种flash信号线较多,各个厂家的产品不兼容,因此制定了CFI接口来进行统一。
并行nor flash一般可以随机读取(random read)。
并行nor flash一般可以按字节写入。
并行nor flash一般可以按block擦除。
随后出现了串行nor flash,一般是spi接口的,因此也叫spi nor flash。它对外提供的就是标准spi的那些di,do信号了,并不能直接挂在总线上被cpu访问。但这种flash一般也会提供一个xip(execute in place)功能。想要用这个功能,cpu也要有相应的适配(比如有一个额外的模块,将spi信号和AHB总线信号进行相互转化)。
串行nor flash一般可以按字节读取。
串行nor flash一般是按page写入(注意partial page program)。
串行nor flash一般可以按block擦除。
另外一大类是nand flash。
常规的nand flash是并行的(比如由IO0~7用于地址和数据的输入和输出)。串行的nand flash一般也是用spi接口,即spi nand flash(应该是在flash芯片内部做了串并转换?)。
nand flash(包括spi nand flash)一般都是按页读写,按block擦除。
注意点1,并行nor flash一般可以按字节写入,一般理解,按字节写入和随机写入应该也没有什么差别了。但由于flash写(program)操作只能让bit由1变成0,因此这样的随机写入并没有意义。
注意点2,串行nor flash(spi nor flash)一般是按page写入,但它一般也支持部分页写入(partial page program)。发送page写入命令时,指定的page地址可以不是page对齐的,而是指定到page内部,只要写入数据的长度不超过该page的末尾即可(当然写操作之前也要有擦除操作)。