NandFlash和iNand【转】
转自:https://www.cnblogs.com/PengfeiSong/p/6380447.html
nand
1、nand的单元组织:block与page(大页Nand与小页Nand)
(1)Nand的页和以前讲过的块设备(尤其是硬盘)的扇区是类似的。扇区最早在磁盘中是512字节,后来也有些高级硬盘扇区不是512字节而是1024字节/2048字节/4096字节等。Nand也是一样,不同的Nand的页的大小是不同的,也有512字节/1024字节/2048字节/4096字节等。
(2)一个block等于多少page也是不定的,不同的Nand也不同。一个Nand芯片有多少block也是不定的,不同的Nand芯片也不同。
总结:Nand的组织架构挺乱的,接口时序也不同,造成结构就是不同厂家的Nand芯片,或者是同一个厂家的不同系列型号存储容量的nand接口也不一样。所以nand有一个很大的问题就是一旦升级容量或者换芯片系列则硬件要重新做、软件要重新移植。
2、带内数据和带外数据(ECC与坏块标记)
(1)Nand的每个页由2部分组成,这2部分各自都有一定的存储空间。譬如K9F2G08中为2K+64字节。其中的2K字节属于带内数据,是我们真正的存储空间,将来存储在Nand中的有效数据就是存在这2K范围内的(我们平时计算nand的容量时也是只考虑这2KB);64字节的带外数据不能用来存储有效数据,是作为别的附加用途的(譬如用来存储ECC数据、用来存储坏块标志等····)
(2)什么是ECC:(error correction code,错误校验码)。因为nand存储本身出错(位反转)概率高(Nand较Nor最大的缺点就是稳定性),所以当我们将有效信息存储到Nand中时都会同时按照一定算法计算一个ECC信息(譬如CRC16等校验算法),将ECC信息同时存储到Nand这个页的带外数据区。然后等将来读取数据时,对数据用同样的算法再计算一次ECC,并且和从带外数据区读出的ECC进行校验。如果校验通过则证明Nand的有效数据可信,如果校验不通过则证明这个数据已经被损坏(只能丢弃或者尝试修复)。
(3)坏块标志:Nand芯片用一段时间后,可能某些块会坏掉(这些块无法擦除了,或者无法读写了),nand的坏块非常类似于硬盘的坏道。坏块是不可避免的,而且随着Nand的使用坏块会越来越多。当坏块还不算太多时这个Nand都是可以用的,除非坏块太多了不划算使用了才会换新的。所以我们为了管理Nand发明了一种坏块标志机制。Nand的每个页的64字节的带外数据中,我们(一般是文件系统)定义一个固定位置(譬如定位第24字节)来标记这个块是好的还是坏的。文件系统在发现这个块已经坏了没法用了时会将这个块标记为坏块,以后访问nand时直接跳过这个块即可。
inand
1、iNand/eMMC/SDCard/MMCCard的关联
(1)最早出现的是MMC卡,卡片式结构,按照MMC协议设计。(相较于NandFlash芯片来说,MMC卡有2个优势:第一是卡片化,便于拆装;第二是统一了协议接口,兼容性好。)
(2)后来出现SD卡,兼容MMC协议。SD卡较MMC有一些改进,譬如写保护、速率、容量等。
(3)SD卡遵守SD协议,有多个版本。多个版本之间向前兼容。
(4)iNand/eMMC在SD卡的基础上发展起来,较SD卡的区别就是将SD卡芯片化了(解决卡的接触不良问题,便于设备迷你化)。
(5)iNand和eMMC的关联:eMMC是协议,iNand是Sandisk公司符合eMMC协议的一种芯片系列名称。
2、iNand/eMMC的结构框图及其与NandFlash的区别
(1)iNand内部也是由存储系统和接口电路构成(和Nand结构特性类似,不同之处在于接口电路功能不同)。
(2)iNand的接口电路挺复杂,功能很健全。譬如:
第一,提供eMMC接口协议,和SoC的eMMC接口控制器通信对接。
第二,提供块的ECC校验相关的逻辑,也就是说iNand本身自己完成存储系统的ECC功能,SoC使用iNand时自己不用写代码来进行ECC相关操作,大大简化了SoC的编程难度。(NandFlash分2种:SLC和MLC,SLC更稳定,但是容量小价格高;MLC容易出错,但是容量大价格低)
第三,iNand芯片内部使用MLC Nand颗粒,所以性价比很高。
第四,iNand接口电路还提供了cache机制,所以inand的操作速度很快。
inand与sd卡协议相同、区别在数据引脚个数不同。
总结:
(1)像NandFlash这类芯片,通过专用的接口时序和SoC内部的控制器相连(这种连接方式是非常普遍的,像LCD、DDR等都是类似的连接)。这种接法和设计对我们编程来说,关键在于两点:SoC的控制器的寄存器理解和Nand芯片本身的文档、流程图等信息。
(2)对于我们来说,学习NandFlash,要注意的是:
第一,要结合SoC的数据手册、Nand芯片的数据手册、示例代码三者来理解。
第二,初学时不要尝试完全不参考自己写出Nand操作的代码,初学时应该是先理解实例代码,知道这些代码是怎么写出来的,必要时对照文档来理解代码。代码理解之后去做实践,实践成功后以后再考虑自己不参考代码只参考文档来写出nand操作的代码。
NandFlash和iNand【转】的更多相关文章
- NandFlash和iNand
nand 1.nand的单元组织:block与page(大页Nand与小页Nand)(1)Nand的页和以前讲过的块设备(尤其是硬盘)的扇区是类似的.扇区最早在磁盘中是512字节,后来也有些高级硬盘扇 ...
- Linux驱动学习之什么是驱动?
一.什么是驱动? 1: 驱动一词的字面意思 2: 物理上的驱动 3: 硬件中的驱动 4: linux内核驱动.软件层面上的驱动广义上是指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序. ...
- ARM体系结构和汇编指令
第一节 可编程器件的编程原理 1. 可编程器件的特点 1 . CPU在固定频率的时钟控制下节奏运行 2 . CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行 3 . 这些可以被CPU解 ...
- (55)Linux驱动开发之一驱动概述
驱动 ...
- nandflash的读写(2440)
说明: 根据物理结构上的区别 , NandFlash主要分为如下两类:1)•SLC (Single Level Cell): 单层式存储2)•MLC (Multi Level Cell): 多层式存储 ...
- 使用jlink直接烧norflash或者nandflash不借助uboot的猜想
由于喜欢折腾,我是在linux下使用jlink的,既然JLinkExe可以进行内存读写操作,loadbin等操作,并且通过指定命令文件支持批量指令输入,那么首先jlink是可以直接访问内部存储器的,包 ...
- 关于NOR-FLASH和NAND-fLASH的区别。——Arvin
NANDFLASH: Nand-flash内存是flash内存的一种,1989年,东芝公司发表了NAND flash结构.其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案.N ...
- NandFlash读写
1.NandFlash分类 根据物理结构上的区别,NandFlash主要分为如下两类:•SLC (Single Level Cell): 单层式存储•MLC (Multi Level Cell): 多 ...
- u-boot中nandflash初始化流程分析(转)
u-boot中nandflash初始化流程分析(转) 原文地址http://zhuairlunjj.blog.163.com/blog/static/80050945201092011249136/ ...
随机推荐
- sql server开发工具
查询分析器的使用 SQL语言包含四个部分: 1.数据定义语言(DDL) : 例如 create, drop, alter等语句 2.数据操作语言(DML) : 例如 insert,delete, up ...
- 2017-12-15python全栈9期第二天第三节之使用while循环输出1到100的奇数,
#!/user/bin/python# -*- coding:utf-8 -*-count = 1while count <101: if count % 2 == 1: print(count ...
- u-boot(六)小结
目录 u-boot(六)小结 概述 内存分布 内核交互参数 title: u-boot(六)小结 tags: linux date: 2018-09-27 23:23:05 --- u-boot(六) ...
- 运维监控-Open-Falcon介绍
运维监控-Open-Falcon介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Open-Falcon 介绍 监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事 ...
- Linux下weblogic10.3.6(jar)版本安装详解
一.安装前的准备 安装weblogic是需要JDK环境的,虽然weblogic有自带的JDK,但是我一般是自己选择JDK进行安装,如果你要自行安装,可以参考我的另一篇博客 https://www.cn ...
- 【Unity3d游戏开发】Unity中的Time.timeScale
马三最近在做一款游戏的时候涉及到了“加速”和“暂停”这两个功能,我第一时间就想到了应该用 Time.timeScale.当暂停的时候,设置timeScale = 0,当需要加速的时候,将 timeSc ...
- Spark源码剖析 - SparkContext的初始化(七)_TaskScheduler的启动
7. TaskScheduler的启动 第五节介绍了TaskScheduler的创建,要想TaskScheduler发挥作用,必须要启动它,代码: TaskScheduler在启动的时候,实际调用了b ...
- ubuntu常用
一.查看分区磁盘的速度命令 $ hdparm -Tt /dev/sda1 在终端打印出如下信息: /dev/sda1: Timing cached reads: MB in 2.00 seconds ...
- redis的安装与简单使用
redis的安装与简单使用: Redis简介: redis的应用场景: 1.关于关系型数据库和nosql数据库 关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 ...
- 未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker
昨晚遇到的这个问题,也知道Notifications service依赖底层的Service broker的.本以为只需要执行以下脚本对数据库启用Service broker即可. alter dat ...