入门基础之——flash
不得不说韦老师的课程还是很需要时间去消化。今天改变了学习策略,遇到不会的知识点,先查资料。
以前在单片机编程中,都只是知道代码存在flash中,而一听韦老师的课程,就是nand flash启动或者nor flash启动,所以找了一些这方面的参考资料弥补自己知识的空白。
快闪存储器(英语:flash memory),是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器。这种科技主要用于一般性数据存储,以及在电脑与其他数字产品间交换传输数据,如储存卡与U盘。闪存是一种特殊的、以宏块抹写的EEPROM。
闪存的成本远较可以字节为单位写入的EEPROM来的低,也因此成为非易失性固态存储最重要也最广为采纳的技术。像是PDA、笔记本电脑、数字随身听、数码相机与手机上均可见到闪存。此外,闪存在游戏主机上的采用也日渐增加,藉以取代存储游戏数据用的EEPROM或带有电池的SRAM。
闪存是非易失性的存储器。这表示单就保存数据而言,它是不需要消耗电力的。与硬盘相比,闪存也有更佳的动态抗震性。这些特性正是闪存被移动设备广泛采用的原因。闪存还有一项特性:当它被制成储存卡时非常可靠──即使浸在水中也足以抵抗高压与极端的温度。闪存的写入速度往往明显慢于读取速度。
虽然闪存在技术上属于EEPROM,但是“EEPROM”这个字眼通常特指非快闪式、以小区块为清除单位的EEPROM。它们典型的清除单位是字节。闪存最常见的封装方式是TSOP48和BGA,在逻辑接口上的标准则由于厂商阵营而区分为两种:ONFI和Toggle。手机上的闪存常常以eMMC的方式存在。
历史
闪存(无论是NOR型或NAND型)是舛冈富士雄博士在1984年于东芝公司工作时发明。据东芝表示闪存之所以命名为“Flash”是由舛冈博士的同事有泉正二建议,因为这种存储器的抹除流程让他想起了相机的闪光灯。舛冈博士在1984年的加州旧金山IEEE国际电子组件会议(International Electron Devices Meeting, IEDM)上发表了这项发明。Intel看到了这项发明的巨大潜力,并于1988年推出第一款商业性的NOR Flash芯片。
NOR Flash需要很长的时间进行抹写,但是它提供完整的定址与数据总线,并允许随机存取存储器上的任何区域,这使的它非常适合取代老式的ROM芯片。当时ROM芯片主要用来存储几乎不需更新的代码,例如电脑的BIOS或机顶盒(Set-top Box)的固件。NOR Flash可以忍受一万到一百万次抹写循环,它同时也是早期的可移除式快闪存储媒体的基础。CompactFlash本来便是以NOR Flash为基础的,虽然它之后跳槽到成本较低的NAND Flash。
东芝在1989年的国际固态电路研讨会(ISSCC)上发表了NAND Flash。NAND Flash具有较快的抹写时间,而且每个存储单元的面积也较小,这让NAND Flash相较于NOR Flash具有较高的存储密度与较低的每比特成本。同时它的可抹除次数也高出NOR Flash十倍。然而NAND Flash的I/O接口并没有随机存取外部地址总线,它必须以区块性的方式进行读取,NAND Flash典型的区块大小是数百至数千比特。
因为多数微处理器与微控制器要求字节档次的随机存取,所以NAND Flash不适合取代那些用以装载程序的ROM。从这样的角度看来,NAND Flash比较像光盘、硬盘这类的次级存储设备。NAND Flash非常适合用于储存卡之类的大量存储设备。第一款创建在NAND Flash基础上的可移除式存储媒体是SmartMedia,此后许多存储媒体也跟着采用NAND Flash,包括MultiMediaCard、Secure Digital、Memory Stick与xD卡。
Flash编程原理都是只能将1(默认为1)写为0,而不能将0写成1.所以在Flash编程之前,必须将对应的块擦除,而擦除的过程就是将所有位都写为1的过程。编程是将相应位写0的过程,而擦除是将相应位写1的过程,两者的执行过程完全相反.
闪存将数据存储在由浮闸晶体管组成的记忆单元数组内,在单阶存储单元(Single-level cell, SLC)设备中,每个单元只存储1比特的信息。而多阶存储单元(Multi-level cell, MLC)设备则利用多种电荷值的控制让每个单元可以存储1比特以上的数据。
单层 Flash单元在默认状态代表二进制码中的“1”值。
闪存的一种限制在于即使它可以单一字节的方式读或写入,但是抹除一定是一整个区块。一般来说都是设置某一区中的所有比特为“1”,刚开始区块内的所有部分都可以写入,然而当有任何一个比特被设为“0”时,就只能借由清除整个区块来恢复“1”的状态。(即只能把1写0,不能把0写1,要把0写1只能通过檫除flash置1,然后从新写0)。
NOR Flash
从NOR Flash读取数据的方式与从RAM读取数据相近,只要提供数据的地址,数据总线就可以正确的导出数据。基于以上原因,多数微处理器可以将NOR Flash当作原地运行(Execute in place, XIP)存储器使用,这意味着存储在NOR Flash上的程序不需复制到RAM就可以直接运行。由于NOR Flash没有原生坏区管理,所以一旦存储区块发生毁损,软件或驱动程序必须接手这个问题,否则可能会导致设备发生异常。在解锁、抹除或写入NOR Flash区块时,特殊的指令会先写入已绘测的记忆区的第一页(Page)。接着快闪记忆芯片会提供可用的指令清单给实体驱动程序,而这些指令是由通用闪存接口(Common Flash memory Interface, CFI)所界定的。与用于随机存取的ROM不同,NOR Flash也可以用在存储设备上;不过与NAND Flash相比,NOR Flash的写入速度一般来说会慢很多。
NAND Flash
东芝在1989年发表了NAND Flash架构,这种存储器的访问方式类似硬盘、储存卡之类的区块性存储设备,每个区块由数个页所构成。一般来说这些页的大小为512[6]或2048或4096字节。在各个页之间彼此的连接区域会有几个字节(一般而言是数据大小的1/32),这些空间用于存储错误修正码的校验和。以下是一些典型的区块大小:
- 每32个512+ 16位组的页为1个大小是16KB的区块
- 每64个2048+ 64位组的页为1个大小是128KB的区块
- 每64个4096+128位组的页为1个大小是256KB的区块
- 每128个4096+128位组的页为1个大小是512KB的区块
读取与写入动作可以以“页”为单位偏移量进行,抹除动作只能以“区块”为单位偏移量进行。NAND Flash还有一项限制就是区块内的数据只能序列性的写入。操作次数(Number of Operations, NOPs)则代表“页”可以被写入的次数。NAND Flash也需要由设备驱动程序软件或分离的控制器芯片来进行坏区管理,例如SD卡内部便包含实行坏区管理与耗损平衡的电路。当一个逻辑区被高级软件访问时,逻辑区对应到实体区的工作则由驱动程序或控制器进行。
入门基础之——flash的更多相关文章
- HTML入门基础教程相关知识
HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...
- 超实用的Flask入门基础教程,新手必备!
Flask入门基础教程 Flask简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活.轻便.安全且容易上手.它可以很好地结合MVC模式进行开发,开发人员分工合 ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- 01shell入门基础
01shell入门基础 为什么学习和使用shell编程 shell是一种脚本语言,脚本语言是相对于编译语言而言的.脚本语言不需要编译,由解释器读取程序并且执行其中的语句,而编译语言需要编译成可执行代码 ...
- Markdown入门基础
// Markdown入门基础 最近准备开始强迫自己写博文,以治疗严重的拖延症,再不治疗就“病入骨髓,司命之所属,无奈何”了啊.正所谓“工欲善其事,必先利其器”,于是乎在写博文前,博主特地研究了下博文 ...
- JavaScript入门基础
JavaScript基本语法 1.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=).算术运 ...
- C++ STL编程轻松入门基础
C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...
- Linux shell入门基础(六)
六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...
- Linux shell入门基础(一)
Linux shell入门基础(一): 01.增加删除用户: #useradd byf userdel byf(主目录未删除) userdel -r byf 该用户的属性:usermod 用 ...
随机推荐
- 使用javascript比较任意两个日期相差天数(代码)
avascript比较两个日期相差天数,可返回负值,表示后者大于前者. 该函数在IE,firefox下均通过测试. /** 比较两个日期相差的天数,可为负值 **/ function DateDiff ...
- crm2013安装和部署语言包
步骤 1:安装语言包 假设具有执行 Microsoft Dynamics CRM for Microsoft Office Outlook 的用户,除了在执行 Microsoft Dynamics C ...
- [Algorithm -- Dynamic Programming] Recursive Staircase Problem
For example there is a staricase N = 3 | ---| |---| | |---| | ---| ...
- 使用js的indexOf,lastIndexOf,slice三函数轻易得到url的服务器,路径和页名
js的indexOf,lastIndexOf,slice能帮我们在js字符串处理时少走一些弯路. 程序如下: var url="http://www.cnblogs.com/xiandeda ...
- Google Maps API v2密钥申请以及实现地图定位导航
注意新建项目之前需要安装 google play services 然后导入 通过上图方法导入sdk包下面的一个包: \adt-bundle-windows-x86\sdk\extras\googl ...
- Android_三种菜单介绍
Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Menu).子菜单(Sub Menu) 一.选项菜单 当用户单击设备上的菜单按钮(Menu),触发事件 ...
- ant design pro(一)安装、目录结构、项目加载启动【原始、以及idea开发】
一.概述 1.1.脚手架概念 编程领域中的“脚手架(Scaffolding)”指的是能够快速搭建项目“骨架”的一类工具.例如大多数的React项目都有src,public,webpack配置文件等等, ...
- Java之进阶(1) -《Effective Java》
第1章 引言 第2章 创建和销毁对象 第1条:考虑用静态工厂方法代替构造器(Consider static factory methods instead of constructors) 第2条:遇 ...
- 【五年】Java打怪升级之路
之前写过一篇帖子.就是关于工作经验分享的,近期非常多人私信我.所以博客这边再分享一次 这几年来,我最大的感想就是一句话:多看.多写.多想.多问.多分享.多优化.多运动... 1.[多看] 读万卷书,行 ...
- percona XTRADB Cluster 5.6在ubuntu安装
installing-perconaXTRADB Cluster 5.6 in-ubuntu-13-10-wheezy First of all, I would recommend login as ...