根据上面提到过的,Flash最小操作单位,相对于普通存储设备,就显得有些特殊。
因为一般存储设备,比如硬盘或内存,读取和写入都是以位(bit)为单位,读取一个bit的值,将某个值写入对应的地址的位,都是可以按位操作的。
但是Flash由于物理特性,使得内部存储的数据,只能从1变成0,这点,这点可以从前面的内部实现机制了解到,对于最初始值,都是1,所以是0xFFFFFFFF,而数据的写入,即是将对应的变成0,而将数据的擦出掉,就是统一地,以block为单位,全部一起充电,所有位,都变成初始的1,而不是像普通存储设备那样,每一个位去擦除为0。而数据的写入,就是电荷放电的过程,代表的数据也从1变为了0。
所以,总结一下Flash的特殊性如下:
表 1.2. Flash和普通设备相比所具有的特殊性
| 普通设备(硬盘/内存等) | Flash |
---|
读取/写入的叫法 | 读取/写入 | 读取/编程(Program)① |
读取/写入的最小单位 | Bit/位 | Page/页② |
擦除(Erase)操作的最小单位 | Bit/位 | Block/块② |
擦除操作的含义 | 将数据删除/全部写入0 | 将整个块都擦除成全是1,也就是里面的数据都是0xFF③ |
对于写操作 | 直接写即可 | 在写数据之前,要先擦除,然后再写 |
| 提示 |
---|
- 之所以将写操作叫做编程,是因为flash是从之前的EPROM、EEPROM等继承发展而来,而之前的EEPROM,往里面写入数据,就叫做编程Program,之所以这么称呼,是因为其对数据的写入,是需要用电去擦除/写入的,所以叫做编程。
- 对于目前常见的页大小是2K/4K的Nand Flash,其块的大小有128KB/256KB/512KB等。而对于Nor Flash,常见的块大小有64K/32K等。
- 在写数据之前,要先擦除,内部就都变成0xFF了,然后才能写入数据,也就是将对应的位由1变成0。
|