欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Flash详述

程序员文章站 2022-03-26 21:02:17
Flash全称Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),这类设备,除了Flash,还有其他比较常见的如硬盘,ROM等。相对应的是易失性存储设备(Volatile Memory Device)。断电数据就丢失了,如常用的内存,不论以前的SDRAM,DDR SDRAM,还是现在的DDR2,DDR3等,都是断电后数据就没了。Flash的内部存储是MOSFET,里面有个悬浮门(Floating Gate),是真正存储数据的单元。SLC MLCNa...

非易失性存储设备(Non-volatile Memory Device)
断电数据不丢失,除了Flash(Flash Memory),还有硬盘,ROM等。
易失性存储设备(Volatile Memory Device)
断电数据丢失了,如内存SDRAM,DDR SDRAM,DDR2,DDR3等。

Flash分为nand flashnor flash
NAND和NOR的比较

1.NOR的成本高,读写数据时不易出错。适合应用于存储少量的代码。
2.NAND的成本低,数据读写容易出错,一般需要有对应的软件或者硬件的数据校验算法(ECC)。
相对来说容量大、价格便宜,适合存储大量的数据。其在嵌入式系统中的作用,相当于PC上的硬盘,用于存储大量数据。
常见的应用组合是,用小容量的Nor Flash存储启动代码,如uboot,Nand Flash存放的是Linux的内核镜像和根文件系统,以及余下的空间分成一个数据区。
Nor flash,有类似于dram之类的地址总线,因此可以直接和CPU相连,CPU可以直接通过地址总线对nor flash进行访问,
而nand flash没有这类的总线,只有IO接口,只能通过IO接口发送命令和地址,对nand flash内部数据进行访问。
相比之下,nor flash就像是并行访问,nand flash就是串行访问,所以相对来说,前者的速度更快些。
SLC MLC

Nand Flash按照内部存储数据单元的电压的不同层次,也就是单个内存单元中,是存储1位数据还是多位数据,分为SLC和MLC。

SLC

Single Level Cell

单个存储单元只存储一位数据,表示成1或0。
对于数据的表示,单个存储单元中内部所存储电荷的电压,和某个特定的阈值电压Vth相比,
如果大于此Vth值表示1,反之,小于Vth表示0。

写入1,就是控制External Gate去充电,使得存储的电荷够多,超过阈值Vth,就表示1。
写入0,就是将其放电,电荷减少到小于Vth,就表示0。
Flash由于物理特性,使得内部存储的数据,只能从1变成0,只是方便统一充电,不方便单独的存储单元去放电,
所以只能从1变成0,也就是释放电荷。

关于为何Nand Flash不能从0变成1?
物理上来说,是可以实现每一位的从0变成1,但实际上,对于实际的物理实现,出于效率的考虑,
如果对于每一个存储单元都能单独控制,即0变成1就是对每一个存储单元单独去充电,所需的硬件实现很复杂昂贵,
同时所进行对块擦除的操作,无法实现之前一闪而过的速度。
MLC

Multi Level Cell

与SLC相对应,单个存储单元可以存储多个位,如2位,4位等。
实现机制是通过控制内部电荷的多少,分成多个阈值,通过控制里面的电荷多少,而达到所需要的存储成不同的数据。
假设输入电压是Vin=4V,那么可以设计出2的2次方=4个阈值,1/4的Vin=1V,2/4的Vin=2V,3/4的Vin=3V,Vin=4V,分别表示2位数据00,01,10,11,对于写入数据就是充电,通过控制内部电荷的多少,对应表示不同的数据。
对于读取,则是通过对应的内部的电流(与Vth成反比),然后通过一系列解码电路完成读取,解析出所存储的数据。这些具体的物理实现,都是有足够精确的设备和技术,才能实现精确的数据写入和读出的。
单个存储单元可以存储2位数据的,称作2的2次方=4 Level Cell (不是2 Level Cell),
同理对于单个存储单元可以存储4位数据的,称作2的4次方=16 Level Cell。

识别SLC和MLC
Nand Flash设计中,有个命令叫做Read ID,意思是读取芯片的ID。
读取最少4个字节,新的芯片支持5个甚至更多。可以解析出很多相关的信息,如:此Nand Flash内部是几个芯片(chip)所组成,每个chip包含了几片(Plane),每一片中的页大小,块大小等。
这些信息中有一个是识别flash是SLC还是MLC。第3个字节(中的Cell Type)所表示的信息识别SLC/MLC。

Nand Flash物理存储单元的阵列组织结构
Flash详述

一个nand flash由很多个块(Block)组成,块的大小可以是128KB、256KB、512KB,此处是128KB。
每个块里面又包含了很多页(page)。每个页的大小可以是256B、512B,这类的nand flash被称作small block,
地址周期只有4个。现在常见的nand flash多数是2KB,被称作big block,更新的是4KB。

块是Nand Flash的擦除操作的最小单位。
页是Nand Flash的写入操作的最小单位。

每个页还有一块区域,空闲区域/冗余区域,Linux系统中叫OOB(Out Of Band)
这个区域是最初基于Nand Flash的硬件特性:数据在读写时候相对容易错误,为了保证数据的正确性,须要有
对应的检测和纠错机制,此机制被叫做EDC(Error Detection Code)/ECC(Error Code Correction),
所以设计了多余的区域,用于放置数据的校验值。

Nand Flash数据存储单元的整体架构
常见的nand flash内部只有一个芯片(chip),每个chip只有一个plane。
复杂的容量大的nand flash,内部有多个chip,每个chip有多个plane。这类的nand flash有更加高级的功能。

Flash名称的由来
Flash的擦除操作是以block块为单位的,与此对应的是其他存储设备,如硬盘/内存,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将一个block全部擦除为1,由于是一下子就擦除了,擦除用的时间很短,可以用一闪而过来形容,所以叫Flash Memory(闪存)。

                            普通设备(硬盘/内存等)	  Flash
读取/写入的叫法	           读取/写入	             读取/编程(Program)
读取/写入的最小单位	        Bit/位	                   Page/页
擦除(Erase)操作的最小单位	Bit/位	                  Block/块
擦除操作的含义	         将数据删除/全部写入0	将整个块都擦除成全是1,也就是里面的数据是0xFF
对于写操作	                直接写即可	             在写数据之前,要先擦除,然后再写
硬盘和固态硬盘

固态硬盘内部由NAND存储芯片构成,通过高低电平和改变晶体管开关状态,以此来存储数据。
机械硬盘是一种采用磁介质的数据存储设备,通过磁头改写盘片上的正负磁极来存储数据。

硬盘是一种采用磁介质的数据存储设备,硬盘是由多个盘片叠加在一起,互相之间由垫圈隔开。
数据存储在密封于洁净的硬盘驱动器内的若干个磁盘片上。

盘片(disk)
盘片的表面涂上磁性介质,表面被加工的相当平滑。
磁头(head)
每个盘片有两个磁头,两面一边一个。

磁道(track)
在磁盘片的每一面上,以转动轴为轴心、以一定的磁密度为间隔的若干个同心圆被划分成磁道。
扇区(sector)
磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,硬盘的读写以扇区为基本单位。

主引导扇区
硬盘的第一个扇区(0道0头1扇区)
主引导区内有两项内容:主引导记录和硬盘分区表。
主引导记录是一段程序代码,对硬盘上安装的操作系统进行引导;硬盘分区表则存储了硬盘的分区信息。

计算机启动时将读取该扇区的数据,并对其合法性进行判断(扇区最后两个字节是否为0x55AA或0xAA55),
如合法则跳转执行该扇区的第一条指令。所以硬盘的主引导区常常成为病毒攻击的对象,从而被篡改甚至被破坏。
可引导标志:0x80为可引导分区类型标志;0表示未知;1为FAT12;4为FAT16;5为扩展分区等等。

Flash详述

本文地址:https://blog.csdn.net/yangjinjingbj/article/details/107350585

相关标签: Other