Flash详述
非易失性存储设备
(Non-volatile Memory Device)
断电数据不丢失,除了Flash(Flash Memory),还有硬盘,ROM等。易失性存储设备
(Volatile Memory Device)
断电数据丢失了,如内存SDRAM,DDR SDRAM,DDR2,DDR3等。
Flash分为nand flash
和nor 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物理存储单元的阵列组织结构
一个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为扩展分区等等。
本文地址:https://blog.csdn.net/yangjinjingbj/article/details/107350585
上一篇: 实例化对象时对应的JVM内存结构
推荐阅读
-
Javascript+CSS实现Flash动态新闻效果(pp原创)_图象特效
-
php 广告调用类代码(支持Flash调用)_PHP
-
flash recovery area(闪回恢复区)管理
-
flash怎么画简笔画毛毛虫? flash画毛毛虫图形的教程
-
php与flash as3 socket通信传送文件实现代码
-
对STMG474RE Flash 空间大小不同BootLoader方法
-
Flash类有哪些组成? flash自定义类的教程
-
DEDE里这个页面FLASH不显示是因为什么?_html/css_WEB-ITnose
-
HTML中嵌入Flash如何调整Flash大小_html/css_WEB-ITnose
-
nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器