当前位置: 首页 > news >正文

好的设计师互动网站wordpress如何重装

好的设计师互动网站,wordpress如何重装,线上商城运营,做公司的网站的需求有哪些内容概述 Flash名称的由来#xff0c;Flash的擦除操作是以block块为单位的#xff0c;与此相对应的是其他很多存储设备#xff0c;是以bit位为最小读取/写入的单位#xff0c;Flash是一次性地擦除整个块#xff1a;在发送一个擦除命令后#xff0c;一次性地将一个block…概述 Flash名称的由来Flash的擦除操作是以block块为单位的与此相对应的是其他很多存储设备是以bit位为最小读取/写入的单位Flash是一次性地擦除整个块在发送一个擦除命令后一次性地将一个block常见的块的大小是128KB/256KB全部擦除为1也就是里面的内容全部都是0xFF了由于是一下子就擦除了相对来说擦除用的时间很短可以用一闪而过来形容所以叫做Flash Memory。所以一般将Flash翻译为 快速闪存。 NAND Flash 在嵌入式系统中有着广泛的应用负载平均和坏块管理是与之相关的两个核心议题。Uboot 和 Linux 系统对 NAND 的操作都封装了对这两个问题的处理方法。本文首先讲述Nandflash基础知识然后介绍现有的几类坏块管理BBM方法通过分析典型嵌入式系统的 NAND 存储表指出了轻量级管理方法的优势所在分析了当前广泛使用的轻量级管理方法指出其缺陷所在并详细说明了改进方法。 基础知识 Flash的硬件实现机制 Flash的内部存储是MOSFET里面有个悬浮门(Floating Gate)是真正存储数据的单元。 在Flash之前紫外线可擦除(uv-erasable)的EPROM就已经采用了Floating Gate存储数据这一技术了。 典型的Flash内存物理结构   数据在Flash内存单元中是以电荷(electrical charge) 形式存储的。存储电荷的多少取决于图中的外部门external gate所被施加的电压其控制了是向存储单元中冲入电荷还是使其释放电荷。而数据的表示以所存储的电荷的电压是否超过一个特定的阈值Vth来表示因此Flash的存储单元的默认值不是0其他常见的存储设备比如硬盘灯默认值为0而是1而如果将电荷释放掉电压降低到一定程度表述数字0。 NandFlash的简介 Nand flash成本相对低说白了就是便宜缺点是使用中数据读写容易出错所以一般都需要有对应的软件或者硬件的数据校验算法统称为ECC。但优点是相对来说容量比较大现在常见的Nand Flash都是1GB2GB更大的8GB的都有了相对来说价格便宜因此适合用来存储大量的数据。其在嵌入式系统中的作用相当于PC上的硬盘用于存储大量数据。SLC和MLC Nand Flash按照内部存储数据单元的电压的不同层次也就是单个内存单元中是存储1位数据还是多位数据可以分为SLC和MLC。那么软件如何识别系统上使用过的SLC还是MLC呢Nand Flash设计中有个命令叫做Read ID读取ID读取好几个字节一般最少是4个新的芯片支持5个甚至更多从这些字节中可以解析出很多相关的信息比如此Nand Flash内部是几个芯片chip所组成的每个chip包含了几片Plane每一片中的页大小块大小等等。在这些信息中其中有一个就是识别此flash是SLC还是MLC。 oob / Redundant Area / Spare Area 每一个页对应还有一块区域叫做空闲区域spare area/冗余区域redundant area而Linux系统中一般叫做OOBOut Of Band这个区域是最初基于Nand Flash的硬件特性数据在读写时候相对容易错误所以为了保证数据的正确性必须要有对应的检测和纠错机制此机制被叫做EDC(Error Detection Code)/ECCError Code Correction, 或者 Error Checking and Correcting所以设计了多余的区域用于放置数据的校验值。 Oob的读写操作一般是随着页的操作一起完成的即读写页的时候对应地就读写了oob。 关于oob具体用途总结起来有 标记是否是坏快 存储ECC数据 存储一些和文件系统相关的数据。如jffs2就会用到这些空间存储一些特定信息而yaffs2文件系统会在oob中存放很多和自己文件系统相关的信息。 Bad Block Management坏块管理 Nand Flash由于其物理特性只有有限的擦写次数超过那个次数基本上就是坏了。在使用过程中有些Nand Flash的block会出现被用坏了当发现了要及时将此block标注为坏块不再使用。于此相关的管理工作属于Nand Flash的坏块管理的一部分工作。 Wear-Leveling负载平衡 Nand Flash的block管理还包括负载平衡。 正是由于Nand Flash的block都是有一定寿命限制的所以如果你每次都往同一个block擦除然后写入数据那么那个block就很容易被用坏了所以我们要去管理一下将这么多次的对同一个block的操作平均分布到其他一些block上面使得在block的使用上相对较平均这样相对来说可以更能充分利用Nand Flash。 ECC错误校验码 Nand Flash物理特性上使得其数据读写过程中会发生一定几率的错误所以要有个对应的错误检测和纠正的机制于是才有此ECC用于数据错误的检测与纠正。Nand Flash的ECC常见的算法有海明码和BCH这类算法的实现可以是软件也可以是硬件。不同系统根据自己的需求采用对应的软件或者是硬件。 相对来说硬件实现这类ECC算法肯定要比软件速度要快但是多加了对应的硬件部分所以成本相对要高些。如果系统对于性能要求不是很高那么可以采用软件实现这类ECC算法但是由于增加了数据读取和写入前后要做的数据错误检测和纠错所以性能相对要降低一些即Nand Flash的读取和写入速度相对会有所影响。 其中Linux中的软件实现ECC算法即NAND_ECC_SOFT模式就是用的对应的海明码。 而对于目前常见的MLC的Nand Flash来说由于容量比较大动辄2GB4GB8GB等常用BCH算法。BCH算法相对来说算法比较复杂。 笔者由于水平有限目前仍未完全搞懂BCH算法的原理。 BCH算法通常是由对应的Nand Flash的Controller中包含对应的硬件BCH ECC模块实现了BCH算法而作为软件方面需要在读取数据后写入数据之前分别操作对应BCH相关的寄存器设置成BCH模式然后读取对应的BCH状态寄存器得知是否有错误和生成的BCH校验码用于写入。 其具体代码是如何操作这些寄存器的由于是和具体的硬件具体的nand flash的controller不同而不同无法用同一的代码。如果你是nand flash驱动开发者自然会得到对应的起nand flash的controller部分的datasheet按照手册说明去操作即可。 不过额外说明一下的是关于BCH算法往往是要从专门的做软件算法的厂家购买的但是Micron之前在网上放出一个免费版本的BCH算法。 位反转 Nand Flash的位反转现象主要是由以下一些原因/效应所导致 漂移效应Drifting Effects 漂移效应指的是Nand Flash中cell的电压值慢慢地变了变的和原始值不一样了。 编程干扰所产生的错误Program-Disturb Errors 此现象有时候也叫做过度编程效应over-program effect。 对于某个页面的编程操作即写操作引起非相关的其他的页面的某个位跳变了。 读操作干扰产生的错误Read-Disturb Errors 此效应是对一个页进行数据读取操作却使得对应的某个位的数据产生了永久性的变化即Nand Flash上的该位的值变了。 对应位反转的类型Nand Flash位反转的类型和解决办法有两种 一种是nand flash物理上的数据存储的单元上的数据是正确的只是在读取此数据出来的数据中的某位发生变化出现了位反转即读取出来的数据中某位错了本来是0变成1或者本来是1变成0了。此处可以成为软件上位反转。此数据位的错误当然可以通过一定的校验算法检测并纠正。 另外一种就是nand flash中的物理存储单元中对应的某个位物理上发生了变化原来是1的变成了0或原来是0的变成了1发生了物理上的位的数据变化。此处可以成为硬件上的位反转。此错误由于是物理上发生的虽然读取出来的数据的错误可以通过软件或硬件去检测并纠正过来但是物理上真正发生的位的变化则没办法改变了。不过个人理解好像也是可以通过擦除Erase整个数据块Block的方式去擦除此错误不过在之后的Nand Flash的使用过程中估计此位还是很可能继续发生同样的硬件的位反转的错误。 以上两种类型的位反转其实对于从Nand Flash读取出来的数据来说解决其中的错误的位的方法都是一样的即通过一定的校验算法常称为ECC去检测出来或检测并纠正错误。 如果只是单独检测错误那么如果发现数据有误那么再重新读取一次即可。 实际中更多的做法是ECC校验发现有错误会有对应的算法去找出哪位错误并且纠正过来。 其中对错误的检测和纠正具体的实现方式有软件算法也有硬件实现即硬件Nand Flash的控制器controller本身包含对应的硬件模块以实现数据的校验和纠错的。 Nand Flash引脚功能的中文说明 引脚名称引脚功能I/O0 ~ I/O7用于输入地址/数据/命令输出数据CLECommand Latch Enable命令锁存使能在输入命令之前要先在模式寄存器中设置CLE使能ALEAddress Latch Enable地址锁存使能在输入地址之前要先在模式寄存器中设置ALE使能CE#Chip Enable芯片使能在操作Nand Flash之前要先选中此芯片才能操作RE#Read Enable读使能在读取数据之前要先使CE有效。WE#Write Enable写使能, 在写取数据之前要先使WE有效WP#Write Protect写保护R/B#Ready/Busy Output,就绪/忙,主要用于在发送完编程/擦除命令后,检测这些操作是否完成,忙,表示编程/擦除操作仍在进行中,就绪表示操作完成VccPower电源VssGround接地N.CNon-Connection,未定义未连接 在数据手册中你常会看到对于一个引脚定义有些字母上面带一横杠的那是说明此引脚/信号是低电平有效比如你上面看到的RE头上有个横线就是说明此RE是低电平有效此外为了书写方便在字母后面加“”也是表示低电平有效比如我上面写的CE如果字母头上啥都没有就是默认的高电平有效比如上面的CLE就是高电平有效。 Nand Flash的一些typical特性 页擦除时间是200us有些慢的有800us 块擦除时间是1.5ms 页数据读取到数据寄存器的时间一般是20us 串行访问Serial access读取一个数据的时间是25ns而一些旧的Nand Flash是30ns甚至是50ns 输入输出端口是地址和数据以及命令一起multiplex复用的 Nand Flash的编程/擦除的寿命即最多允许10万次的编程/擦除达到和接近于之前常见的Nor Flash几乎是同样的使用寿命了。 封装形式48引脚的TSOP1封装 或 52引脚的ULGA封装 Nand Flash控制器与Nand Flash芯片 我们写驱动是写Nand Flash 控制器的驱动而不是Nand Flash 芯片的驱动因为独立的Nand Flash芯片一般来说是很少直接拿来用的多数都是硬件上有对应的硬件的Nand Flash的控制器去操作和控制Nand Flash包括提供时钟信号提供硬件ECC校验等等功能我们所写的驱动软件是去操作Nand Flash的控制器 然后由控制器去操作Nand Flash芯片实现我们所要的功能。 由于Nand Flash读取和编程操作来说一般最小单位是页所以Nand Flash在硬件设计时候就考虑到这一特性对于每一片Plane都有一个对应的区域专门用于存放将要写入到物理存储单元中去的或者刚从存储单元中读取出来的一页的数据这个数据缓存区本质上就是一个缓存buffer但是只是此处datasheet里面把其叫做页寄存器page register而已实际将其理解为页缓存更贴切原意。 而正是因为有些人不了解此内部结构才容易产生之前遇到的某人的误解以为内存里面的数据通过Nand Flash的FIFO写入到Nand Flash里面去就以为立刻实现了实际数据写入到物理存储单元中了而实际上只是写到了这个页缓存中只有当你再发送了对应的编程第二阶段的确认命令即0x10之后实际的编程动作才开始才开始把页缓存中的数据一点点写到物理存储单元中去。 数据的流向如图 坏块的标记 具体标记的地方是对于现在常见的页大小为2K的Nand Flash是块中第一个页的oob起始位置的第1个字节旧的小页面pagesize是512B甚至256B的Nand Flash坏块标记是第6个字节如果不是0xFF就说明是坏块。相对应的是所有正常的块好的块里面所有数据都是0xFF的。 对于坏块的标记本质上也只是对应的flash上的某些字节的数据是非0xFF而已所以只要是数据就是可以读取和写入的。也就意味着可以写入其他值也就把这个坏块标记信息破坏了。对于出厂时的坏块一般是不建议将标记好的信息擦除掉的。 uboot中有个命令是 nand scrub 就可以将块中所有的内容都擦除了包括坏块标记不论是出厂时的还是后来使用过程中出现而新标记的。nand erase 只擦除好的块对于已经标记坏块的块不要轻易擦除掉否则就很难区分哪些是出厂时就坏的哪些是后来使用过程中用坏的了。 NAND 坏块管理方法分类 目前NAND 坏块管理方法可分为如下几类 基于 FTL 芯片的坏块管理 它使用一个额外的 FTL (Flash Translation Layer)芯片对 NAND 进行管理对外部屏蔽了坏块信息U 盘、SD 卡、MMC 卡以及固态硬盘都使用这种管理方法。这种方式简化了 NAND 操作但也使坏块信息对外部而言不可见如果系统中出现了可能和坏块相关的问题定位和调试变得困难另外FTL 芯片也需要额外的硬件成本。 基于NAND 文件系统的坏块管理 JFFS2、 YAFFS2、 FlashFx 这些专门针对 NAND 的文件系统可以对坏块进行管理。 NAND 管理中间件 有一些中间件(Middleware)专门用于 NAND 管理比如 UBI。 轻量级 NAND 坏块管理 对 NAND 进行管理的硬件或软件模块不仅提供坏块管理同时也支持对 NAND 的擦写操作进行负载平均。而轻量级的坏块管理只专注于坏块并不提供擦写负载平均的支持而且它也不依赖于任何第三方的库。因此轻量级的坏块管理方式降低了系统的复杂度而且免去了加载文件系统或初始化中间件的时间在嵌入式系统中有着广泛的应用。 图 1 展示了几种典型的嵌入式系统中 NAND 内部的内容布局。如果需要频繁地对 NAND 写入各种数据最好使用 NAND 文件系统或者 NAND 管理中间件对需要写入的区域进行管理。而那些很少需要更新的区域比如 bootloader、VPD 和 Kernel只需进行轻量级的坏块管理不需要进行负载平均。很多的嵌入式系统中需要写入 NAND 的数据量很少频度也较低比如路由器、打印机、PLC  等这些系统完全可以仅使用轻量级的坏块管理方式。 典型嵌入式系统的 Nand Memory MaP Uboot 的轻量级坏块管理方法 NAND 坏块管理都是基于坏块表(BBT)的通过这张表来标识系统中的所有坏块。所以不同的管理方法之间的差异可以通过以下几个问题来找到答案。 如何初始化和读取坏块表 产生新的坏块时如何标记并更新坏块表 如何保存坏块表是否有保存时断电保护机制? 对 NAND 写入数据时如果当前块是坏块如何找到可替换的好块 Uboot 是目前使用最为广泛的 bootloader它提供了两种轻量级坏块管理方法可称之为基本型和改进型。通过下表我们可以看到两者的差异。 Uboot 的两种坏块管理方法对比 基本型改进型初始化、读取 BBT系统每次初始化时扫描整个 NAND读取所有块的出厂坏块标志建立 BBT占用较多启动时间。系统第一次初始化时扫描整清单 1. BBM 头信个 NAND 建立 BBT。之后每次初始化时扫描 BBT 所在区域如果发现当前块的签名和坏块表的签名(一个特定的字符串)相符就读取当前块的数据作为 BBT。更新 BBT擦写操作产生新的坏块时更新内存中的 BBT同时将坏块的出厂坏块标记从 0xFF 改为 0x00。擦写出错后仍然对坏块进行操作—更改出厂坏块标记存在安全风险。而且也无法区分哪些是出厂坏块哪些是使用过程中产生的坏块。擦写操作产生新的坏块时更新内存中的 BBT同时将更新后的 BBT 立刻写入 NAND 或其他 NVRAM 中。保存 BBT不保存在 NAND 或其他 NVRAM 中保存一份无掉电保护机制。坏块替换方法如果当前块是坏块将数据写入下一个块。如果当前块是坏块将数据写入下一个块。 虽然 uboot 的改进型坏块管理方法的做了一些改进但它仍然有三个主要的缺点。 出现坏块则将数据顺序写入下一个好块。如果 NAND 中存放了多个软件模块则每个模块都需要预留一个较大的空间作为备用的好块这会浪费较多的 NAND 空间。通常每个模块预留的备用好块数为 NAND 芯片所允许的最大坏块数该值因不同的芯片而有所不同典型值为 20 或 80。假设 NAND 是大页类型总共有 N 个模块则总共需要预留的空间大小为 N*80*128KB。 读取 BBT 时仅检查签名没有对 BBT 的数据做校验。 没有掉电保护机制。如果在保存 BBT 时断电BBT 将丢失。 改进的轻量级坏块管理方法 针对现有管理方法的缺陷本文提出了一种更加安全高效的管理方法将从以下三个方面阐述其实现原理。 共用好块池机制 首先使用一个统一的备用好块池为所有存放在 NAND 中的模块提供可替换的好块。这样就不需要在每个模块后面放置一个保留区提高了 NAND 的空间利用率。 共用好块池示意图 为了实现共用好块池需要建立一个从坏块到好块的映射所以除了 BBT 之外还需定义一个替换表(SBT)。这样一来当读第 i 个块的数据时如果发现 BBT 中记录该块为坏块就去 SBT 中查询其替换块如果写第 i 个块出错需要在 BBT 中标记该块为坏块同时从好块池中获取一个新的好块假设其序号为 j然后将此好块的序号 j 写入 SBT 中的第 i 个字节而且 SBT  的第 j 个字节写序号 i。SBT 中的这种双向映射可确保数据的可靠性。此外好块池中的块也有可能成为坏块如果扫描时发现是坏块则将 SBT 中的对应位置标记为 0x00如果是在写的过程中出错则除了在 SBT 对应位置标记 0x00 之外还要更新双向映射数据。 BBT/SBT 映射示意图 安全的 BBT/SBT 数据校验机制 传统方法仅检查 BBT 所在块的签名将读到的前几个字节和一个特征字符串进行比较如果一致就认为当前块的数据为 BBT然后读取接下来的 BBT 数据但并不对 BBT 的数据做校验。如果 BBT 保存在 NAND 中数据的有效性是可以得到验证的因为 NAND 控制器或驱动一般都会对数据做 ECC 校验。但是大多数控制器使用的 ECC 算法也仅仅能纠正一个 bit、发现 2 两个  bit 的错误。如果 BBT 保存在其他的没有 ECC 校验机制的存储体中比如 NOR Flash没有对 BBT 的数据进行校验显然是不安全的。 为了更加可靠和灵活地验证 BBT/SBT 数据定义下面这个结构体来描述 BBM 信息。 BBM 头信息 typedef struct { UINT8 acSignature[4];/* BBM 签名 */ UINT32 ulBBToffset;/* BBT 偏移 */ UINT32 ulSBToffset;/* SBT 偏移 */ UINT16 usBlockNum;/* BBM 管理的 block 数目 */ UINT16 usSBTstart;/* SBT 所在位置的起始 block 序号 */ UINT16 usSBtop;/* SBT top block */ UINT16 usSBnum;/* SBT number */ UINT32 ulBBTcrc;/* BBT 数据 CRC 校验码 */ UINT32 ulSBTcrc;/* SBT 数据 CRC 校验码 */ UINT32 ulHeadcrc;/* BBM 头信息 CRC 校验码 */ } BBM_HEAD BBT/SBT 的保存形式 使用三重 CRC 校验机制无论 BBT 保存在哪种存储体中都可以更加严格地验证数据的有效性。 安全的掉电保存机制 传统的方法仅保存一份 BBT 数据如果在写 BBT 时系统掉电则 BBT 丢失系统将可能无法正常启动或工作。为安全起见本文所述方法将同时保留三个备份如果在写某个备份时掉电则还有两个完好的备份。最坏的情况是如果在写第一个备份时掉电则当前最新的一个坏块信息丢失。 读取坏块表时顺序读取三个备份如果发现三个备份的数据不一致用记录的坏块数最多的备份为当前的有效备份同时立刻更新另外两备份。 总结 本文介绍了NandFlash基础知识和几类 NAND 坏块管理方法指出了 uboot 的轻量级管理方法的缺陷提出了一种改进的方法提高了 NAND 的利用率及坏块管理的安全性可对嵌入式开发起到有很好的借鉴作用。
http://www.pierceye.com/news/316884/

相关文章:

  • 梅州市建设培训中心网站济南网上房地产
  • 海口网站提升排名专业做公司logo的网站
  • fm网站开发做网站自动赚钱
  • 网站二级导航制作wordpress找人做
  • 网站建设市场占有率网站开发工程师的职责
  • wordpress 单本小说站做网站前景
  • 只做网站可以在百度里收到吗平面设计是干嘛的
  • 义乌网站建设优化推广网站开发需要哪些人怎么分工
  • 关键词排行优化网站企业seo外包
  • 自适应网站怎么做广西建设局建设行政主管部网站
  • 把网站做成手机版学网页设计的培训
  • 陕西省建设厅执业资格注册中心网站报名系统网站建设重庆最加科技
  • 网站优化软件排名器wordpress E405
  • 北京建设部网站职称集约化网站建设方案
  • 常州溧阳建设工程管理中心网站惠州网站网站建设
  • 你的网站尚未进行备案中国建设银行贵州分行网站
  • 白银做网站的董事wordpress模板搬迁
  • 专业的网站开发建访动地科技登录网站
  • 网站模板素材下载如何做二维码跳转到网站
  • 自助建站免费信息发布网站wordpress 做图库栏目
  • 做网站 我们的工人怎么写哪个网站可以做照片分享
  • 做娱乐网站一个服务器可以建几个网站
  • 外包加工网站企业邮箱免费注册申请
  • jsp网站开发模式徐州手机网站制作
  • 三合一网站开发架构怎么用dw设计网站页面
  • 资源分享网站怎么做临沂住房和城乡建设厅网站
  • 住房和城乡建设部官方网站办事大厅企业展厅设计公司信息
  • 公司网站设计单页网站怎么做排名
  • 公司产品网站应该怎么做页面模板第三方应用
  • 绍兴网站建设网站站长 网站对比